summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKaho Ng <ngkaho1234@gmail.com>2016-06-28 17:18:52 +0800
committerKaho Ng <ngkaho1234@gmail.com>2016-06-28 23:03:31 +0800
commit358f3f8f49a50ea3f2032a31eb73f16411fad8a4 (patch)
treee5f52e0d762483415520d03e2e53cd8ac42815e5 /src
parent321eba33ebbadfe61ece480f877260788c6cf8b8 (diff)
ext4_journal: fix memory leakage when revoking a block repeatedly
Diffstat (limited to 'src')
-rw-r--r--src/ext4_journal.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/ext4_journal.c b/src/ext4_journal.c
index 1f70c81..01a8c08 100644
--- a/src/ext4_journal.c
+++ b/src/ext4_journal.c
@@ -1656,8 +1656,16 @@ int jbd_trans_set_block_dirty(struct jbd_trans *trans,
int jbd_trans_revoke_block(struct jbd_trans *trans,
ext4_fsblk_t lba)
{
- struct jbd_revoke_rec *rec =
- calloc(1, sizeof(struct jbd_revoke_rec));
+ struct jbd_revoke_rec tmp_rec = {
+ .lba = lba
+ }, *rec;
+ rec = RB_FIND(jbd_revoke_tree,
+ &trans->revoke_root,
+ &tmp_rec);
+ if (rec)
+ return EOK;
+
+ rec = calloc(1, sizeof(struct jbd_revoke_rec));
if (!rec)
return ENOMEM;