Message ID | 20210527135641.420514-7-yi.zhang@huawei.com |
---|---|
State | Superseded |
Headers | show |
Series | ext4, jbd2: fix 3 issues about bdev_try_to_free_page() | expand |
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@huawei.com> Looks good! Feel free to add: Reviewed-by: Jan Kara <jack@suse.cz> 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 >
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
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> --- fs/jbd2/checkpoint.c | 30 ++++-------------------------- 1 file changed, 4 insertions(+), 26 deletions(-)