ext4_journal: fix memory leakage when revoking a block repeatedly
authorKaho Ng <ngkaho1234@gmail.com>
Tue, 28 Jun 2016 09:18:52 +0000 (17:18 +0800)
committerKaho Ng <ngkaho1234@gmail.com>
Tue, 28 Jun 2016 15:03:31 +0000 (23:03 +0800)
src/ext4_journal.c

index 1f70c8194dd6b2fa5cc9e14dc998e5b06673b385..01a8c0860210bdc6f6fe4374c58b9c2bd7b92aed 100644 (file)
@@ -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;