xfs: short circuit xfs_growfs_data_private() if delta is zero
authorEric Sandeen <sandeen@redhat.com>
Thu, 14 Dec 2023 19:28:08 +0000 (13:28 -0600)
committerChandan Babu R <chandanbabu@kernel.org>
Fri, 15 Dec 2023 03:56:57 +0000 (09:26 +0530)
Although xfs_growfs_data() doesn't call xfs_growfs_data_private()
if in->newblocks == mp->m_sb.sb_dblocks, xfs_growfs_data_private()
further massages the new block count so that we don't i.e. try
to create a too-small new AG.

This may lead to a delta of "0" in xfs_growfs_data_private(), so
we end up in the shrink case and emit the EXPERIMENTAL warning
even if we're not changing anything at all.

Fix this by returning straightaway if the block delta is zero.

(nb: in older kernels, the result of entering the shrink case
with delta == 0 may actually let an -ENOSPC escape to userspace,
which is confusing for users.)

Fixes: fb2fc1720185 ("xfs: support shrinking unused space in the last AG")
Signed-off-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Chandan Babu R <chandanbabu@kernel.org>
fs/xfs/xfs_fsops.c

index 4f5da19142f2985a455b6df30b1f71ea9b12f975..5e7255e6ad3e88287a2e32f4d1deb54c3dac2b51 100644 (file)
@@ -134,6 +134,10 @@ xfs_growfs_data_private(
        if (delta < 0 && nagcount < 2)
                return -EINVAL;
 
+       /* No work to do */
+       if (delta == 0)
+               return 0;
+
        oagcount = mp->m_sb.sb_agcount;
        /* allocate the new per-ag structures */
        if (nagcount > oagcount) {