aboutsummaryrefslogtreecommitdiffstats
path: root/fs/xfs
diff options
context:
space:
mode:
authorDavid Chinner <dgc@sgi.com>2007-07-19 02:28:30 -0400
committerTim Shimmin <tes@chook.melbourne.sgi.com>2007-07-19 05:51:46 -0400
commit91ebecc74eeeeea0a2aa50bf1964ec2214a229c9 (patch)
treea81a48c59c46c7fedce5532afb6fd2ce648201dd /fs/xfs
parent4f57dbc6b5bae5a3978d429f45ac597ca7a3b8c6 (diff)
[XFS] Allow punching holes to free space when at ENOSPC
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>
Diffstat (limited to 'fs/xfs')
-rw-r--r--fs/xfs/xfs_vnodeops.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/xfs/xfs_vnodeops.c b/fs/xfs/xfs_vnodeops.c
index 79b522779aa..401cb00a55d 100644
--- a/fs/xfs/xfs_vnodeops.c
+++ b/fs/xfs/xfs_vnodeops.c
@@ -4434,9 +4434,12 @@ xfs_free_file_space(
4434 while (!error && !done) { 4434 while (!error && !done) {
4435 4435
4436 /* 4436 /*
4437 * allocate and setup the transaction 4437 * allocate and setup the transaction. Allow this
4438 * transaction to dip into the reserve blocks to ensure
4439 * the freeing of the space succeeds at ENOSPC.
4438 */ 4440 */
4439 tp = xfs_trans_alloc(mp, XFS_TRANS_DIOSTRAT); 4441 tp = xfs_trans_alloc(mp, XFS_TRANS_DIOSTRAT);
4442 tp->t_flags |= XFS_TRANS_RESERVE;
4440 error = xfs_trans_reserve(tp, 4443 error = xfs_trans_reserve(tp,
4441 resblks, 4444 resblks,
4442 XFS_WRITE_LOG_RES(mp), 4445 XFS_WRITE_LOG_RES(mp),