]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
xfs: remove a racy if_bytes check in xfs_reflink_end_cow_extent
authorChristoph Hellwig <hch@lst.de>
Wed, 30 Apr 2025 21:26:50 +0000 (14:26 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 9 May 2025 07:41:37 +0000 (09:41 +0200)
[ Upstream commit 86de848403abda05bf9c16dcdb6bef65a8d88c41 ]

Accessing if_bytes without the ilock is racy.  Remove the initial
if_bytes == 0 check in xfs_reflink_end_cow_extent and let
ext_iext_lookup_extent fail for this case after we've taken the ilock.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Chandan Babu R <chandanbabu@kernel.org>
Signed-off-by: Leah Rumancik <leah.rumancik@gmail.com>
Acked-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/xfs/xfs_reflink.c

index 0405226fb74c8af51059e7bc3f7006a0d385f071..d539487eaf1a740f2bd2c6b8ca9ace2dc548e02f 100644 (file)
@@ -718,12 +718,6 @@ xfs_reflink_end_cow_extent(
        int                     nmaps;
        int                     error;
 
-       /* No COW extents?  That's easy! */
-       if (ifp->if_bytes == 0) {
-               *offset_fsb = end_fsb;
-               return 0;
-       }
-
        resblks = XFS_EXTENTADD_SPACE_RES(mp, XFS_DATA_FORK);
        error = xfs_trans_alloc(mp, &M_RES(mp)->tr_write, resblks, 0,
                        XFS_TRANS_RESERVE, &tp);