FAILED: patch "[PATCH] jbd2: move the clearing of b_modified flag to the" failed to apply to 5.4-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 6a66a7ded12baa6ebbb2e3e82f8cb91382814839 Mon Sep 17 00:00:00 2001
From: "zhangyi (F)" <[email protected]>
Date: Thu, 13 Feb 2020 14:38:20 +0800
Subject: [PATCH] jbd2: move the clearing of b_modified flag to the
journal_unmap_buffer()
There is no need to delay the clearing of b_modified flag to the transaction committing time when unmapping the journalled buffer, so just move it to the journal_unmap_buffer().
Reviewed-by Jan Kara <[email protected]>
Signed-off-by zhangyi (F) <[email protected]>
Signed-off-by Theodore Ts'o <[email protected]>
fs/jbd2/commit.c +15 -28
@@ -976,34 +976,21 @@ void jbd2_journal_commit_transaction(journal_t *journal)* it. */ /* -* A buffer which has been freed while still being journaled by -* a previous transaction. -*/ -if (buffer_freed (bh)) { -/* -* If the running transaction is the one containing -* "add to orphan" operation (b_next_transaction != -* NULL), we have to wait for that transaction to -* commit before we can really get rid of the buffer. -* So just clear b_modified to not confuse transaction -* credit accounting and refile the buffer to -* BJ_Forget of the running transaction. If the just -* committed transaction contains "add to orphan" -* operation, we can completely invalidate the buffer -* now. We are rather through in that since the -* buffer may be still accessible when blocksize < -* pagesize and it is attached to the last partial -* page. -*/ - jh->b_modified =0 ; -if (!jh->b_next_transaction) { -clear_buffer_freed (bh); -clear_buffer_jbddirty (bh); -clear_buffer_mapped (bh); -clear_buffer_new (bh); -clear_buffer_req (bh); - bh->b_bdev =NULL ; - } +* A buffer which has been freed while still being journaled +* by a previous transaction, refile the buffer to BJ_Forget of +* the running transaction. If the just committed transaction +* contains "add to orphan" operation, we can completely +* invalidate the buffer now. We are rather through in that +* since the buffer may be still accessible when blocksize < +* pagesize and it is attached to the last partial page. +*/ +if (buffer_freed (bh) && !jh->b_next_transaction) { +clear_buffer_freed (bh); +clear_buffer_jbddirty (bh); +clear_buffer_mapped (bh); +clear_buffer_new (bh); +clear_buffer_req (bh); + bh->b_bdev =NULL ; }if (buffer_jbddirty (bh)) {
fs/jbd2/transaction.c +6 -4
@@ -2329,14 +2329,16 @@ static int journal_unmap_buffer(journal_t *journal, struct buffer_head *bh,return -EBUSY ; }/* -* OK, buffer won't be reachable after truncate. We just set -* j_next_transaction to the running transaction (if there is -* one) and mark buffer as freed so that commit code knows it -* should clear dirty bits when it is done with the buffer. +* OK, buffer won't be reachable after truncate. We just clear +* b_modified to not confuse transaction credit accounting, and +* set j_next_transaction to the running transaction (if there +* is one) and mark buffer as freed so that commit code knows +* it should clear dirty bits when it is done with the buffer. */ set_buffer_freed (bh);if (journal->j_running_transaction &&buffer_jbddirty (bh)) jh->b_next_transaction = journal->j_running_transaction; + jh->b_modified =0 ;spin_unlock (&journal->j_list_lock);spin_unlock (&jh->b_state_lock);write_unlock (&journal->j_state_lock);