summaryrefslogtreecommitdiff
path: root/fs/xfs
diff options
context:
space:
mode:
authorGao Xiang <hsiangkao@redhat.com>2021-03-24 05:05:37 +0300
committerDarrick J. Wong <djwong@kernel.org>2021-03-26 02:47:52 +0300
commit014695c0a78ea3054aa2105ba23cc107c3c27c74 (patch)
treeb04606d6e3934a23d0ed29368f3a1a259660544c /fs/xfs
parentf9dd7ba4308cd95c57f284253c5fb99623d7b715 (diff)
downloadlinux-014695c0a78ea3054aa2105ba23cc107c3c27c74.tar.xz
xfs: update lazy sb counters immediately for resizefs
sb_fdblocks will be updated lazily if lazysbcount is enabled, therefore when shrinking the filesystem sb_fdblocks could be larger than sb_dblocks and xfs_validate_sb_write() would fail. Even for growfs case, it'd be better to update lazy sb counters immediately to reflect the real sb counters. Reviewed-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Brian Foster <bfoster@redhat.com> Signed-off-by: Gao Xiang <hsiangkao@redhat.com> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Diffstat (limited to 'fs/xfs')
-rw-r--r--fs/xfs/xfs_fsops.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/fs/xfs/xfs_fsops.c b/fs/xfs/xfs_fsops.c
index a2a407039227..9f9ba8bd0213 100644
--- a/fs/xfs/xfs_fsops.c
+++ b/fs/xfs/xfs_fsops.c
@@ -128,6 +128,15 @@ xfs_growfs_data_private(
nb - mp->m_sb.sb_dblocks);
if (id.nfree)
xfs_trans_mod_sb(tp, XFS_TRANS_SB_FDBLOCKS, id.nfree);
+
+ /*
+ * Sync sb counters now to reflect the updated values. This is
+ * particularly important for shrink because the write verifier
+ * will fail if sb_fdblocks is ever larger than sb_dblocks.
+ */
+ if (xfs_sb_version_haslazysbcount(&mp->m_sb))
+ xfs_log_sb(tp);
+
xfs_trans_set_sync(tp);
error = xfs_trans_commit(tp);
if (error)