225
static int gfs2_dinode_in(struct gfs2_inode *ip, const void *buf)
227
const struct gfs2_dinode *str = buf;
228
struct timespec atime;
231
if (unlikely(ip->i_no_addr != be64_to_cpu(str->di_num.no_addr)))
233
ip->i_no_formal_ino = be64_to_cpu(str->di_num.no_formal_ino);
234
ip->i_inode.i_mode = be32_to_cpu(str->di_mode);
235
ip->i_inode.i_rdev = 0;
236
switch (ip->i_inode.i_mode & S_IFMT) {
239
ip->i_inode.i_rdev = MKDEV(be32_to_cpu(str->di_major),
240
be32_to_cpu(str->di_minor));
244
ip->i_inode.i_uid = be32_to_cpu(str->di_uid);
245
ip->i_inode.i_gid = be32_to_cpu(str->di_gid);
247
* We will need to review setting the nlink count here in the
248
* light of the forthcoming ro bind mount work. This is a reminder
251
ip->i_inode.i_nlink = be32_to_cpu(str->di_nlink);
252
i_size_write(&ip->i_inode, be64_to_cpu(str->di_size));
253
gfs2_set_inode_blocks(&ip->i_inode, be64_to_cpu(str->di_blocks));
254
atime.tv_sec = be64_to_cpu(str->di_atime);
255
atime.tv_nsec = be32_to_cpu(str->di_atime_nsec);
256
if (timespec_compare(&ip->i_inode.i_atime, &atime) < 0)
257
ip->i_inode.i_atime = atime;
258
ip->i_inode.i_mtime.tv_sec = be64_to_cpu(str->di_mtime);
259
ip->i_inode.i_mtime.tv_nsec = be32_to_cpu(str->di_mtime_nsec);
260
ip->i_inode.i_ctime.tv_sec = be64_to_cpu(str->di_ctime);
261
ip->i_inode.i_ctime.tv_nsec = be32_to_cpu(str->di_ctime_nsec);
263
ip->i_goal = be64_to_cpu(str->di_goal_meta);
264
ip->i_generation = be64_to_cpu(str->di_generation);
266
ip->i_diskflags = be32_to_cpu(str->di_flags);
267
gfs2_set_inode_flags(&ip->i_inode);
268
height = be16_to_cpu(str->di_height);
269
if (unlikely(height > GFS2_MAX_META_HEIGHT))
271
ip->i_height = (u8)height;
273
depth = be16_to_cpu(str->di_depth);
274
if (unlikely(depth > GFS2_DIR_MAX_DEPTH))
276
ip->i_depth = (u8)depth;
277
ip->i_entries = be32_to_cpu(str->di_entries);
279
ip->i_eattr = be64_to_cpu(str->di_eattr);
280
if (S_ISREG(ip->i_inode.i_mode))
281
gfs2_set_aops(&ip->i_inode);
285
if (gfs2_consist_inode(ip))
286
gfs2_dinode_print(ip);
291
* gfs2_inode_refresh - Refresh the incore copy of the dinode
292
* @ip: The GFS2 inode
297
int gfs2_inode_refresh(struct gfs2_inode *ip)
299
struct buffer_head *dibh;
302
error = gfs2_meta_inode_buffer(ip, &dibh);
306
if (gfs2_metatype_check(GFS2_SB(&ip->i_inode), dibh, GFS2_METATYPE_DI)) {
311
error = gfs2_dinode_in(ip, dibh->b_data);
313
clear_bit(GIF_INVALID, &ip->i_flags);
318
int gfs2_dinode_dealloc(struct gfs2_inode *ip)
320
struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
321
struct gfs2_alloc *al;
322
struct gfs2_rgrpd *rgd;
325
if (gfs2_get_inode_blocks(&ip->i_inode) != 1) {
326
if (gfs2_consist_inode(ip))
327
gfs2_dinode_print(ip);
331
al = gfs2_alloc_get(ip);
335
error = gfs2_quota_hold(ip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE);
339
error = gfs2_rindex_hold(sdp, &al->al_ri_gh);
343
rgd = gfs2_blk2rgrpd(sdp, ip->i_no_addr);
345
gfs2_consist_inode(ip);
347
goto out_rindex_relse;
350
error = gfs2_glock_nq_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0,
353
goto out_rindex_relse;
355
error = gfs2_trans_begin(sdp, RES_RG_BIT + RES_STATFS + RES_QUOTA, 1);
359
set_bit(GLF_DIRTY, &ip->i_gl->gl_flags);
360
set_bit(GLF_LFLUSH, &ip->i_gl->gl_flags);
362
gfs2_free_di(rgd, ip);
367
gfs2_glock_dq_uninit(&al->al_rgd_gh);
369
gfs2_glock_dq_uninit(&al->al_ri_gh);
371
gfs2_quota_unhold(ip);
378
* gfs2_change_nlink - Change nlink count on inode
379
* @ip: The GFS2 inode
380
* @diff: The change in the nlink count required
384
int gfs2_change_nlink(struct gfs2_inode *ip, int diff)
386
struct buffer_head *dibh;
390
BUG_ON(diff != 1 && diff != -1);
391
nlink = ip->i_inode.i_nlink + diff;
393
/* If we are reducing the nlink count, but the new value ends up being
394
bigger than the old one, we must have underflowed. */
395
if (diff < 0 && nlink > ip->i_inode.i_nlink) {
396
if (gfs2_consist_inode(ip))
397
gfs2_dinode_print(ip);
401
error = gfs2_meta_inode_buffer(ip, &dibh);
406
inc_nlink(&ip->i_inode);
408
drop_nlink(&ip->i_inode);
410
ip->i_inode.i_ctime = CURRENT_TIME;
412
gfs2_trans_add_bh(ip->i_gl, dibh, 1);
413
gfs2_dinode_out(ip, dibh->b_data);
415
mark_inode_dirty(&ip->i_inode);
417
if (ip->i_inode.i_nlink == 0)
418
gfs2_unlink_di(&ip->i_inode); /* mark inode unlinked */
423
249
struct inode *gfs2_lookup_simple(struct inode *dip, const char *name)
728
if (dip->i_alloc->al_rgd)
729
gfs2_inplace_release(dip);
730
gfs2_quota_unlock(dip);
732
gfs2_glock_dq_uninit_m(2, ghs);
733
mark_inode_dirty(inode);
734
d_instantiate(dentry, inode);
870
738
gfs2_glock_dq_uninit(ghs + 1);
871
739
if (inode && !IS_ERR(inode))
742
gfs2_glock_dq_uninit(ghs);
878
return ERR_PTR(error);
750
* gfs2_create - Create a file
751
* @dir: The directory in which to create the file
752
* @dentry: The dentry of the new file
753
* @mode: The mode of the new file
758
static int gfs2_create(struct inode *dir, struct dentry *dentry,
759
int mode, struct nameidata *nd)
765
ret = gfs2_create_inode(dir, dentry, S_IFREG | mode, 0, NULL, 0);
766
if (ret != -EEXIST || (nd && (nd->flags & LOOKUP_EXCL)))
769
inode = gfs2_lookupi(dir, &dentry->d_name, 0);
773
return PTR_ERR(inode);
777
d_instantiate(dentry, inode);
782
* gfs2_lookup - Look up a filename in a directory and return its inode
783
* @dir: The directory inode
784
* @dentry: The dentry of the new inode
785
* @nd: passed from Linux VFS, ignored by us
787
* Called by the VFS layer. Lock dir and call gfs2_lookupi()
792
static struct dentry *gfs2_lookup(struct inode *dir, struct dentry *dentry,
793
struct nameidata *nd)
795
struct inode *inode = NULL;
797
inode = gfs2_lookupi(dir, &dentry->d_name, 0);
798
if (inode && IS_ERR(inode))
799
return ERR_CAST(inode);
802
struct gfs2_glock *gl = GFS2_I(inode)->i_gl;
803
struct gfs2_holder gh;
805
error = gfs2_glock_nq_init(gl, LM_ST_SHARED, LM_FLAG_ANY, &gh);
808
return ERR_PTR(error);
810
gfs2_glock_dq_uninit(&gh);
811
return d_splice_alias(inode, dentry);
813
d_add(dentry, inode);
819
* gfs2_link - Link to a file
820
* @old_dentry: The inode to link
821
* @dir: Add link to this directory
822
* @dentry: The name of the link
824
* Link the inode in "old_dentry" into the directory "dir" with the
830
static int gfs2_link(struct dentry *old_dentry, struct inode *dir,
831
struct dentry *dentry)
833
struct gfs2_inode *dip = GFS2_I(dir);
834
struct gfs2_sbd *sdp = GFS2_SB(dir);
835
struct inode *inode = old_dentry->d_inode;
836
struct gfs2_inode *ip = GFS2_I(inode);
837
struct gfs2_holder ghs[2];
838
struct buffer_head *dibh;
842
if (S_ISDIR(inode->i_mode))
845
gfs2_holder_init(dip->i_gl, LM_ST_EXCLUSIVE, 0, ghs);
846
gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + 1);
848
error = gfs2_glock_nq(ghs); /* parent */
852
error = gfs2_glock_nq(ghs + 1); /* child */
857
if (inode->i_nlink == 0)
860
error = gfs2_permission(dir, MAY_WRITE | MAY_EXEC, 0);
864
error = gfs2_dir_check(dir, &dentry->d_name, NULL);
875
if (!dip->i_inode.i_nlink)
878
if (dip->i_entries == (u32)-1)
881
if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
884
if (!ip->i_inode.i_nlink)
887
if (ip->i_inode.i_nlink == (u32)-1)
890
alloc_required = error = gfs2_diradd_alloc_required(dir, &dentry->d_name);
895
if (alloc_required) {
896
struct gfs2_alloc *al = gfs2_alloc_get(dip);
902
error = gfs2_quota_lock_check(dip);
906
al->al_requested = sdp->sd_max_dirres;
908
error = gfs2_inplace_reserve(dip);
912
error = gfs2_trans_begin(sdp, sdp->sd_max_dirres +
914
2 * RES_DINODE + RES_STATFS +
919
error = gfs2_trans_begin(sdp, 2 * RES_DINODE + RES_LEAF, 0);
924
error = gfs2_meta_inode_buffer(ip, &dibh);
928
error = gfs2_dir_add(dir, &dentry->d_name, ip);
932
gfs2_trans_add_bh(ip->i_gl, dibh, 1);
933
inc_nlink(&ip->i_inode);
934
ip->i_inode.i_ctime = CURRENT_TIME;
935
gfs2_dinode_out(ip, dibh->b_data);
936
mark_inode_dirty(&ip->i_inode);
944
gfs2_inplace_release(dip);
947
gfs2_quota_unlock(dip);
952
gfs2_glock_dq(ghs + 1);
956
gfs2_holder_uninit(ghs);
957
gfs2_holder_uninit(ghs + 1);
960
d_instantiate(dentry, inode);
961
mark_inode_dirty(inode);
967
* gfs2_unlink_ok - check to see that a inode is still in a directory
968
* @dip: the directory
969
* @name: the name of the file
972
* Assumes that the lock on (at least) @dip is held.
974
* Returns: 0 if the parent/child relationship is correct, errno if it isn't
977
static int gfs2_unlink_ok(struct gfs2_inode *dip, const struct qstr *name,
978
const struct gfs2_inode *ip)
982
if (IS_IMMUTABLE(&ip->i_inode) || IS_APPEND(&ip->i_inode))
985
if ((dip->i_inode.i_mode & S_ISVTX) &&
986
dip->i_inode.i_uid != current_fsuid() &&
987
ip->i_inode.i_uid != current_fsuid() && !capable(CAP_FOWNER))
990
if (IS_APPEND(&dip->i_inode))
993
error = gfs2_permission(&dip->i_inode, MAY_WRITE | MAY_EXEC, 0);
997
error = gfs2_dir_check(&dip->i_inode, name, ip);
1005
* gfs2_unlink_inode - Removes an inode from its parent dir and unlinks it
1006
* @dip: The parent directory
1007
* @name: The name of the entry in the parent directory
1008
* @bh: The inode buffer for the inode to be removed
1009
* @inode: The inode to be removed
1011
* Called with all the locks and in a transaction. This will only be
1012
* called for a directory after it has been checked to ensure it is empty.
1014
* Returns: 0 on success, or an error
1017
static int gfs2_unlink_inode(struct gfs2_inode *dip,
1018
const struct dentry *dentry,
1019
struct buffer_head *bh)
1021
struct inode *inode = dentry->d_inode;
1022
struct gfs2_inode *ip = GFS2_I(inode);
1025
error = gfs2_dir_del(dip, dentry);
1030
inode->i_ctime = CURRENT_TIME;
1031
if (S_ISDIR(inode->i_mode))
1035
gfs2_trans_add_bh(ip->i_gl, bh, 1);
1036
gfs2_dinode_out(ip, bh->b_data);
1037
mark_inode_dirty(inode);
1038
if (inode->i_nlink == 0)
1039
gfs2_unlink_di(inode);
1045
* gfs2_unlink - Unlink an inode (this does rmdir as well)
1046
* @dir: The inode of the directory containing the inode to unlink
1047
* @dentry: The file itself
1049
* This routine uses the type of the inode as a flag to figure out
1050
* whether this is an unlink or an rmdir.
1055
static int gfs2_unlink(struct inode *dir, struct dentry *dentry)
1057
struct gfs2_inode *dip = GFS2_I(dir);
1058
struct gfs2_sbd *sdp = GFS2_SB(dir);
1059
struct inode *inode = dentry->d_inode;
1060
struct gfs2_inode *ip = GFS2_I(inode);
1061
struct buffer_head *bh;
1062
struct gfs2_holder ghs[3];
1063
struct gfs2_rgrpd *rgd;
1064
struct gfs2_holder ri_gh;
1067
error = gfs2_rindex_hold(sdp, &ri_gh);
1071
gfs2_holder_init(dip->i_gl, LM_ST_EXCLUSIVE, 0, ghs);
1072
gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + 1);
1074
rgd = gfs2_blk2rgrpd(sdp, ip->i_no_addr);
1075
gfs2_holder_init(rgd->rd_gl, LM_ST_EXCLUSIVE, 0, ghs + 2);
1078
error = gfs2_glock_nq(ghs); /* parent */
1082
error = gfs2_glock_nq(ghs + 1); /* child */
1087
if (inode->i_nlink == 0)
1090
if (S_ISDIR(inode->i_mode)) {
1092
if (ip->i_entries > 2 || inode->i_nlink > 2)
1096
error = gfs2_glock_nq(ghs + 2); /* rgrp */
1100
error = gfs2_unlink_ok(dip, &dentry->d_name, ip);
1104
error = gfs2_trans_begin(sdp, 2*RES_DINODE + 3*RES_LEAF + RES_RG_BIT, 0);
1108
error = gfs2_meta_inode_buffer(ip, &bh);
1112
error = gfs2_unlink_inode(dip, dentry, bh);
1116
gfs2_trans_end(sdp);
1118
gfs2_glock_dq(ghs + 2);
1120
gfs2_holder_uninit(ghs + 2);
1121
gfs2_glock_dq(ghs + 1);
1123
gfs2_holder_uninit(ghs + 1);
1126
gfs2_holder_uninit(ghs);
1127
gfs2_glock_dq_uninit(&ri_gh);
1132
* gfs2_symlink - Create a symlink
1133
* @dir: The directory to create the symlink in
1134
* @dentry: The dentry to put the symlink in
1135
* @symname: The thing which the link points to
1140
static int gfs2_symlink(struct inode *dir, struct dentry *dentry,
1141
const char *symname)
1143
struct gfs2_sbd *sdp = GFS2_SB(dir);
1146
size = strlen(symname);
1147
if (size > sdp->sd_sb.sb_bsize - sizeof(struct gfs2_dinode) - 1)
1148
return -ENAMETOOLONG;
1150
return gfs2_create_inode(dir, dentry, S_IFLNK | S_IRWXUGO, 0, symname, size);
1154
* gfs2_mkdir - Make a directory
1155
* @dir: The parent directory of the new one
1156
* @dentry: The dentry of the new directory
1157
* @mode: The mode of the new directory
1162
static int gfs2_mkdir(struct inode *dir, struct dentry *dentry, int mode)
1164
return gfs2_create_inode(dir, dentry, S_IFDIR | mode, 0, NULL, 0);
1168
* gfs2_mknod - Make a special file
1169
* @dir: The directory in which the special file will reside
1170
* @dentry: The dentry of the special file
1171
* @mode: The mode of the special file
1172
* @dev: The device specification of the special file
1176
static int gfs2_mknod(struct inode *dir, struct dentry *dentry, int mode,
1179
return gfs2_create_inode(dir, dentry, mode, dev, NULL, 0);
1183
* gfs2_ok_to_move - check if it's ok to move a directory to another directory
1187
* Follow @to back to the root and make sure we don't encounter @this
1188
* Assumes we already hold the rename lock.
1193
static int gfs2_ok_to_move(struct gfs2_inode *this, struct gfs2_inode *to)
1195
struct inode *dir = &to->i_inode;
1196
struct super_block *sb = dir->i_sb;
1203
if (dir == &this->i_inode) {
1207
if (dir == sb->s_root->d_inode) {
1212
tmp = gfs2_lookupi(dir, &gfs2_qdotdot, 1);
1214
error = PTR_ERR(tmp);
1228
* gfs2_rename - Rename a file
1229
* @odir: Parent directory of old file name
1230
* @odentry: The old dentry of the file
1231
* @ndir: Parent directory of new file name
1232
* @ndentry: The new dentry of the file
1237
static int gfs2_rename(struct inode *odir, struct dentry *odentry,
1238
struct inode *ndir, struct dentry *ndentry)
1240
struct gfs2_inode *odip = GFS2_I(odir);
1241
struct gfs2_inode *ndip = GFS2_I(ndir);
1242
struct gfs2_inode *ip = GFS2_I(odentry->d_inode);
1243
struct gfs2_inode *nip = NULL;
1244
struct gfs2_sbd *sdp = GFS2_SB(odir);
1245
struct gfs2_holder ghs[5], r_gh = { .gh_gl = NULL, }, ri_gh;
1246
struct gfs2_rgrpd *nrgd;
1247
unsigned int num_gh;
1249
int alloc_required = 0;
1253
if (ndentry->d_inode) {
1254
nip = GFS2_I(ndentry->d_inode);
1259
error = gfs2_rindex_hold(sdp, &ri_gh);
1264
error = gfs2_glock_nq_init(sdp->sd_rename_gl, LM_ST_EXCLUSIVE,
1269
if (S_ISDIR(ip->i_inode.i_mode)) {
1271
/* don't move a dirctory into it's subdir */
1272
error = gfs2_ok_to_move(ip, ndip);
1279
gfs2_holder_init(odip->i_gl, LM_ST_EXCLUSIVE, 0, ghs);
1281
gfs2_holder_init(ndip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + num_gh);
1284
gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + num_gh);
1288
gfs2_holder_init(nip->i_gl, LM_ST_EXCLUSIVE, 0, ghs + num_gh);
1290
/* grab the resource lock for unlink flag twiddling
1291
* this is the case of the target file already existing
1292
* so we unlink before doing the rename
1294
nrgd = gfs2_blk2rgrpd(sdp, nip->i_no_addr);
1296
gfs2_holder_init(nrgd->rd_gl, LM_ST_EXCLUSIVE, 0, ghs + num_gh++);
1299
for (x = 0; x < num_gh; x++) {
1300
error = gfs2_glock_nq(ghs + x);
1306
if (ip->i_inode.i_nlink == 0)
1309
/* Check out the old directory */
1311
error = gfs2_unlink_ok(odip, &odentry->d_name, ip);
1315
/* Check out the new directory */
1318
error = gfs2_unlink_ok(ndip, &ndentry->d_name, nip);
1322
if (nip->i_inode.i_nlink == 0) {
1327
if (S_ISDIR(nip->i_inode.i_mode)) {
1328
if (nip->i_entries < 2) {
1329
gfs2_consist_inode(nip);
1333
if (nip->i_entries > 2) {
1339
error = gfs2_permission(ndir, MAY_WRITE | MAY_EXEC, 0);
1343
error = gfs2_dir_check(ndir, &ndentry->d_name, NULL);
1355
if (!ndip->i_inode.i_nlink) {
1359
if (ndip->i_entries == (u32)-1) {
1363
if (S_ISDIR(ip->i_inode.i_mode) &&
1364
ndip->i_inode.i_nlink == (u32)-1) {
1371
/* Check out the dir to be renamed */
1374
error = gfs2_permission(odentry->d_inode, MAY_WRITE, 0);
1380
alloc_required = gfs2_diradd_alloc_required(ndir, &ndentry->d_name);
1381
error = alloc_required;
1386
if (alloc_required) {
1387
struct gfs2_alloc *al = gfs2_alloc_get(ndip);
1393
error = gfs2_quota_lock_check(ndip);
1397
al->al_requested = sdp->sd_max_dirres;
1399
error = gfs2_inplace_reserve_ri(ndip);
1403
error = gfs2_trans_begin(sdp, sdp->sd_max_dirres +
1404
gfs2_rg_blocks(al) +
1405
4 * RES_DINODE + 4 * RES_LEAF +
1406
RES_STATFS + RES_QUOTA + 4, 0);
1410
error = gfs2_trans_begin(sdp, 4 * RES_DINODE +
1411
5 * RES_LEAF + 4, 0);
1416
/* Remove the target file, if it exists */
1419
struct buffer_head *bh;
1420
error = gfs2_meta_inode_buffer(nip, &bh);
1423
error = gfs2_unlink_inode(ndip, ndentry, bh);
1428
error = gfs2_dir_mvino(ip, &gfs2_qdotdot, ndip, DT_DIR);
1432
struct buffer_head *dibh;
1433
error = gfs2_meta_inode_buffer(ip, &dibh);
1436
ip->i_inode.i_ctime = CURRENT_TIME;
1437
gfs2_trans_add_bh(ip->i_gl, dibh, 1);
1438
gfs2_dinode_out(ip, dibh->b_data);
1442
error = gfs2_dir_del(odip, odentry);
1446
error = gfs2_dir_add(ndir, &ndentry->d_name, ip);
1451
gfs2_trans_end(sdp);
1454
gfs2_inplace_release(ndip);
1457
gfs2_quota_unlock(ndip);
1460
gfs2_alloc_put(ndip);
1463
gfs2_glock_dq(ghs + x);
1464
gfs2_holder_uninit(ghs + x);
1468
gfs2_glock_dq_uninit(&r_gh);
1470
gfs2_glock_dq_uninit(&ri_gh);
1475
* gfs2_follow_link - Follow a symbolic link
1476
* @dentry: The dentry of the link
1477
* @nd: Data that we pass to vfs_follow_link()
1479
* This can handle symlinks of any size.
1481
* Returns: 0 on success or error code
1484
static void *gfs2_follow_link(struct dentry *dentry, struct nameidata *nd)
1486
struct gfs2_inode *ip = GFS2_I(dentry->d_inode);
1487
struct gfs2_holder i_gh;
1488
struct buffer_head *dibh;
1493
gfs2_holder_init(ip->i_gl, LM_ST_SHARED, 0, &i_gh);
1494
error = gfs2_glock_nq(&i_gh);
1496
gfs2_holder_uninit(&i_gh);
1497
nd_set_link(nd, ERR_PTR(error));
1501
size = (unsigned int)i_size_read(&ip->i_inode);
1503
gfs2_consist_inode(ip);
1504
buf = ERR_PTR(-EIO);
1508
error = gfs2_meta_inode_buffer(ip, &dibh);
1510
buf = ERR_PTR(error);
1514
buf = kzalloc(size + 1, GFP_NOFS);
1516
buf = ERR_PTR(-ENOMEM);
1518
memcpy(buf, dibh->b_data + sizeof(struct gfs2_dinode), size);
1521
gfs2_glock_dq_uninit(&i_gh);
1522
nd_set_link(nd, buf);
1526
static void gfs2_put_link(struct dentry *dentry, struct nameidata *nd, void *p)
1528
char *s = nd_get_link(nd);
1536
* @mask: The mask to be tested
1537
* @flags: Indicates whether this is an RCU path walk or not
1539
* This may be called from the VFS directly, or from within GFS2 with the
1540
* inode locked, so we look to see if the glock is already locked and only
1541
* lock the glock if its not already been done.
1546
int gfs2_permission(struct inode *inode, int mask, unsigned int flags)
1548
struct gfs2_inode *ip;
1549
struct gfs2_holder i_gh;
1555
if (gfs2_glock_is_locked_by_me(ip->i_gl) == NULL) {
1556
if (flags & IPERM_FLAG_RCU)
1558
error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &i_gh);
1564
if ((mask & MAY_WRITE) && IS_IMMUTABLE(inode))
1567
error = generic_permission(inode, mask, flags, gfs2_check_acl);
1569
gfs2_glock_dq_uninit(&i_gh);
881
1574
static int __gfs2_setattr_simple(struct gfs2_inode *ip, struct iattr *attr)
925
void gfs2_dinode_out(const struct gfs2_inode *ip, void *buf)
927
struct gfs2_dinode *str = buf;
929
str->di_header.mh_magic = cpu_to_be32(GFS2_MAGIC);
930
str->di_header.mh_type = cpu_to_be32(GFS2_METATYPE_DI);
931
str->di_header.mh_format = cpu_to_be32(GFS2_FORMAT_DI);
932
str->di_num.no_addr = cpu_to_be64(ip->i_no_addr);
933
str->di_num.no_formal_ino = cpu_to_be64(ip->i_no_formal_ino);
934
str->di_mode = cpu_to_be32(ip->i_inode.i_mode);
935
str->di_uid = cpu_to_be32(ip->i_inode.i_uid);
936
str->di_gid = cpu_to_be32(ip->i_inode.i_gid);
937
str->di_nlink = cpu_to_be32(ip->i_inode.i_nlink);
938
str->di_size = cpu_to_be64(i_size_read(&ip->i_inode));
939
str->di_blocks = cpu_to_be64(gfs2_get_inode_blocks(&ip->i_inode));
940
str->di_atime = cpu_to_be64(ip->i_inode.i_atime.tv_sec);
941
str->di_mtime = cpu_to_be64(ip->i_inode.i_mtime.tv_sec);
942
str->di_ctime = cpu_to_be64(ip->i_inode.i_ctime.tv_sec);
944
str->di_goal_meta = cpu_to_be64(ip->i_goal);
945
str->di_goal_data = cpu_to_be64(ip->i_goal);
946
str->di_generation = cpu_to_be64(ip->i_generation);
948
str->di_flags = cpu_to_be32(ip->i_diskflags);
949
str->di_height = cpu_to_be16(ip->i_height);
950
str->di_payload_format = cpu_to_be32(S_ISDIR(ip->i_inode.i_mode) &&
951
!(ip->i_diskflags & GFS2_DIF_EXHASH) ?
953
str->di_depth = cpu_to_be16(ip->i_depth);
954
str->di_entries = cpu_to_be32(ip->i_entries);
956
str->di_eattr = cpu_to_be64(ip->i_eattr);
957
str->di_atime_nsec = cpu_to_be32(ip->i_inode.i_atime.tv_nsec);
958
str->di_mtime_nsec = cpu_to_be32(ip->i_inode.i_mtime.tv_nsec);
959
str->di_ctime_nsec = cpu_to_be32(ip->i_inode.i_ctime.tv_nsec);
962
void gfs2_dinode_print(const struct gfs2_inode *ip)
964
printk(KERN_INFO " no_formal_ino = %llu\n",
965
(unsigned long long)ip->i_no_formal_ino);
966
printk(KERN_INFO " no_addr = %llu\n",
967
(unsigned long long)ip->i_no_addr);
968
printk(KERN_INFO " i_size = %llu\n",
969
(unsigned long long)i_size_read(&ip->i_inode));
970
printk(KERN_INFO " blocks = %llu\n",
971
(unsigned long long)gfs2_get_inode_blocks(&ip->i_inode));
972
printk(KERN_INFO " i_goal = %llu\n",
973
(unsigned long long)ip->i_goal);
974
printk(KERN_INFO " i_diskflags = 0x%.8X\n", ip->i_diskflags);
975
printk(KERN_INFO " i_height = %u\n", ip->i_height);
976
printk(KERN_INFO " i_depth = %u\n", ip->i_depth);
977
printk(KERN_INFO " i_entries = %u\n", ip->i_entries);
978
printk(KERN_INFO " i_eattr = %llu\n",
979
(unsigned long long)ip->i_eattr);
1616
static int setattr_chown(struct inode *inode, struct iattr *attr)
1618
struct gfs2_inode *ip = GFS2_I(inode);
1619
struct gfs2_sbd *sdp = GFS2_SB(inode);
1620
u32 ouid, ogid, nuid, ngid;
1623
ouid = inode->i_uid;
1624
ogid = inode->i_gid;
1625
nuid = attr->ia_uid;
1626
ngid = attr->ia_gid;
1628
if (!(attr->ia_valid & ATTR_UID) || ouid == nuid)
1629
ouid = nuid = NO_QUOTA_CHANGE;
1630
if (!(attr->ia_valid & ATTR_GID) || ogid == ngid)
1631
ogid = ngid = NO_QUOTA_CHANGE;
1633
if (!gfs2_alloc_get(ip))
1636
error = gfs2_quota_lock(ip, nuid, ngid);
1640
if (ouid != NO_QUOTA_CHANGE || ogid != NO_QUOTA_CHANGE) {
1641
error = gfs2_quota_check(ip, nuid, ngid);
1646
error = gfs2_trans_begin(sdp, RES_DINODE + 2 * RES_QUOTA, 0);
1650
error = gfs2_setattr_simple(ip, attr);
1654
if (ouid != NO_QUOTA_CHANGE || ogid != NO_QUOTA_CHANGE) {
1655
u64 blocks = gfs2_get_inode_blocks(&ip->i_inode);
1656
gfs2_quota_change(ip, -blocks, ouid, ogid);
1657
gfs2_quota_change(ip, blocks, nuid, ngid);
1661
gfs2_trans_end(sdp);
1663
gfs2_quota_unlock(ip);
1670
* gfs2_setattr - Change attributes on an inode
1671
* @dentry: The dentry which is changing
1672
* @attr: The structure describing the change
1674
* The VFS layer wants to change one or more of an inodes attributes. Write
1675
* that change out to disk.
1680
static int gfs2_setattr(struct dentry *dentry, struct iattr *attr)
1682
struct inode *inode = dentry->d_inode;
1683
struct gfs2_inode *ip = GFS2_I(inode);
1684
struct gfs2_holder i_gh;
1687
error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &i_gh);
1692
if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
1695
error = inode_change_ok(inode, attr);
1699
if (attr->ia_valid & ATTR_SIZE)
1700
error = gfs2_setattr_size(inode, attr->ia_size);
1701
else if (attr->ia_valid & (ATTR_UID | ATTR_GID))
1702
error = setattr_chown(inode, attr);
1703
else if ((attr->ia_valid & ATTR_MODE) && IS_POSIXACL(inode))
1704
error = gfs2_acl_chmod(ip, attr);
1706
error = gfs2_setattr_simple(ip, attr);
1709
gfs2_glock_dq_uninit(&i_gh);
1711
mark_inode_dirty(inode);
1716
* gfs2_getattr - Read out an inode's attributes
1717
* @mnt: The vfsmount the inode is being accessed from
1718
* @dentry: The dentry to stat
1719
* @stat: The inode's stats
1721
* This may be called from the VFS directly, or from within GFS2 with the
1722
* inode locked, so we look to see if the glock is already locked and only
1723
* lock the glock if its not already been done. Note that its the NFS
1724
* readdirplus operation which causes this to be called (from filldir)
1725
* with the glock already held.
1730
static int gfs2_getattr(struct vfsmount *mnt, struct dentry *dentry,
1733
struct inode *inode = dentry->d_inode;
1734
struct gfs2_inode *ip = GFS2_I(inode);
1735
struct gfs2_holder gh;
1739
if (gfs2_glock_is_locked_by_me(ip->i_gl) == NULL) {
1740
error = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &gh);
1746
generic_fillattr(inode, stat);
1748
gfs2_glock_dq_uninit(&gh);
1753
static int gfs2_setxattr(struct dentry *dentry, const char *name,
1754
const void *data, size_t size, int flags)
1756
struct inode *inode = dentry->d_inode;
1757
struct gfs2_inode *ip = GFS2_I(inode);
1758
struct gfs2_holder gh;
1761
gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh);
1762
ret = gfs2_glock_nq(&gh);
1764
ret = generic_setxattr(dentry, name, data, size, flags);
1767
gfs2_holder_uninit(&gh);
1771
static ssize_t gfs2_getxattr(struct dentry *dentry, const char *name,
1772
void *data, size_t size)
1774
struct inode *inode = dentry->d_inode;
1775
struct gfs2_inode *ip = GFS2_I(inode);
1776
struct gfs2_holder gh;
1779
gfs2_holder_init(ip->i_gl, LM_ST_SHARED, LM_FLAG_ANY, &gh);
1780
ret = gfs2_glock_nq(&gh);
1782
ret = generic_getxattr(dentry, name, data, size);
1785
gfs2_holder_uninit(&gh);
1789
static int gfs2_removexattr(struct dentry *dentry, const char *name)
1791
struct inode *inode = dentry->d_inode;
1792
struct gfs2_inode *ip = GFS2_I(inode);
1793
struct gfs2_holder gh;
1796
gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh);
1797
ret = gfs2_glock_nq(&gh);
1799
ret = generic_removexattr(dentry, name);
1802
gfs2_holder_uninit(&gh);
1806
static int gfs2_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
1809
struct gfs2_inode *ip = GFS2_I(inode);
1810
struct gfs2_holder gh;
1813
ret = fiemap_check_flags(fieinfo, FIEMAP_FLAG_SYNC);
1817
mutex_lock(&inode->i_mutex);
1819
ret = gfs2_glock_nq_init(ip->i_gl, LM_ST_SHARED, 0, &gh);
1823
if (gfs2_is_stuffed(ip)) {
1824
u64 phys = ip->i_no_addr << inode->i_blkbits;
1825
u64 size = i_size_read(inode);
1826
u32 flags = FIEMAP_EXTENT_LAST|FIEMAP_EXTENT_NOT_ALIGNED|
1827
FIEMAP_EXTENT_DATA_INLINE;
1828
phys += sizeof(struct gfs2_dinode);
1830
if (start + len > size)
1833
ret = fiemap_fill_next_extent(fieinfo, start, phys,
1838
ret = __generic_block_fiemap(inode, fieinfo, start, len,
1842
gfs2_glock_dq_uninit(&gh);
1844
mutex_unlock(&inode->i_mutex);
1848
const struct inode_operations gfs2_file_iops = {
1849
.permission = gfs2_permission,
1850
.setattr = gfs2_setattr,
1851
.getattr = gfs2_getattr,
1852
.setxattr = gfs2_setxattr,
1853
.getxattr = gfs2_getxattr,
1854
.listxattr = gfs2_listxattr,
1855
.removexattr = gfs2_removexattr,
1856
.fiemap = gfs2_fiemap,
1859
const struct inode_operations gfs2_dir_iops = {
1860
.create = gfs2_create,
1861
.lookup = gfs2_lookup,
1863
.unlink = gfs2_unlink,
1864
.symlink = gfs2_symlink,
1865
.mkdir = gfs2_mkdir,
1866
.rmdir = gfs2_unlink,
1867
.mknod = gfs2_mknod,
1868
.rename = gfs2_rename,
1869
.permission = gfs2_permission,
1870
.setattr = gfs2_setattr,
1871
.getattr = gfs2_getattr,
1872
.setxattr = gfs2_setxattr,
1873
.getxattr = gfs2_getxattr,
1874
.listxattr = gfs2_listxattr,
1875
.removexattr = gfs2_removexattr,
1876
.fiemap = gfs2_fiemap,
1879
const struct inode_operations gfs2_symlink_iops = {
1880
.readlink = generic_readlink,
1881
.follow_link = gfs2_follow_link,
1882
.put_link = gfs2_put_link,
1883
.permission = gfs2_permission,
1884
.setattr = gfs2_setattr,
1885
.getattr = gfs2_getattr,
1886
.setxattr = gfs2_setxattr,
1887
.getxattr = gfs2_getxattr,
1888
.listxattr = gfs2_listxattr,
1889
.removexattr = gfs2_removexattr,
1890
.fiemap = gfs2_fiemap,