xfs: reduce quota reservation when doing a dax unwritten extent conversion
authorDarrick J. Wong <djwong@kernel.org>
Thu, 28 Jan 2021 18:56:38 +0000 (10:56 -0800)
committerDarrick J. Wong <djwong@kernel.org>
Wed, 3 Feb 2021 17:18:48 +0000 (09:18 -0800)
In commit 3b0fe47805802, we reduced the free space requirement to
perform a pre-write unwritten extent conversion on an S_DAX file.  Since
we're not actually allocating any space, the logic goes, we only need
enough reservation to handle shape changes in the bmbt.

The same logic should have been applied to quota -- we're not allocating
any space, so we only need to reserve enough quota to handle the bmbt
shape changes.

Fixes: 3b0fe4780580 ("xfs: Don't use reserved blocks for data blocks with DAX")
Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Brian Foster <bfoster@redhat.com>
fs/xfs/xfs_iomap.c

index 8f4b27c..b05cfeb 100644 (file)
@@ -236,7 +236,7 @@ xfs_iomap_write_direct(
                bmapi_flags = XFS_BMAPI_CONVERT | XFS_BMAPI_ZERO;
                if (imap->br_state == XFS_EXT_UNWRITTEN) {
                        tflags |= XFS_TRANS_RESERVE;
-                       resblks = XFS_DIOSTRAT_SPACE_RES(mp, 0) << 1;
+                       resblks = qblocks = XFS_DIOSTRAT_SPACE_RES(mp, 0) << 1;
                }
        }
        error = xfs_trans_alloc(mp, &M_RES(mp)->tr_write, resblks, resrtextents,