[XFS] Allow punching holes to free space when at ENOSPC
authorDavid Chinner <dgc@sgi.com>
Thu, 19 Jul 2007 06:28:30 +0000 (16:28 +1000)
committerTim Shimmin <tes@chook.melbourne.sgi.com>
Thu, 19 Jul 2007 09:51:46 +0000 (19:51 +1000)
Make the free file space transaction able to dip into the reserved blocks
to ensure that we can successfully free blocks when the filesystem is at
ENOSPC.

SGI-PV: 967788
SGI-Modid: xfs-linux-melb:xfs-kern:29167a

Signed-off-by: David Chinner <dgc@sgi.com>
Signed-off-by: Vlad Apostolov <vapo@sgi.com>
Signed-off-by: Tim Shimmin <tes@sgi.com>
fs/xfs/xfs_vnodeops.c

index 79b5227..401cb00 100644 (file)
@@ -4434,9 +4434,12 @@ xfs_free_file_space(
        while (!error && !done) {
 
                /*
-                * allocate and setup the transaction
+                * allocate and setup the transaction. Allow this
+                * transaction to dip into the reserve blocks to ensure
+                * the freeing of the space succeeds at ENOSPC.
                 */
                tp = xfs_trans_alloc(mp, XFS_TRANS_DIOSTRAT);
+               tp->t_flags |= XFS_TRANS_RESERVE;
                error = xfs_trans_reserve(tp,
                                          resblks,
                                          XFS_WRITE_LOG_RES(mp),