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

xfs: remove if_real_bytes

The field is only used for asserts, and to track if we really need to do
realloc when growing the inode fork data. But the krealloc function
already performs this check internally, so there is no need to keep track
of the real allocation size.

This will free space in the inode fork for keeping a sequence counter of
changes to the extent list.

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
fcacbc3f bc270b53

+5 -22
+4 -15
fs/xfs/libxfs/xfs_inode_fork.c
··· 158 158 } 159 159 160 160 ifp->if_bytes = size; 161 - ifp->if_real_bytes = real_size; 162 161 ifp->if_flags &= ~(XFS_IFEXTENTS | XFS_IFBROOT); 163 162 ifp->if_flags |= XFS_IFINLINE; 164 163 } ··· 225 226 return -EFSCORRUPTED; 226 227 } 227 228 228 - ifp->if_real_bytes = 0; 229 229 ifp->if_bytes = 0; 230 230 ifp->if_u1.if_root = NULL; 231 231 ifp->if_height = 0; ··· 315 317 ifp->if_flags &= ~XFS_IFEXTENTS; 316 318 ifp->if_flags |= XFS_IFBROOT; 317 319 318 - ifp->if_real_bytes = 0; 319 320 ifp->if_bytes = 0; 320 321 ifp->if_u1.if_root = NULL; 321 322 ifp->if_height = 0; ··· 498 501 */ 499 502 real_size = roundup(new_size, 4); 500 503 if (ifp->if_u1.if_data == NULL) { 501 - ASSERT(ifp->if_real_bytes == 0); 502 504 ifp->if_u1.if_data = kmem_alloc(real_size, 503 505 KM_SLEEP | KM_NOFS); 504 506 } else { ··· 505 509 * Only do the realloc if the underlying size 506 510 * is really changing. 507 511 */ 508 - if (ifp->if_real_bytes != real_size) { 509 - ifp->if_u1.if_data = 510 - kmem_realloc(ifp->if_u1.if_data, 511 - real_size, 512 - KM_SLEEP | KM_NOFS); 513 - } 512 + ifp->if_u1.if_data = 513 + kmem_realloc(ifp->if_u1.if_data, 514 + real_size, 515 + KM_SLEEP | KM_NOFS); 514 516 } 515 517 } 516 - ifp->if_real_bytes = real_size; 517 518 ifp->if_bytes = new_size; 518 519 ASSERT(ifp->if_bytes <= XFS_IFORK_SIZE(ip, whichfork)); 519 520 } ··· 536 543 */ 537 544 if (XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_LOCAL) { 538 545 if (ifp->if_u1.if_data != NULL) { 539 - ASSERT(ifp->if_real_bytes != 0); 540 546 kmem_free(ifp->if_u1.if_data); 541 547 ifp->if_u1.if_data = NULL; 542 - ifp->if_real_bytes = 0; 543 548 } 544 549 } else if ((ifp->if_flags & XFS_IFEXTENTS) && ifp->if_height) { 545 550 xfs_iext_destroy(ifp); 546 551 } 547 - 548 - ASSERT(ifp->if_real_bytes == 0); 549 552 550 553 if (whichfork == XFS_ATTR_FORK) { 551 554 kmem_zone_free(xfs_ifork_zone, ip->i_afp);
-1
fs/xfs/libxfs/xfs_inode_fork.h
··· 14 14 */ 15 15 typedef struct xfs_ifork { 16 16 int if_bytes; /* bytes in if_u1 */ 17 - int if_real_bytes; /* bytes allocated in if_u1 */ 18 17 struct xfs_btree_block *if_broot; /* file's incore btree root */ 19 18 short if_broot_bytes; /* bytes allocated for root */ 20 19 unsigned char if_flags; /* per-fork flags */
+1 -2
fs/xfs/xfs_inode.c
··· 927 927 case S_IFLNK: 928 928 ip->i_d.di_format = XFS_DINODE_FMT_EXTENTS; 929 929 ip->i_df.if_flags = XFS_IFEXTENTS; 930 - ip->i_df.if_bytes = ip->i_df.if_real_bytes = 0; 930 + ip->i_df.if_bytes = 0; 931 931 ip->i_df.if_u1.if_root = NULL; 932 932 break; 933 933 default: ··· 1841 1841 * to clean up here. 1842 1842 */ 1843 1843 if (VFS_I(ip)->i_mode == 0) { 1844 - ASSERT(ip->i_df.if_real_bytes == 0); 1845 1844 ASSERT(ip->i_df.if_broot_bytes == 0); 1846 1845 return; 1847 1846 }
-4
fs/xfs/xfs_inode_item.c
··· 194 194 * to be there by xfs_idata_realloc(). 195 195 */ 196 196 data_bytes = roundup(ip->i_df.if_bytes, 4); 197 - ASSERT(ip->i_df.if_real_bytes == 0 || 198 - ip->i_df.if_real_bytes >= data_bytes); 199 197 ASSERT(ip->i_df.if_u1.if_data != NULL); 200 198 ASSERT(ip->i_d.di_size > 0); 201 199 xlog_copy_iovec(lv, vecp, XLOG_REG_TYPE_ILOCAL, ··· 278 280 * to be there by xfs_idata_realloc(). 279 281 */ 280 282 data_bytes = roundup(ip->i_afp->if_bytes, 4); 281 - ASSERT(ip->i_afp->if_real_bytes == 0 || 282 - ip->i_afp->if_real_bytes >= data_bytes); 283 283 ASSERT(ip->i_afp->if_u1.if_data != NULL); 284 284 xlog_copy_iovec(lv, vecp, XLOG_REG_TYPE_IATTR_LOCAL, 285 285 ip->i_afp->if_u1.if_data,