|
@@ -421,8 +421,8 @@ xfs_vn_getattr(
|
|
|
stat->dev = inode->i_sb->s_dev;
|
|
|
stat->mode = ip->i_d.di_mode;
|
|
|
stat->nlink = ip->i_d.di_nlink;
|
|
|
- stat->uid = ip->i_d.di_uid;
|
|
|
- stat->gid = ip->i_d.di_gid;
|
|
|
+ stat->uid = inode->i_uid;
|
|
|
+ stat->gid = inode->i_gid;
|
|
|
stat->ino = ip->i_ino;
|
|
|
stat->atime = inode->i_atime;
|
|
|
stat->mtime = inode->i_mtime;
|
|
@@ -486,8 +486,8 @@ xfs_setattr_nonsize(
|
|
|
int mask = iattr->ia_valid;
|
|
|
xfs_trans_t *tp;
|
|
|
int error;
|
|
|
- uid_t uid = 0, iuid = 0;
|
|
|
- gid_t gid = 0, igid = 0;
|
|
|
+ kuid_t uid = GLOBAL_ROOT_UID, iuid = GLOBAL_ROOT_UID;
|
|
|
+ kgid_t gid = GLOBAL_ROOT_GID, igid = GLOBAL_ROOT_GID;
|
|
|
struct xfs_dquot *udqp = NULL, *gdqp = NULL;
|
|
|
struct xfs_dquot *olddquot1 = NULL, *olddquot2 = NULL;
|
|
|
|
|
@@ -523,13 +523,13 @@ xfs_setattr_nonsize(
|
|
|
uid = iattr->ia_uid;
|
|
|
qflags |= XFS_QMOPT_UQUOTA;
|
|
|
} else {
|
|
|
- uid = ip->i_d.di_uid;
|
|
|
+ uid = inode->i_uid;
|
|
|
}
|
|
|
if ((mask & ATTR_GID) && XFS_IS_GQUOTA_ON(mp)) {
|
|
|
gid = iattr->ia_gid;
|
|
|
qflags |= XFS_QMOPT_GQUOTA;
|
|
|
} else {
|
|
|
- gid = ip->i_d.di_gid;
|
|
|
+ gid = inode->i_gid;
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -539,8 +539,10 @@ xfs_setattr_nonsize(
|
|
|
*/
|
|
|
ASSERT(udqp == NULL);
|
|
|
ASSERT(gdqp == NULL);
|
|
|
- error = xfs_qm_vop_dqalloc(ip, uid, gid, xfs_get_projid(ip),
|
|
|
- qflags, &udqp, &gdqp, NULL);
|
|
|
+ error = xfs_qm_vop_dqalloc(ip, xfs_kuid_to_uid(uid),
|
|
|
+ xfs_kgid_to_gid(gid),
|
|
|
+ xfs_get_projid(ip),
|
|
|
+ qflags, &udqp, &gdqp, NULL);
|
|
|
if (error)
|
|
|
return error;
|
|
|
}
|
|
@@ -562,8 +564,8 @@ xfs_setattr_nonsize(
|
|
|
* while we didn't have the inode locked, inode's dquot(s)
|
|
|
* would have changed also.
|
|
|
*/
|
|
|
- iuid = ip->i_d.di_uid;
|
|
|
- igid = ip->i_d.di_gid;
|
|
|
+ iuid = inode->i_uid;
|
|
|
+ igid = inode->i_gid;
|
|
|
gid = (mask & ATTR_GID) ? iattr->ia_gid : igid;
|
|
|
uid = (mask & ATTR_UID) ? iattr->ia_uid : iuid;
|
|
|
|
|
@@ -572,8 +574,8 @@ xfs_setattr_nonsize(
|
|
|
* going to change.
|
|
|
*/
|
|
|
if (XFS_IS_QUOTA_RUNNING(mp) &&
|
|
|
- ((XFS_IS_UQUOTA_ON(mp) && iuid != uid) ||
|
|
|
- (XFS_IS_GQUOTA_ON(mp) && igid != gid))) {
|
|
|
+ ((XFS_IS_UQUOTA_ON(mp) && !uid_eq(iuid, uid)) ||
|
|
|
+ (XFS_IS_GQUOTA_ON(mp) && !gid_eq(igid, gid)))) {
|
|
|
ASSERT(tp);
|
|
|
error = xfs_qm_vop_chown_reserve(tp, ip, udqp, gdqp,
|
|
|
NULL, capable(CAP_FOWNER) ?
|
|
@@ -603,17 +605,17 @@ xfs_setattr_nonsize(
|
|
|
* Change the ownerships and register quota modifications
|
|
|
* in the transaction.
|
|
|
*/
|
|
|
- if (iuid != uid) {
|
|
|
+ if (!uid_eq(iuid, uid)) {
|
|
|
if (XFS_IS_QUOTA_RUNNING(mp) && XFS_IS_UQUOTA_ON(mp)) {
|
|
|
ASSERT(mask & ATTR_UID);
|
|
|
ASSERT(udqp);
|
|
|
olddquot1 = xfs_qm_vop_chown(tp, ip,
|
|
|
&ip->i_udquot, udqp);
|
|
|
}
|
|
|
- ip->i_d.di_uid = uid;
|
|
|
+ ip->i_d.di_uid = xfs_kuid_to_uid(uid);
|
|
|
inode->i_uid = uid;
|
|
|
}
|
|
|
- if (igid != gid) {
|
|
|
+ if (!gid_eq(igid, gid)) {
|
|
|
if (XFS_IS_QUOTA_RUNNING(mp) && XFS_IS_GQUOTA_ON(mp)) {
|
|
|
ASSERT(!XFS_IS_PQUOTA_ON(mp));
|
|
|
ASSERT(mask & ATTR_GID);
|
|
@@ -621,7 +623,7 @@ xfs_setattr_nonsize(
|
|
|
olddquot2 = xfs_qm_vop_chown(tp, ip,
|
|
|
&ip->i_gdquot, gdqp);
|
|
|
}
|
|
|
- ip->i_d.di_gid = gid;
|
|
|
+ ip->i_d.di_gid = xfs_kgid_to_gid(gid);
|
|
|
inode->i_gid = gid;
|
|
|
}
|
|
|
}
|
|
@@ -1172,8 +1174,8 @@ xfs_setup_inode(
|
|
|
|
|
|
inode->i_mode = ip->i_d.di_mode;
|
|
|
set_nlink(inode, ip->i_d.di_nlink);
|
|
|
- inode->i_uid = ip->i_d.di_uid;
|
|
|
- inode->i_gid = ip->i_d.di_gid;
|
|
|
+ inode->i_uid = xfs_uid_to_kuid(ip->i_d.di_uid);
|
|
|
+ inode->i_gid = xfs_gid_to_kgid(ip->i_d.di_gid);
|
|
|
|
|
|
switch (inode->i_mode & S_IFMT) {
|
|
|
case S_IFBLK:
|