Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

xfs: merge the projid fields in struct xfs_icdinode

There is no point in splitting the fields like this in an purely
in-memory structure.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>

authored by

Christoph Hellwig and committed by
Darrick J. Wong
de7a866f 8d2d878d

+26 -47
+5 -6
fs/xfs/libxfs/xfs_inode_buf.c
··· 213 213 to->di_version = from->di_version; 214 214 if (to->di_version == 1) { 215 215 set_nlink(inode, be16_to_cpu(from->di_onlink)); 216 - to->di_projid_lo = 0; 217 - to->di_projid_hi = 0; 216 + to->di_projid = 0; 218 217 to->di_version = 2; 219 218 } else { 220 219 set_nlink(inode, be32_to_cpu(from->di_nlink)); 221 - to->di_projid_lo = be16_to_cpu(from->di_projid_lo); 222 - to->di_projid_hi = be16_to_cpu(from->di_projid_hi); 220 + to->di_projid = (prid_t)be16_to_cpu(from->di_projid_hi) << 16 | 221 + be16_to_cpu(from->di_projid_lo); 223 222 } 224 223 225 224 to->di_format = from->di_format; ··· 278 279 to->di_format = from->di_format; 279 280 to->di_uid = cpu_to_be32(from->di_uid); 280 281 to->di_gid = cpu_to_be32(from->di_gid); 281 - to->di_projid_lo = cpu_to_be16(from->di_projid_lo); 282 - to->di_projid_hi = cpu_to_be16(from->di_projid_hi); 282 + to->di_projid_lo = cpu_to_be16(from->di_projid & 0xffff); 283 + to->di_projid_hi = cpu_to_be16(from->di_projid >> 16); 283 284 284 285 memset(to->di_pad, 0, sizeof(to->di_pad)); 285 286 to->di_atime.t_sec = cpu_to_be32(inode->i_atime.tv_sec);
+1 -2
fs/xfs/libxfs/xfs_inode_buf.h
··· 21 21 uint16_t di_flushiter; /* incremented on flush */ 22 22 uint32_t di_uid; /* owner's user id */ 23 23 uint32_t di_gid; /* owner's group id */ 24 - uint16_t di_projid_lo; /* lower part of owner's project id */ 25 - uint16_t di_projid_hi; /* higher part of owner's project id */ 24 + uint32_t di_projid; /* owner's project id */ 26 25 xfs_fsize_t di_size; /* number of bytes in file */ 27 26 xfs_rfsblock_t di_nblocks; /* # of direct & btree blocks used */ 28 27 xfs_extlen_t di_extsize; /* basic/minimum extent size for file */
+1 -1
fs/xfs/xfs_dquot.c
··· 833 833 case XFS_DQ_GROUP: 834 834 return ip->i_d.di_gid; 835 835 case XFS_DQ_PROJ: 836 - return xfs_get_projid(ip); 836 + return ip->i_d.di_projid; 837 837 } 838 838 ASSERT(0); 839 839 return 0;
+2 -2
fs/xfs/xfs_icache.c
··· 1419 1419 return 0; 1420 1420 1421 1421 if ((eofb->eof_flags & XFS_EOF_FLAGS_PRID) && 1422 - xfs_get_projid(ip) != eofb->eof_prid) 1422 + ip->i_d.di_projid != eofb->eof_prid) 1423 1423 return 0; 1424 1424 1425 1425 return 1; ··· 1443 1443 return 1; 1444 1444 1445 1445 if ((eofb->eof_flags & XFS_EOF_FLAGS_PRID) && 1446 - xfs_get_projid(ip) == eofb->eof_prid) 1446 + ip->i_d.di_projid == eofb->eof_prid) 1447 1447 return 1; 1448 1448 1449 1449 return 0;
+3 -3
fs/xfs/xfs_inode.c
··· 815 815 ip->i_d.di_uid = xfs_kuid_to_uid(current_fsuid()); 816 816 ip->i_d.di_gid = xfs_kgid_to_gid(current_fsgid()); 817 817 inode->i_rdev = rdev; 818 - xfs_set_projid(ip, prid); 818 + ip->i_d.di_projid = prid; 819 819 820 820 if (pip && XFS_INHERIT_GID(pip)) { 821 821 ip->i_d.di_gid = pip->i_d.di_gid; ··· 1423 1423 * the tree quota mechanism could be circumvented. 1424 1424 */ 1425 1425 if (unlikely((tdp->i_d.di_flags & XFS_DIFLAG_PROJINHERIT) && 1426 - (xfs_get_projid(tdp) != xfs_get_projid(sip)))) { 1426 + tdp->i_d.di_projid != sip->i_d.di_projid)) { 1427 1427 error = -EXDEV; 1428 1428 goto error_return; 1429 1429 } ··· 3284 3284 * tree quota mechanism would be circumvented. 3285 3285 */ 3286 3286 if (unlikely((target_dp->i_d.di_flags & XFS_DIFLAG_PROJINHERIT) && 3287 - (xfs_get_projid(target_dp) != xfs_get_projid(src_ip)))) { 3287 + target_dp->i_d.di_projid != src_ip->i_d.di_projid)) { 3288 3288 error = -EXDEV; 3289 3289 goto out_trans_cancel; 3290 3290 }
+1 -20
fs/xfs/xfs_inode.h
··· 174 174 return ret; 175 175 } 176 176 177 - /* 178 - * Project quota id helpers (previously projid was 16bit only 179 - * and using two 16bit values to hold new 32bit projid was chosen 180 - * to retain compatibility with "old" filesystems). 181 - */ 182 - static inline prid_t 183 - xfs_get_projid(struct xfs_inode *ip) 184 - { 185 - return (prid_t)ip->i_d.di_projid_hi << 16 | ip->i_d.di_projid_lo; 186 - } 187 - 188 - static inline void 189 - xfs_set_projid(struct xfs_inode *ip, 190 - prid_t projid) 191 - { 192 - ip->i_d.di_projid_hi = (uint16_t) (projid >> 16); 193 - ip->i_d.di_projid_lo = (uint16_t) (projid & 0xffff); 194 - } 195 - 196 177 static inline prid_t 197 178 xfs_get_initial_prid(struct xfs_inode *dp) 198 179 { 199 180 if (dp->i_d.di_flags & XFS_DIFLAG_PROJINHERIT) 200 - return xfs_get_projid(dp); 181 + return dp->i_d.di_projid; 201 182 202 183 return XFS_PROJID_DEFAULT; 203 184 }
+2 -2
fs/xfs/xfs_inode_item.c
··· 310 310 to->di_format = from->di_format; 311 311 to->di_uid = from->di_uid; 312 312 to->di_gid = from->di_gid; 313 - to->di_projid_lo = from->di_projid_lo; 314 - to->di_projid_hi = from->di_projid_hi; 313 + to->di_projid_lo = from->di_projid & 0xffff; 314 + to->di_projid_hi = from->di_projid >> 16; 315 315 316 316 memset(to->di_pad, 0, sizeof(to->di_pad)); 317 317 memset(to->di_pad3, 0, sizeof(to->di_pad3));
+4 -4
fs/xfs/xfs_ioctl.c
··· 1069 1069 fa->fsx_extsize = ip->i_d.di_extsize << ip->i_mount->m_sb.sb_blocklog; 1070 1070 fa->fsx_cowextsize = ip->i_d.di_cowextsize << 1071 1071 ip->i_mount->m_sb.sb_blocklog; 1072 - fa->fsx_projid = xfs_get_projid(ip); 1072 + fa->fsx_projid = ip->i_d.di_projid; 1073 1073 1074 1074 if (attr) { 1075 1075 if (ip->i_afp) { ··· 1521 1521 } 1522 1522 1523 1523 if (XFS_IS_QUOTA_RUNNING(mp) && XFS_IS_PQUOTA_ON(mp) && 1524 - xfs_get_projid(ip) != fa->fsx_projid) { 1524 + ip->i_d.di_projid != fa->fsx_projid) { 1525 1525 code = xfs_qm_vop_chown_reserve(tp, ip, udqp, NULL, pdqp, 1526 1526 capable(CAP_FOWNER) ? XFS_QMOPT_FORCE_RES : 0); 1527 1527 if (code) /* out of quota */ ··· 1558 1558 VFS_I(ip)->i_mode &= ~(S_ISUID|S_ISGID); 1559 1559 1560 1560 /* Change the ownerships and register project quota modifications */ 1561 - if (xfs_get_projid(ip) != fa->fsx_projid) { 1561 + if (ip->i_d.di_projid != fa->fsx_projid) { 1562 1562 if (XFS_IS_QUOTA_RUNNING(mp) && XFS_IS_PQUOTA_ON(mp)) { 1563 1563 olddquot = xfs_qm_vop_chown(tp, ip, 1564 1564 &ip->i_pdquot, pdqp); 1565 1565 } 1566 1566 ASSERT(ip->i_d.di_version > 1); 1567 - xfs_set_projid(ip, fa->fsx_projid); 1567 + ip->i_d.di_projid = fa->fsx_projid; 1568 1568 } 1569 1569 1570 1570 /*
+1 -1
fs/xfs/xfs_iops.c
··· 692 692 ASSERT(gdqp == NULL); 693 693 error = xfs_qm_vop_dqalloc(ip, xfs_kuid_to_uid(uid), 694 694 xfs_kgid_to_gid(gid), 695 - xfs_get_projid(ip), 695 + ip->i_d.di_projid, 696 696 qflags, &udqp, &gdqp, NULL); 697 697 if (error) 698 698 return error;
+1 -1
fs/xfs/xfs_itable.c
··· 84 84 /* xfs_iget returns the following without needing 85 85 * further change. 86 86 */ 87 - buf->bs_projectid = xfs_get_projid(ip); 87 + buf->bs_projectid = ip->i_d.di_projid; 88 88 buf->bs_ino = ino; 89 89 buf->bs_uid = dic->di_uid; 90 90 buf->bs_gid = dic->di_gid;
+4 -4
fs/xfs/xfs_qm.c
··· 342 342 } 343 343 344 344 if (XFS_IS_PQUOTA_ON(mp) && !ip->i_pdquot) { 345 - error = xfs_qm_dqattach_one(ip, xfs_get_projid(ip), XFS_DQ_PROJ, 345 + error = xfs_qm_dqattach_one(ip, ip->i_d.di_projid, XFS_DQ_PROJ, 346 346 doalloc, &ip->i_pdquot); 347 347 if (error) 348 348 goto done; ··· 1698 1698 } 1699 1699 } 1700 1700 if ((flags & XFS_QMOPT_PQUOTA) && XFS_IS_PQUOTA_ON(mp)) { 1701 - if (xfs_get_projid(ip) != prid) { 1701 + if (ip->i_d.di_projid != prid) { 1702 1702 xfs_iunlock(ip, lockflags); 1703 1703 error = xfs_qm_dqget(mp, (xfs_dqid_t)prid, XFS_DQ_PROJ, 1704 1704 true, &pq); ··· 1832 1832 } 1833 1833 1834 1834 if (XFS_IS_PQUOTA_ON(ip->i_mount) && pdqp && 1835 - xfs_get_projid(ip) != be32_to_cpu(pdqp->q_core.d_id)) { 1835 + ip->i_d.di_projid != be32_to_cpu(pdqp->q_core.d_id)) { 1836 1836 prjflags = XFS_QMOPT_ENOSPC; 1837 1837 pdq_delblks = pdqp; 1838 1838 if (delblks) { ··· 1933 1933 } 1934 1934 if (pdqp && XFS_IS_PQUOTA_ON(mp)) { 1935 1935 ASSERT(ip->i_pdquot == NULL); 1936 - ASSERT(xfs_get_projid(ip) == be32_to_cpu(pdqp->q_core.d_id)); 1936 + ASSERT(ip->i_d.di_projid == be32_to_cpu(pdqp->q_core.d_id)); 1937 1937 1938 1938 ip->i_pdquot = xfs_qm_dqhold(pdqp); 1939 1939 xfs_trans_mod_dquot(tp, pdqp, XFS_TRANS_DQ_ICOUNT, 1);
+1 -1
fs/xfs/xfs_qm_bhv.c
··· 60 60 xfs_mount_t *mp = ip->i_mount; 61 61 xfs_dquot_t *dqp; 62 62 63 - if (!xfs_qm_dqget(mp, xfs_get_projid(ip), XFS_DQ_PROJ, false, &dqp)) { 63 + if (!xfs_qm_dqget(mp, ip->i_d.di_projid, XFS_DQ_PROJ, false, &dqp)) { 64 64 xfs_fill_statvfs_from_dquot(statp, dqp); 65 65 xfs_qm_dqput(dqp); 66 66 }