trans_id_diff(uint32_t x, uint32_t y)
{
int32_t diff = x - y;
- return (diff >= 0);
+ return diff;
}
static int
rec = RB_FIND(jbd_revoke_tree,
&trans->revoke_root,
&tmp_rec);
- if (rec)
+ if (rec) {
RB_REMOVE(jbd_revoke_tree, &trans->revoke_root,
rec);
+ free(rec);
+ }
return EOK;
}
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;