On Thu 27-05-21 21:56:39, Zhang Yi wrote: > 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@xxxxxxxxxx> Looks good! Feel free to add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > fs/jbd2/checkpoint.c | 30 ++++-------------------------- > 1 file changed, 4 insertions(+), 26 deletions(-) > > diff --git a/fs/jbd2/checkpoint.c b/fs/jbd2/checkpoint.c > index 727389185d24..7dea46cc7099 100644 > --- a/fs/jbd2/checkpoint.c > +++ b/fs/jbd2/checkpoint.c > @@ -91,25 +91,6 @@ static inline bool __cp_buffer_busy(struct journal_head *jh) > 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. > * > @@ -444,7 +425,6 @@ static int journal_clean_one_cp_list(struct journal_head *jh, bool destroy) > { > struct journal_head *last_jh; > struct journal_head *next_jh = jh; > - int ret; > > if (!jh) > return 0; > @@ -453,13 +433,11 @@ static int journal_clean_one_cp_list(struct journal_head *jh, bool destroy) > do { > jh = next_jh; > next_jh = jh->b_cpnext; > - if (!destroy) > - ret = __try_to_free_cp_buf(jh); > - else > - ret = __jbd2_journal_remove_checkpoint(jh) + 1; > - if (!ret) > + > + if (!destroy && __cp_buffer_busy(jh)) > return 0; > - if (ret == 2) > + > + if (__jbd2_journal_remove_checkpoint(jh)) > return 1; > /* > * This function only frees up some memory > -- > 2.25.4 > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR