summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2018-07-17 19:51:50 -0400
committerDarrick J. Wong <darrick.wong@oracle.com>2018-07-30 10:57:48 -0400
commitfcacbc3f511338842dd177e2d53d457f9741543b (patch)
tree340ac5cb0dd6c2f2894e5a4d6f4b4038ad4f5f91
parentbc270b53e6aa3b9723e26a548fa1a1688ea61361 (diff)
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>
-rw-r--r--fs/xfs/libxfs/xfs_inode_fork.c19
-rw-r--r--fs/xfs/libxfs/xfs_inode_fork.h1
-rw-r--r--fs/xfs/xfs_inode.c3
-rw-r--r--fs/xfs/xfs_inode_item.c4
4 files changed, 5 insertions, 22 deletions
diff --git a/fs/xfs/libxfs/xfs_inode_fork.c b/fs/xfs/libxfs/xfs_inode_fork.c
index 183ec0cb8921..dee85b0f8846 100644
--- a/fs/xfs/libxfs/xfs_inode_fork.c
+++ b/fs/xfs/libxfs/xfs_inode_fork.c
@@ -158,7 +158,6 @@ xfs_init_local_fork(
158 } 158 }
159 159
160 ifp->if_bytes = size; 160 ifp->if_bytes = size;
161 ifp->if_real_bytes = real_size;
162 ifp->if_flags &= ~(XFS_IFEXTENTS | XFS_IFBROOT); 161 ifp->if_flags &= ~(XFS_IFEXTENTS | XFS_IFBROOT);
163 ifp->if_flags |= XFS_IFINLINE; 162 ifp->if_flags |= XFS_IFINLINE;
164} 163}
@@ -226,7 +225,6 @@ xfs_iformat_extents(
226 return -EFSCORRUPTED; 225 return -EFSCORRUPTED;
227 } 226 }
228 227
229 ifp->if_real_bytes = 0;
230 ifp->if_bytes = 0; 228 ifp->if_bytes = 0;
231 ifp->if_u1.if_root = NULL; 229 ifp->if_u1.if_root = NULL;
232 ifp->if_height = 0; 230 ifp->if_height = 0;
@@ -317,7 +315,6 @@ xfs_iformat_btree(
317 ifp->if_flags &= ~XFS_IFEXTENTS; 315 ifp->if_flags &= ~XFS_IFEXTENTS;
318 ifp->if_flags |= XFS_IFBROOT; 316 ifp->if_flags |= XFS_IFBROOT;
319 317
320 ifp->if_real_bytes = 0;
321 ifp->if_bytes = 0; 318 ifp->if_bytes = 0;
322 ifp->if_u1.if_root = NULL; 319 ifp->if_u1.if_root = NULL;
323 ifp->if_height = 0; 320 ifp->if_height = 0;
@@ -501,7 +498,6 @@ xfs_idata_realloc(
501 */ 498 */
502 real_size = roundup(new_size, 4); 499 real_size = roundup(new_size, 4);
503 if (ifp->if_u1.if_data == NULL) { 500 if (ifp->if_u1.if_data == NULL) {
504 ASSERT(ifp->if_real_bytes == 0);
505 ifp->if_u1.if_data = kmem_alloc(real_size, 501 ifp->if_u1.if_data = kmem_alloc(real_size,
506 KM_SLEEP | KM_NOFS); 502 KM_SLEEP | KM_NOFS);
507 } else { 503 } else {
@@ -509,15 +505,12 @@ xfs_idata_realloc(
509 * Only do the realloc if the underlying size 505 * Only do the realloc if the underlying size
510 * is really changing. 506 * is really changing.
511 */ 507 */
512 if (ifp->if_real_bytes != real_size) { 508 ifp->if_u1.if_data =
513 ifp->if_u1.if_data = 509 kmem_realloc(ifp->if_u1.if_data,
514 kmem_realloc(ifp->if_u1.if_data, 510 real_size,
515 real_size, 511 KM_SLEEP | KM_NOFS);
516 KM_SLEEP | KM_NOFS);
517 }
518 } 512 }
519 } 513 }
520 ifp->if_real_bytes = real_size;
521 ifp->if_bytes = new_size; 514 ifp->if_bytes = new_size;
522 ASSERT(ifp->if_bytes <= XFS_IFORK_SIZE(ip, whichfork)); 515 ASSERT(ifp->if_bytes <= XFS_IFORK_SIZE(ip, whichfork));
523} 516}
@@ -543,17 +536,13 @@ xfs_idestroy_fork(
543 */ 536 */
544 if (XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_LOCAL) { 537 if (XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_LOCAL) {
545 if (ifp->if_u1.if_data != NULL) { 538 if (ifp->if_u1.if_data != NULL) {
546 ASSERT(ifp->if_real_bytes != 0);
547 kmem_free(ifp->if_u1.if_data); 539 kmem_free(ifp->if_u1.if_data);
548 ifp->if_u1.if_data = NULL; 540 ifp->if_u1.if_data = NULL;
549 ifp->if_real_bytes = 0;
550 } 541 }
551 } else if ((ifp->if_flags & XFS_IFEXTENTS) && ifp->if_height) { 542 } else if ((ifp->if_flags & XFS_IFEXTENTS) && ifp->if_height) {
552 xfs_iext_destroy(ifp); 543 xfs_iext_destroy(ifp);
553 } 544 }
554 545
555 ASSERT(ifp->if_real_bytes == 0);
556
557 if (whichfork == XFS_ATTR_FORK) { 546 if (whichfork == XFS_ATTR_FORK) {
558 kmem_zone_free(xfs_ifork_zone, ip->i_afp); 547 kmem_zone_free(xfs_ifork_zone, ip->i_afp);
559 ip->i_afp = NULL; 548 ip->i_afp = NULL;
diff --git a/fs/xfs/libxfs/xfs_inode_fork.h b/fs/xfs/libxfs/xfs_inode_fork.h
index 781b1603df5e..46242052aad0 100644
--- a/fs/xfs/libxfs/xfs_inode_fork.h
+++ b/fs/xfs/libxfs/xfs_inode_fork.h
@@ -14,7 +14,6 @@ struct xfs_dinode;
14 */ 14 */
15typedef struct xfs_ifork { 15typedef struct xfs_ifork {
16 int if_bytes; /* bytes in if_u1 */ 16 int if_bytes; /* bytes in if_u1 */
17 int if_real_bytes; /* bytes allocated in if_u1 */
18 struct xfs_btree_block *if_broot; /* file's incore btree root */ 17 struct xfs_btree_block *if_broot; /* file's incore btree root */
19 short if_broot_bytes; /* bytes allocated for root */ 18 short if_broot_bytes; /* bytes allocated for root */
20 unsigned char if_flags; /* per-fork flags */ 19 unsigned char if_flags; /* per-fork flags */
diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
index 64c694d2b2a5..54fcfdfc748c 100644
--- a/fs/xfs/xfs_inode.c
+++ b/fs/xfs/xfs_inode.c
@@ -927,7 +927,7 @@ xfs_ialloc(
927 case S_IFLNK: 927 case S_IFLNK:
928 ip->i_d.di_format = XFS_DINODE_FMT_EXTENTS; 928 ip->i_d.di_format = XFS_DINODE_FMT_EXTENTS;
929 ip->i_df.if_flags = XFS_IFEXTENTS; 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 ip->i_df.if_u1.if_root = NULL; 931 ip->i_df.if_u1.if_root = NULL;
932 break; 932 break;
933 default: 933 default:
@@ -1841,7 +1841,6 @@ xfs_inactive(
1841 * to clean up here. 1841 * to clean up here.
1842 */ 1842 */
1843 if (VFS_I(ip)->i_mode == 0) { 1843 if (VFS_I(ip)->i_mode == 0) {
1844 ASSERT(ip->i_df.if_real_bytes == 0);
1845 ASSERT(ip->i_df.if_broot_bytes == 0); 1844 ASSERT(ip->i_df.if_broot_bytes == 0);
1846 return; 1845 return;
1847 } 1846 }
diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c
index 2389c34c172d..fa1c4fe2ffbf 100644
--- a/fs/xfs/xfs_inode_item.c
+++ b/fs/xfs/xfs_inode_item.c
@@ -194,8 +194,6 @@ xfs_inode_item_format_data_fork(
194 * to be there by xfs_idata_realloc(). 194 * to be there by xfs_idata_realloc().
195 */ 195 */
196 data_bytes = roundup(ip->i_df.if_bytes, 4); 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 ASSERT(ip->i_df.if_u1.if_data != NULL); 197 ASSERT(ip->i_df.if_u1.if_data != NULL);
200 ASSERT(ip->i_d.di_size > 0); 198 ASSERT(ip->i_d.di_size > 0);
201 xlog_copy_iovec(lv, vecp, XLOG_REG_TYPE_ILOCAL, 199 xlog_copy_iovec(lv, vecp, XLOG_REG_TYPE_ILOCAL,
@@ -280,8 +278,6 @@ xfs_inode_item_format_attr_fork(
280 * to be there by xfs_idata_realloc(). 278 * to be there by xfs_idata_realloc().
281 */ 279 */
282 data_bytes = roundup(ip->i_afp->if_bytes, 4); 280 data_bytes = roundup(ip->i_afp->if_bytes, 4);
283 ASSERT(ip->i_afp->if_real_bytes == 0 ||
284 ip->i_afp->if_real_bytes >= data_bytes);
285 ASSERT(ip->i_afp->if_u1.if_data != NULL); 281 ASSERT(ip->i_afp->if_u1.if_data != NULL);
286 xlog_copy_iovec(lv, vecp, XLOG_REG_TYPE_IATTR_LOCAL, 282 xlog_copy_iovec(lv, vecp, XLOG_REG_TYPE_IATTR_LOCAL,
287 ip->i_afp->if_u1.if_data, 283 ip->i_afp->if_u1.if_data,