hc
2024-05-14 bedbef8ad3e75a304af6361af235302bcc61d06b
kernel/fs/jbd2/revoke.c
....@@ -371,6 +371,11 @@
371371 }
372372 #endif
373373
374
+ if (WARN_ON_ONCE(handle->h_revoke_credits <= 0)) {
375
+ if (!bh_in)
376
+ brelse(bh);
377
+ return -EIO;
378
+ }
374379 /* We really ought not ever to revoke twice in a row without
375380 first having the revoke cancelled: it's illegal to free a
376381 block twice without allocating it in between! */
....@@ -391,6 +396,7 @@
391396 __brelse(bh);
392397 }
393398 }
399
+ handle->h_revoke_credits--;
394400
395401 jbd_debug(2, "insert revoke for block %llu, bh_in=%p\n",blocknr, bh_in);
396402 err = insert_revoke_hash(journal, blocknr,
....@@ -638,10 +644,8 @@
638644 {
639645 jbd2_journal_revoke_header_t *header;
640646
641
- if (is_journal_aborted(journal)) {
642
- put_bh(descriptor);
647
+ if (is_journal_aborted(journal))
643648 return;
644
- }
645649
646650 header = (jbd2_journal_revoke_header_t *)descriptor->b_data;
647651 header->r_count = cpu_to_be32(offset);