| From 3996ef149772f4a09c0bc4f092818f04caf8512a Mon Sep 17 00:00:00 2001 |
| From: Theodore Ts'o <tytso@mit.edu> |
| Date: Sat, 4 Feb 2017 23:14:19 -0500 |
| Subject: [PATCH] jbd2: don't leak modified metadata buffers on an aborted |
| journal |
| |
| commit e112666b4959b25a8552d63bc564e1059be703e8 upstream. |
| |
| If the journal has been aborted, we shouldn't mark the underlying |
| buffer head as dirty, since that will cause the metadata block to get |
| modified. And if the journal has been aborted, we shouldn't allow |
| this since it will almost certainly lead to a corrupted file system. |
| |
| Signed-off-by: Theodore Ts'o <tytso@mit.edu> |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/fs/jbd2/transaction.c b/fs/jbd2/transaction.c |
| index e1652665bd93..5e659ee08d6a 100644 |
| --- a/fs/jbd2/transaction.c |
| +++ b/fs/jbd2/transaction.c |
| @@ -1863,7 +1863,9 @@ static void __jbd2_journal_temp_unlink_buffer(struct journal_head *jh) |
| |
| __blist_del_buffer(list, jh); |
| jh->b_jlist = BJ_None; |
| - if (test_clear_buffer_jbddirty(bh)) |
| + if (transaction && is_journal_aborted(transaction->t_journal)) |
| + clear_buffer_jbddirty(bh); |
| + else if (test_clear_buffer_jbddirty(bh)) |
| mark_buffer_dirty(bh); /* Expose it to the VM */ |
| } |
| |
| -- |
| 2.12.0 |
| |