hc
2024-05-10 9999e48639b3cecb08ffb37358bcba3b48161b29
kernel/fs/gfs2/inode.c
....@@ -1,10 +1,7 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
34 * Copyright (C) 2004-2011 Red Hat, Inc. All rights reserved.
4
- *
5
- * This copyrighted material is made available to anyone wishing to use,
6
- * modify, copy, or redistribute it subject to the terms and conditions
7
- * of the GNU General Public License version 2.
85 */
96
107 #include <linux/slab.h>
....@@ -20,6 +17,7 @@
2017 #include <linux/crc32.h>
2118 #include <linux/iomap.h>
2219 #include <linux/security.h>
20
+#include <linux/fiemap.h>
2321 #include <linux/uaccess.h>
2422
2523 #include "gfs2.h"
....@@ -117,6 +115,10 @@
117115 * placeholder because it doesn't otherwise make sense), the on-disk block type
118116 * is verified to be @blktype.
119117 *
118
+ * When @no_formal_ino is non-zero, this function will return ERR_PTR(-ESTALE)
119
+ * if it detects that @no_formal_ino doesn't match the actual inode generation
120
+ * number. However, it doesn't always know unless @type is DT_UNKNOWN.
121
+ *
120122 * Returns: A VFS inode, or an error
121123 */
122124
....@@ -139,7 +141,6 @@
139141
140142 if (inode->i_state & I_NEW) {
141143 struct gfs2_sbd *sdp = GFS2_SB(inode);
142
- ip->i_no_formal_ino = no_formal_ino;
143144
144145 error = gfs2_glock_get(sdp, no_addr, &gfs2_inode_glops, CREATE, &ip->i_gl);
145146 if (unlikely(error))
....@@ -148,7 +149,9 @@
148149
149150 error = gfs2_glock_get(sdp, no_addr, &gfs2_iopen_glops, CREATE, &io_gl);
150151 if (unlikely(error))
151
- goto fail_put;
152
+ goto fail;
153
+ if (blktype != GFS2_BLKST_UNLINKED)
154
+ gfs2_cancel_delete_work(io_gl);
152155
153156 if (type == DT_UNKNOWN || blktype != GFS2_BLKST_FREE) {
154157 /*
....@@ -159,13 +162,18 @@
159162 error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE,
160163 GL_SKIP, &i_gh);
161164 if (error)
162
- goto fail_put;
165
+ goto fail;
166
+
167
+ error = -ESTALE;
168
+ if (no_formal_ino &&
169
+ gfs2_inode_already_deleted(ip->i_gl, no_formal_ino))
170
+ goto fail;
163171
164172 if (blktype != GFS2_BLKST_FREE) {
165173 error = gfs2_check_blk_type(sdp, no_addr,
166174 blktype);
167175 if (error)
168
- goto fail_put;
176
+ goto fail;
169177 }
170178 }
171179
....@@ -173,65 +181,74 @@
173181 set_bit(GIF_INVALID, &ip->i_flags);
174182 error = gfs2_glock_nq_init(io_gl, LM_ST_SHARED, GL_EXACT, &ip->i_iopen_gh);
175183 if (unlikely(error))
176
- goto fail_put;
184
+ goto fail;
177185 glock_set_object(ip->i_iopen_gh.gh_gl, ip);
178186 gfs2_glock_put(io_gl);
179187 io_gl = NULL;
180
-
181
- if (type == DT_UNKNOWN) {
182
- /* Inode glock must be locked already */
183
- error = gfs2_inode_refresh(GFS2_I(inode));
184
- if (error)
185
- goto fail_refresh;
186
- } else {
187
- inode->i_mode = DT2IF(type);
188
- }
189
-
190
- gfs2_set_iop(inode);
191188
192189 /* Lowest possible timestamp; will be overwritten in gfs2_dinode_in. */
193190 inode->i_atime.tv_sec = 1LL << (8 * sizeof(inode->i_atime.tv_sec) - 1);
194191 inode->i_atime.tv_nsec = 0;
195192
196
- unlock_new_inode(inode);
193
+ if (type == DT_UNKNOWN) {
194
+ /* Inode glock must be locked already */
195
+ error = gfs2_inode_refresh(GFS2_I(inode));
196
+ if (error)
197
+ goto fail;
198
+ } else {
199
+ ip->i_no_formal_ino = no_formal_ino;
200
+ inode->i_mode = DT2IF(type);
201
+ }
202
+
203
+ if (gfs2_holder_initialized(&i_gh))
204
+ gfs2_glock_dq_uninit(&i_gh);
205
+
206
+ gfs2_set_iop(inode);
197207 }
198208
199
- if (gfs2_holder_initialized(&i_gh))
200
- gfs2_glock_dq_uninit(&i_gh);
209
+ if (no_formal_ino && ip->i_no_formal_ino &&
210
+ no_formal_ino != ip->i_no_formal_ino) {
211
+ error = -ESTALE;
212
+ if (inode->i_state & I_NEW)
213
+ goto fail;
214
+ iput(inode);
215
+ return ERR_PTR(error);
216
+ }
217
+
218
+ if (inode->i_state & I_NEW)
219
+ unlock_new_inode(inode);
220
+
201221 return inode;
202222
203
-fail_refresh:
204
- ip->i_iopen_gh.gh_flags |= GL_NOCACHE;
205
- glock_clear_object(ip->i_iopen_gh.gh_gl, ip);
206
- gfs2_glock_dq_uninit(&ip->i_iopen_gh);
207
-fail_put:
223
+fail:
208224 if (io_gl)
209225 gfs2_glock_put(io_gl);
210
- glock_clear_object(ip->i_gl, ip);
211226 if (gfs2_holder_initialized(&i_gh))
212227 gfs2_glock_dq_uninit(&i_gh);
213
-fail:
214228 iget_failed(inode);
215229 return ERR_PTR(error);
216230 }
217231
232
+/**
233
+ * gfs2_lookup_by_inum - look up an inode by inode number
234
+ * @sdp: The super block
235
+ * @no_addr: The inode number
236
+ * @no_formal_ino: The inode generation number (0 for any)
237
+ * @blktype: Requested block type (see gfs2_inode_lookup)
238
+ */
218239 struct inode *gfs2_lookup_by_inum(struct gfs2_sbd *sdp, u64 no_addr,
219
- u64 *no_formal_ino, unsigned int blktype)
240
+ u64 no_formal_ino, unsigned int blktype)
220241 {
221242 struct super_block *sb = sdp->sd_vfs;
222243 struct inode *inode;
223244 int error;
224245
225
- inode = gfs2_inode_lookup(sb, DT_UNKNOWN, no_addr, 0, blktype);
246
+ inode = gfs2_inode_lookup(sb, DT_UNKNOWN, no_addr, no_formal_ino,
247
+ blktype);
226248 if (IS_ERR(inode))
227249 return inode;
228250
229
- /* Two extra checks for NFS only */
230251 if (no_formal_ino) {
231
- error = -ESTALE;
232
- if (GFS2_I(inode)->i_no_formal_ino != *no_formal_ino)
233
- goto fail_iput;
234
-
235252 error = -EIO;
236253 if (GFS2_I(inode)->i_diskflags & GFS2_DIF_SYSTEM)
237254 goto fail_iput;
....@@ -597,13 +614,13 @@
597614 if (!name->len || name->len > GFS2_FNAMESIZE)
598615 return -ENAMETOOLONG;
599616
600
- error = gfs2_rsqa_alloc(dip);
617
+ error = gfs2_qa_get(dip);
601618 if (error)
602619 return error;
603620
604621 error = gfs2_rindex_update(sdp);
605622 if (error)
606
- return error;
623
+ goto fail;
607624
608625 error = gfs2_glock_nq_init(dip->i_gl, LM_ST_EXCLUSIVE, 0, ghs);
609626 if (error)
....@@ -631,7 +648,7 @@
631648 error = finish_no_open(file, NULL);
632649 }
633650 gfs2_glock_dq_uninit(ghs);
634
- return error;
651
+ goto fail;
635652 } else if (error != -ENOENT) {
636653 goto fail_gunlock;
637654 }
....@@ -650,7 +667,7 @@
650667 goto fail_gunlock;
651668
652669 ip = GFS2_I(inode);
653
- error = gfs2_rsqa_alloc(ip);
670
+ error = gfs2_qa_get(ip);
654671 if (error)
655672 goto fail_free_acls;
656673
....@@ -659,7 +676,6 @@
659676 inode->i_rdev = dev;
660677 inode->i_size = size;
661678 inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
662
- gfs2_set_inode_blocks(inode, 1);
663679 munge_mode_uid_gid(dip, inode);
664680 check_and_update_goal(dip);
665681 ip->i_goal = dip->i_goal;
....@@ -709,13 +725,19 @@
709725 flush_delayed_work(&ip->i_gl->gl_work);
710726 glock_set_object(ip->i_gl, ip);
711727
712
- error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, GL_SKIP, ghs + 1);
728
+ error = gfs2_glock_get(sdp, ip->i_no_addr, &gfs2_iopen_glops, CREATE, &io_gl);
713729 if (error)
714730 goto fail_free_inode;
731
+ gfs2_cancel_delete_work(io_gl);
732
+ glock_set_object(io_gl, ip);
733
+
734
+ error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, GL_SKIP, ghs + 1);
735
+ if (error)
736
+ goto fail_gunlock2;
715737
716738 error = gfs2_trans_begin(sdp, blocks, 0);
717739 if (error)
718
- goto fail_free_inode;
740
+ goto fail_gunlock2;
719741
720742 if (blocks > 1) {
721743 ip->i_eattr = ip->i_no_addr + 1;
....@@ -724,17 +746,12 @@
724746 init_dinode(dip, ip, symname);
725747 gfs2_trans_end(sdp);
726748
727
- error = gfs2_glock_get(sdp, ip->i_no_addr, &gfs2_iopen_glops, CREATE, &io_gl);
728
- if (error)
729
- goto fail_free_inode;
730
-
731749 BUG_ON(test_and_set_bit(GLF_INODE_CREATING, &io_gl->gl_flags));
732750
733751 error = gfs2_glock_nq_init(io_gl, LM_ST_SHARED, GL_EXACT, &ip->i_iopen_gh);
734752 if (error)
735753 goto fail_gunlock2;
736754
737
- glock_set_object(ip->i_iopen_gh.gh_gl, ip);
738755 gfs2_set_iop(inode);
739756 insert_inode_hash(inode);
740757
....@@ -774,9 +791,11 @@
774791 error = finish_open(file, dentry, gfs2_open_common);
775792 }
776793 gfs2_glock_dq_uninit(ghs);
794
+ gfs2_qa_put(ip);
777795 gfs2_glock_dq_uninit(ghs + 1);
778796 clear_bit(GLF_INODE_CREATING, &io_gl->gl_flags);
779797 gfs2_glock_put(io_gl);
798
+ gfs2_qa_put(dip);
780799 return error;
781800
782801 fail_gunlock3:
....@@ -784,20 +803,23 @@
784803 gfs2_glock_dq_uninit(&ip->i_iopen_gh);
785804 fail_gunlock2:
786805 clear_bit(GLF_INODE_CREATING, &io_gl->gl_flags);
806
+ glock_clear_object(io_gl, ip);
787807 gfs2_glock_put(io_gl);
788808 fail_free_inode:
789809 if (ip->i_gl) {
790810 glock_clear_object(ip->i_gl, ip);
791
- gfs2_glock_put(ip->i_gl);
811
+ if (free_vfs_inode) /* else evict will do the put for us */
812
+ gfs2_glock_put(ip->i_gl);
792813 }
793
- gfs2_rsqa_delete(ip, NULL);
814
+ gfs2_rs_deltree(&ip->i_res);
815
+ gfs2_qa_put(ip);
794816 fail_free_acls:
795817 posix_acl_release(default_acl);
796818 posix_acl_release(acl);
797819 fail_gunlock:
798820 gfs2_dir_no_add(&da);
799821 gfs2_glock_dq_uninit(ghs);
800
- if (inode && !IS_ERR(inode)) {
822
+ if (!IS_ERR_OR_NULL(inode)) {
801823 clear_nlink(inode);
802824 if (!free_vfs_inode)
803825 mark_inode_dirty(inode);
....@@ -808,6 +830,7 @@
808830 if (gfs2_holder_initialized(ghs + 1))
809831 gfs2_glock_dq_uninit(ghs + 1);
810832 fail:
833
+ gfs2_qa_put(dip);
811834 return error;
812835 }
813836
....@@ -909,7 +932,7 @@
909932 if (S_ISDIR(inode->i_mode))
910933 return -EPERM;
911934
912
- error = gfs2_rsqa_alloc(dip);
935
+ error = gfs2_qa_get(dip);
913936 if (error)
914937 return error;
915938
....@@ -1012,6 +1035,7 @@
10121035 out_child:
10131036 gfs2_glock_dq(ghs);
10141037 out_parent:
1038
+ gfs2_qa_put(dip);
10151039 gfs2_holder_uninit(ghs);
10161040 gfs2_holder_uninit(ghs + 1);
10171041 return error;
....@@ -1352,7 +1376,7 @@
13521376 struct gfs2_inode *ip = GFS2_I(d_inode(odentry));
13531377 struct gfs2_inode *nip = NULL;
13541378 struct gfs2_sbd *sdp = GFS2_SB(odir);
1355
- struct gfs2_holder ghs[5], r_gh;
1379
+ struct gfs2_holder ghs[4], r_gh, rd_gh;
13561380 struct gfs2_rgrpd *nrgd;
13571381 unsigned int num_gh;
13581382 int dir_rename = 0;
....@@ -1361,6 +1385,7 @@
13611385 int error;
13621386
13631387 gfs2_holder_mark_uninitialized(&r_gh);
1388
+ gfs2_holder_mark_uninitialized(&rd_gh);
13641389 if (d_really_is_positive(ndentry)) {
13651390 nip = GFS2_I(d_inode(ndentry));
13661391 if (ip == nip)
....@@ -1371,7 +1396,7 @@
13711396 if (error)
13721397 return error;
13731398
1374
- error = gfs2_rsqa_alloc(ndip);
1399
+ error = gfs2_qa_get(ndip);
13751400 if (error)
13761401 return error;
13771402
....@@ -1391,28 +1416,42 @@
13911416 }
13921417
13931418 num_gh = 1;
1394
- gfs2_holder_init(odip->i_gl, LM_ST_EXCLUSIVE, 0, ghs);
1419
+ gfs2_holder_init(odip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, ghs);
13951420 if (odip != ndip) {
1396
- gfs2_holder_init(ndip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + num_gh);
1421
+ gfs2_holder_init(ndip->i_gl, LM_ST_EXCLUSIVE,GL_ASYNC,
1422
+ ghs + num_gh);
13971423 num_gh++;
13981424 }
1399
- gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + num_gh);
1425
+ gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, ghs + num_gh);
14001426 num_gh++;
14011427
14021428 if (nip) {
1403
- gfs2_holder_init(nip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + num_gh);
1429
+ gfs2_holder_init(nip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC,
1430
+ ghs + num_gh);
14041431 num_gh++;
1405
- /* grab the resource lock for unlink flag twiddling
1406
- * this is the case of the target file already existing
1407
- * so we unlink before doing the rename
1408
- */
1409
- nrgd = gfs2_blk2rgrpd(sdp, nip->i_no_addr, 1);
1410
- if (nrgd)
1411
- gfs2_holder_init(nrgd->rd_gl, LM_ST_EXCLUSIVE, 0, ghs + num_gh++);
14121432 }
14131433
14141434 for (x = 0; x < num_gh; x++) {
14151435 error = gfs2_glock_nq(ghs + x);
1436
+ if (error)
1437
+ goto out_gunlock;
1438
+ }
1439
+ error = gfs2_glock_async_wait(num_gh, ghs);
1440
+ if (error)
1441
+ goto out_gunlock;
1442
+
1443
+ if (nip) {
1444
+ /* Grab the resource group glock for unlink flag twiddling.
1445
+ * This is the case where the target dinode already exists
1446
+ * so we unlink before doing the rename.
1447
+ */
1448
+ nrgd = gfs2_blk2rgrpd(sdp, nip->i_no_addr, 1);
1449
+ if (!nrgd) {
1450
+ error = -ENOENT;
1451
+ goto out_gunlock;
1452
+ }
1453
+ error = gfs2_glock_nq_init(nrgd->rd_gl, LM_ST_EXCLUSIVE, 0,
1454
+ &rd_gh);
14161455 if (error)
14171456 goto out_gunlock;
14181457 }
....@@ -1464,7 +1503,7 @@
14641503 error = -EEXIST;
14651504 default:
14661505 goto out_gunlock;
1467
- };
1506
+ }
14681507
14691508 if (odip != ndip) {
14701509 if (!ndip->i_inode.i_nlink) {
....@@ -1545,14 +1584,19 @@
15451584 gfs2_quota_unlock(ndip);
15461585 out_gunlock:
15471586 gfs2_dir_no_add(&da);
1587
+ if (gfs2_holder_initialized(&rd_gh))
1588
+ gfs2_glock_dq_uninit(&rd_gh);
1589
+
15481590 while (x--) {
1549
- gfs2_glock_dq(ghs + x);
1591
+ if (gfs2_holder_queued(ghs + x))
1592
+ gfs2_glock_dq(ghs + x);
15501593 gfs2_holder_uninit(ghs + x);
15511594 }
15521595 out_gunlock_r:
15531596 if (gfs2_holder_initialized(&r_gh))
15541597 gfs2_glock_dq_uninit(&r_gh);
15551598 out:
1599
+ gfs2_qa_put(ndip);
15561600 return error;
15571601 }
15581602
....@@ -1576,7 +1620,7 @@
15761620 struct gfs2_inode *oip = GFS2_I(odentry->d_inode);
15771621 struct gfs2_inode *nip = GFS2_I(ndentry->d_inode);
15781622 struct gfs2_sbd *sdp = GFS2_SB(odir);
1579
- struct gfs2_holder ghs[5], r_gh;
1623
+ struct gfs2_holder ghs[4], r_gh;
15801624 unsigned int num_gh;
15811625 unsigned int x;
15821626 umode_t old_mode = oip->i_inode.i_mode;
....@@ -1610,15 +1654,16 @@
16101654 }
16111655
16121656 num_gh = 1;
1613
- gfs2_holder_init(odip->i_gl, LM_ST_EXCLUSIVE, 0, ghs);
1657
+ gfs2_holder_init(odip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, ghs);
16141658 if (odip != ndip) {
1615
- gfs2_holder_init(ndip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + num_gh);
1659
+ gfs2_holder_init(ndip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC,
1660
+ ghs + num_gh);
16161661 num_gh++;
16171662 }
1618
- gfs2_holder_init(oip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + num_gh);
1663
+ gfs2_holder_init(oip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, ghs + num_gh);
16191664 num_gh++;
16201665
1621
- gfs2_holder_init(nip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + num_gh);
1666
+ gfs2_holder_init(nip->i_gl, LM_ST_EXCLUSIVE, GL_ASYNC, ghs + num_gh);
16221667 num_gh++;
16231668
16241669 for (x = 0; x < num_gh; x++) {
....@@ -1626,6 +1671,10 @@
16261671 if (error)
16271672 goto out_gunlock;
16281673 }
1674
+
1675
+ error = gfs2_glock_async_wait(num_gh, ghs);
1676
+ if (error)
1677
+ goto out_gunlock;
16291678
16301679 error = -ENOENT;
16311680 if (oip->i_inode.i_nlink == 0 || nip->i_inode.i_nlink == 0)
....@@ -1687,7 +1736,8 @@
16871736 gfs2_trans_end(sdp);
16881737 out_gunlock:
16891738 while (x--) {
1690
- gfs2_glock_dq(ghs + x);
1739
+ if (gfs2_holder_queued(ghs + x))
1740
+ gfs2_glock_dq(ghs + x);
16911741 gfs2_holder_uninit(ghs + x);
16921742 }
16931743 out_gunlock_r:
....@@ -1858,10 +1908,9 @@
18581908 ouid = nuid = NO_UID_QUOTA_CHANGE;
18591909 if (!(attr->ia_valid & ATTR_GID) || gid_eq(ogid, ngid))
18601910 ogid = ngid = NO_GID_QUOTA_CHANGE;
1861
-
1862
- error = gfs2_rsqa_alloc(ip);
1911
+ error = gfs2_qa_get(ip);
18631912 if (error)
1864
- goto out;
1913
+ return error;
18651914
18661915 error = gfs2_rindex_update(sdp);
18671916 if (error)
....@@ -1899,6 +1948,7 @@
18991948 out_gunlock_q:
19001949 gfs2_quota_unlock(ip);
19011950 out:
1951
+ gfs2_qa_put(ip);
19021952 return error;
19031953 }
19041954
....@@ -1920,21 +1970,21 @@
19201970 struct gfs2_holder i_gh;
19211971 int error;
19221972
1923
- error = gfs2_rsqa_alloc(ip);
1973
+ error = gfs2_qa_get(ip);
19241974 if (error)
19251975 return error;
19261976
19271977 error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &i_gh);
19281978 if (error)
1929
- return error;
1979
+ goto out;
19301980
19311981 error = -EPERM;
19321982 if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
1933
- goto out;
1983
+ goto error;
19341984
19351985 error = setattr_prepare(dentry, attr);
19361986 if (error)
1937
- goto out;
1987
+ goto error;
19381988
19391989 if (attr->ia_valid & ATTR_SIZE)
19401990 error = gfs2_setattr_size(inode, attr->ia_size);
....@@ -1946,10 +1996,12 @@
19461996 error = posix_acl_chmod(inode, inode->i_mode);
19471997 }
19481998
1949
-out:
1999
+error:
19502000 if (!error)
19512001 mark_inode_dirty(inode);
19522002 gfs2_glock_dq_uninit(&i_gh);
2003
+out:
2004
+ gfs2_qa_put(ip);
19532005 return error;
19542006 }
19552007
....@@ -2065,6 +2117,25 @@
20652117 return vfs_setpos(file, ret, inode->i_sb->s_maxbytes);
20662118 }
20672119
2120
+static int gfs2_update_time(struct inode *inode, struct timespec64 *time,
2121
+ int flags)
2122
+{
2123
+ struct gfs2_inode *ip = GFS2_I(inode);
2124
+ struct gfs2_glock *gl = ip->i_gl;
2125
+ struct gfs2_holder *gh;
2126
+ int error;
2127
+
2128
+ gh = gfs2_glock_is_locked_by_me(gl);
2129
+ if (gh && !gfs2_glock_is_held_excl(gl)) {
2130
+ gfs2_glock_dq(gh);
2131
+ gfs2_holder_reinit(LM_ST_EXCLUSIVE, 0, gh);
2132
+ error = gfs2_glock_nq(gh);
2133
+ if (error)
2134
+ return error;
2135
+ }
2136
+ return generic_update_time(inode, time, flags);
2137
+}
2138
+
20682139 const struct inode_operations gfs2_file_iops = {
20692140 .permission = gfs2_permission,
20702141 .setattr = gfs2_setattr,
....@@ -2073,6 +2144,7 @@
20732144 .fiemap = gfs2_fiemap,
20742145 .get_acl = gfs2_get_acl,
20752146 .set_acl = gfs2_set_acl,
2147
+ .update_time = gfs2_update_time,
20762148 };
20772149
20782150 const struct inode_operations gfs2_dir_iops = {
....@@ -2092,6 +2164,7 @@
20922164 .fiemap = gfs2_fiemap,
20932165 .get_acl = gfs2_get_acl,
20942166 .set_acl = gfs2_set_acl,
2167
+ .update_time = gfs2_update_time,
20952168 .atomic_open = gfs2_atomic_open,
20962169 };
20972170