| To: | xfs@xxxxxxxxxxx |
|---|---|
| Subject: | [PATCH 08/14] xfsprogs: free resources in libxfs_alloc_file_space error paths |
| From: | Eric Sandeen <sandeen@xxxxxxxxxx> |
| Date: | Tue, 8 Apr 2014 18:24:58 -0500 |
| Delivered-to: | xfs@xxxxxxxxxxx |
| In-reply-to: | <1396999504-13769-1-git-send-email-sandeen@xxxxxxxxxx> |
| References: | <1396999504-13769-1-git-send-email-sandeen@xxxxxxxxxx> |
The bmap freelist & transaction pointer weren't
being freed in libxfs_alloc_file_space error paths;
more or less copy the error handling that exists
in kernelspace to resolve this.
Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx>
---
libxfs/util.c | 20 +++++++++++++++++---
1 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/libxfs/util.c b/libxfs/util.c
index 1b05540..f1aa4c6 100644
--- a/libxfs/util.c
+++ b/libxfs/util.c
@@ -582,8 +582,17 @@ libxfs_alloc_file_space(
resblks = (uint)XFS_DIOSTRAT_SPACE_RES(mp, datablocks);
error = xfs_trans_reserve(tp, &M_RES(mp)->tr_write,
resblks, 0);
- if (error)
+ /*
+ * Check for running out of space
+ */
+ if (error) {
+ /*
+ * Free the transaction structure.
+ */
+ ASSERT(error == ENOSPC); /* XXX ERS? */
+ xfs_trans_cancel(tp, 0);
break;
+ }
xfs_trans_ijoin(tp, ip, 0);
xfs_trans_ihold(tp, ip);
@@ -593,12 +602,12 @@ libxfs_alloc_file_space(
&reccount, &free_list);
if (error)
- break;
+ goto error0;
/* complete the transaction */
error = xfs_bmap_finish(&tp, &free_list, &committed);
if (error)
- break;
+ goto error0;
error = xfs_trans_commit(tp, 0);
if (error)
@@ -612,6 +621,11 @@ libxfs_alloc_file_space(
allocatesize_fsb -= allocated_fsb;
}
return error;
+
+error0: /* Cancel bmap, unlock inode, cancel trans */
+ xfs_bmap_cancel(&free_list);
+ xfs_trans_cancel(tp, 0);
+ return error;
}
unsigned int
--
1.7.1
|
| Previous by Date: | [PATCH 11/14] xfs_quota: remove impossible tests in printpath, Eric Sandeen |
|---|---|
| Next by Date: | [PATCH 10/14] xfsprogs: fix too-large memset value in xfs_db's attr code, Eric Sandeen |
| Previous by Thread: | [PATCH 11/14] xfs_quota: remove impossible tests in printpath, Eric Sandeen |
| Next by Thread: | Re: [PATCH 08/14] xfsprogs: free resources in libxfs_alloc_file_space error paths, Brian Foster |
| Indexes: | [Date] [Thread] [Top] [All Lists] |