aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2/inode.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/gfs2/inode.c')
-rw-r--r--fs/gfs2/inode.c23
1 files changed, 9 insertions, 14 deletions
diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c
index de466043c91..0de9b22f454 100644
--- a/fs/gfs2/inode.c
+++ b/fs/gfs2/inode.c
@@ -52,8 +52,6 @@ void gfs2_inode_attr_in(struct gfs2_inode *ip)
52 52
53 inode->i_ino = ip->i_num.no_addr; 53 inode->i_ino = ip->i_num.no_addr;
54 inode->i_nlink = di->di_nlink; 54 inode->i_nlink = di->di_nlink;
55 inode->i_uid = di->di_uid;
56 inode->i_gid = di->di_gid;
57 i_size_write(inode, di->di_size); 55 i_size_write(inode, di->di_size);
58 inode->i_atime.tv_sec = di->di_atime; 56 inode->i_atime.tv_sec = di->di_atime;
59 inode->i_mtime.tv_sec = di->di_mtime; 57 inode->i_mtime.tv_sec = di->di_mtime;
@@ -87,8 +85,6 @@ void gfs2_inode_attr_out(struct gfs2_inode *ip)
87{ 85{
88 struct inode *inode = &ip->i_inode; 86 struct inode *inode = &ip->i_inode;
89 struct gfs2_dinode_host *di = &ip->i_di; 87 struct gfs2_dinode_host *di = &ip->i_di;
90 di->di_uid = inode->i_uid;
91 di->di_gid = inode->i_gid;
92 di->di_atime = inode->i_atime.tv_sec; 88 di->di_atime = inode->i_atime.tv_sec;
93 di->di_mtime = inode->i_mtime.tv_sec; 89 di->di_mtime = inode->i_mtime.tv_sec;
94 di->di_ctime = inode->i_ctime.tv_sec; 90 di->di_ctime = inode->i_ctime.tv_sec;
@@ -216,8 +212,8 @@ static int gfs2_dinode_in(struct gfs2_inode *ip, const void *buf)
216 break; 212 break;
217 }; 213 };
218 214
219 di->di_uid = be32_to_cpu(str->di_uid); 215 ip->i_inode.i_uid = be32_to_cpu(str->di_uid);
220 di->di_gid = be32_to_cpu(str->di_gid); 216 ip->i_inode.i_gid = be32_to_cpu(str->di_gid);
221 di->di_nlink = be32_to_cpu(str->di_nlink); 217 di->di_nlink = be32_to_cpu(str->di_nlink);
222 di->di_size = be64_to_cpu(str->di_size); 218 di->di_size = be64_to_cpu(str->di_size);
223 di->di_blocks = be64_to_cpu(str->di_blocks); 219 di->di_blocks = be64_to_cpu(str->di_blocks);
@@ -616,19 +612,19 @@ static void munge_mode_uid_gid(struct gfs2_inode *dip, unsigned int *mode,
616 unsigned int *uid, unsigned int *gid) 612 unsigned int *uid, unsigned int *gid)
617{ 613{
618 if (GFS2_SB(&dip->i_inode)->sd_args.ar_suiddir && 614 if (GFS2_SB(&dip->i_inode)->sd_args.ar_suiddir &&
619 (dip->i_inode.i_mode & S_ISUID) && dip->i_di.di_uid) { 615 (dip->i_inode.i_mode & S_ISUID) && dip->i_inode.i_uid) {
620 if (S_ISDIR(*mode)) 616 if (S_ISDIR(*mode))
621 *mode |= S_ISUID; 617 *mode |= S_ISUID;
622 else if (dip->i_di.di_uid != current->fsuid) 618 else if (dip->i_inode.i_uid != current->fsuid)
623 *mode &= ~07111; 619 *mode &= ~07111;
624 *uid = dip->i_di.di_uid; 620 *uid = dip->i_inode.i_uid;
625 } else 621 } else
626 *uid = current->fsuid; 622 *uid = current->fsuid;
627 623
628 if (dip->i_inode.i_mode & S_ISGID) { 624 if (dip->i_inode.i_mode & S_ISGID) {
629 if (S_ISDIR(*mode)) 625 if (S_ISDIR(*mode))
630 *mode |= S_ISGID; 626 *mode |= S_ISGID;
631 *gid = dip->i_di.di_gid; 627 *gid = dip->i_inode.i_gid;
632 } else 628 } else
633 *gid = current->fsgid; 629 *gid = current->fsgid;
634} 630}
@@ -783,8 +779,7 @@ static int link_dinode(struct gfs2_inode *dip, const struct qstr *name,
783 if (alloc_required < 0) 779 if (alloc_required < 0)
784 goto fail; 780 goto fail;
785 if (alloc_required) { 781 if (alloc_required) {
786 error = gfs2_quota_check(dip, dip->i_di.di_uid, 782 error = gfs2_quota_check(dip, dip->i_inode.i_uid, dip->i_inode.i_gid);
787 dip->i_di.di_gid);
788 if (error) 783 if (error)
789 goto fail_quota_locks; 784 goto fail_quota_locks;
790 785
@@ -1050,8 +1045,8 @@ int gfs2_unlink_ok(struct gfs2_inode *dip, const struct qstr *name,
1050 return -EPERM; 1045 return -EPERM;
1051 1046
1052 if ((dip->i_inode.i_mode & S_ISVTX) && 1047 if ((dip->i_inode.i_mode & S_ISVTX) &&
1053 dip->i_di.di_uid != current->fsuid && 1048 dip->i_inode.i_uid != current->fsuid &&
1054 ip->i_di.di_uid != current->fsuid && !capable(CAP_FOWNER)) 1049 ip->i_inode.i_uid != current->fsuid && !capable(CAP_FOWNER))
1055 return -EPERM; 1050 return -EPERM;
1056 1051
1057 if (IS_APPEND(&dip->i_inode)) 1052 if (IS_APPEND(&dip->i_inode))