@@ -2898,8 +2898,8 @@ process_inode(
break;
}
if (ic) {
- quota_add(&xino.i_d.di_projid, &xino.i_d.di_gid,
- &xino.i_d.di_uid, 0, bc, ic, rc);
+ quota_add(&xino.i_d.di_projid, &xino.i_vnode.i_gid,
+ &xino.i_vnode.i_uid, 0, bc, ic, rc);
}
}
totblocks = totdblocks + totiblocks + atotdblocks + atotiblocks;
@@ -46,7 +46,10 @@ struct inode {
};
#define xfs_uid_to_kuid(uid) (uid)
+#define xfs_kuid_to_uid(uid) (uid)
+
#define xfs_gid_to_kgid(gid) (gid)
+#define xfs_kgid_to_gid(gid) (gid)
typedef struct xfs_inode {
struct cache_node i_node;
@@ -255,8 +255,7 @@ libxfs_ialloc(
VFS_I(ip)->i_mode = mode;
set_nlink(VFS_I(ip), nlink);
- ip->i_d.di_uid = cr->cr_uid;
- ip->i_d.di_gid = cr->cr_gid;
+ VFS_I(ip)->i_uid = cr->cr_uid;
ip->i_d.di_projid = pip ? 0 : fsx->fsx_projid;
xfs_trans_ichgtime(tp, ip, XFS_ICHGTIME_CHG | XFS_ICHGTIME_MOD);
@@ -275,9 +274,11 @@ libxfs_ialloc(
}
if (pip && (VFS_I(pip)->i_mode & S_ISGID)) {
- ip->i_d.di_gid = pip->i_d.di_gid;
+ VFS_I(ip)->i_gid = VFS_I(pip)->i_gid;
if ((VFS_I(pip)->i_mode & S_ISGID) && (mode & S_IFMT) == S_IFDIR)
VFS_I(ip)->i_mode |= S_ISGID;
+ } else {
+ VFS_I(ip)->i_gid = cr->cr_gid;
}
ip->i_d.di_size = 0;
@@ -219,10 +219,8 @@ xfs_inode_from_disk(
}
to->di_format = from->di_format;
- to->di_uid = be32_to_cpu(from->di_uid);
- inode->i_uid = xfs_uid_to_kuid(to->di_uid);
- to->di_gid = be32_to_cpu(from->di_gid);
- inode->i_gid = xfs_gid_to_kgid(to->di_gid);
+ inode->i_uid = xfs_uid_to_kuid(be32_to_cpu(from->di_uid));
+ inode->i_gid = xfs_gid_to_kgid(be32_to_cpu(from->di_gid));
to->di_flushiter = be16_to_cpu(from->di_flushiter);
/*
@@ -275,8 +273,8 @@ xfs_inode_to_disk(
to->di_version = from->di_version;
to->di_format = from->di_format;
- to->di_uid = cpu_to_be32(from->di_uid);
- to->di_gid = cpu_to_be32(from->di_gid);
+ to->di_uid = cpu_to_be32(xfs_kuid_to_uid(inode->i_uid));
+ to->di_gid = cpu_to_be32(xfs_kgid_to_gid(inode->i_gid));
to->di_projid_lo = cpu_to_be16(from->di_projid & 0xffff);
to->di_projid_hi = cpu_to_be16(from->di_projid >> 16);
@@ -19,8 +19,6 @@ struct xfs_icdinode {
int8_t di_version; /* inode version */
int8_t di_format; /* format of di_c data */
uint16_t di_flushiter; /* incremented on flush */
- uint32_t di_uid; /* owner's user id */
- uint32_t di_gid; /* owner's group id */
uint32_t di_projid; /* owner's project id */
xfs_fsize_t di_size; /* number of bytes in file */
xfs_rfsblock_t di_nblocks; /* # of direct & btree blocks used */