mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-10 23:20:05 +00:00
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: Zhang Yi <yi.zhang@huawei.com> Reviewed-by: Jan Kara <jack@suse.cz> Link: https://lore.kernel.org/r/20210610112440.3438139-7-yi.zhang@huawei.com Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
parent
4ba3fcdde7
commit
dbf2bab793
@ -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)
|
|||||||
{
|
{
|
||||||
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)
|
|||||||
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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user