Commit dbf2bab7 authored by Zhang Yi's avatar Zhang Yi Committed by Theodore Ts'o

jbd2: simplify journal_clean_one_cp_list()

Now that __try_to_free_cp_buf() remove checkpointed buffer or transaction
when the buffer is not 'busy', which is only called by
journal_clean_one_cp_list(). This patch simplify this function by remove
__try_to_free_cp_buf() and invoke __cp_buffer_busy() directly.
Signed-off-by: default avatarZhang Yi <yi.zhang@huawei.com>
Reviewed-by: default avatarJan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20210610112440.3438139-7-yi.zhang@huawei.comSigned-off-by: default avatarTheodore Ts'o <tytso@mit.edu>
parent 4ba3fcdd
...@@ -91,25 +91,6 @@ static inline bool __cp_buffer_busy(struct journal_head *jh) ...@@ -91,25 +91,6 @@ static inline bool __cp_buffer_busy(struct journal_head *jh)
return (jh->b_transaction || buffer_locked(bh) || buffer_dirty(bh)); return (jh->b_transaction || buffer_locked(bh) || buffer_dirty(bh));
} }
/*
* Try to release a checkpointed buffer from its transaction.
* Returns 1 if we released it and 2 if we also released the
* whole transaction.
*
* Requires j_list_lock
*/
static int __try_to_free_cp_buf(struct journal_head *jh)
{
int ret = 0;
struct buffer_head *bh = jh2bh(jh);
if (!jh->b_transaction && !buffer_locked(bh) && !buffer_dirty(bh)) {
JBUFFER_TRACE(jh, "remove from checkpoint list");
ret = __jbd2_journal_remove_checkpoint(jh) + 1;
}
return ret;
}
/* /*
* __jbd2_log_wait_for_space: wait until there is space in the journal. * __jbd2_log_wait_for_space: wait until there is space in the journal.
* *
...@@ -440,7 +421,6 @@ static int journal_clean_one_cp_list(struct journal_head *jh, bool destroy) ...@@ -440,7 +421,6 @@ static int journal_clean_one_cp_list(struct journal_head *jh, bool destroy)
{ {
struct journal_head *last_jh; struct journal_head *last_jh;
struct journal_head *next_jh = jh; struct journal_head *next_jh = jh;
int ret;
if (!jh) if (!jh)
return 0; return 0;
...@@ -449,13 +429,11 @@ static int journal_clean_one_cp_list(struct journal_head *jh, bool destroy) ...@@ -449,13 +429,11 @@ static int journal_clean_one_cp_list(struct journal_head *jh, bool destroy)
do { do {
jh = next_jh; jh = next_jh;
next_jh = jh->b_cpnext; next_jh = jh->b_cpnext;
if (!destroy)
ret = __try_to_free_cp_buf(jh); if (!destroy && __cp_buffer_busy(jh))
else
ret = __jbd2_journal_remove_checkpoint(jh) + 1;
if (!ret)
return 0; return 0;
if (ret == 2)
if (__jbd2_journal_remove_checkpoint(jh))
return 1; return 1;
/* /*
* This function only frees up some memory * This function only frees up some memory
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment