[Cluster-devel] [GFS2 PATCH 07/12] gfs2: make gfs2_ail1_empty_one return the count of active items
Andreas Gruenbacher
agruenba at redhat.com
Thu Aug 27 06:00:00 UTC 2020
Hi Bob,
On Fri, Aug 21, 2020 at 7:33 PM Bob Peterson <rpeterso at redhat.com> wrote:
> This patch is one baby step toward simplifying the journal management.
> It simply changes function gfs2_ail1_empty_one from a void to an int and
> makes it return a count of active items. This allows the caller to check
> the return code rather than list_empty on the tr_ail1_list. This way
> we can, in a later patch, combine transaction ail1 and ail2 lists.
what does "we can combine transaction ail1 and ail2 lists" mean?
> Signed-off-by: Bob Peterson <rpeterso at redhat.com>
> ---
> fs/gfs2/log.c | 12 ++++++++----
> 1 file changed, 8 insertions(+), 4 deletions(-)
>
> diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
> index 3e24e8733950..4fb1a96b8124 100644
> --- a/fs/gfs2/log.c
> +++ b/fs/gfs2/log.c
> @@ -244,13 +244,15 @@ static void gfs2_ail1_start(struct gfs2_sbd *sdp)
> * @tr: the transaction
> * @max_revokes: If nonzero, issue revokes for the bd items for written buffers
> *
> + * returns: the transaction's count of remaining active items
> */
>
> -static void gfs2_ail1_empty_one(struct gfs2_sbd *sdp, struct gfs2_trans *tr,
> +static int gfs2_ail1_empty_one(struct gfs2_sbd *sdp, struct gfs2_trans *tr,
> int *max_revokes)
> {
> struct gfs2_bufdata *bd, *s;
> struct buffer_head *bh;
> + int active_count = 0;
>
> list_for_each_entry_safe_reverse(bd, s, &tr->tr_ail1_list,
> bd_ail_st_list) {
> @@ -265,8 +267,10 @@ static void gfs2_ail1_empty_one(struct gfs2_sbd *sdp, struct gfs2_trans *tr,
> * If the ail buffer is not busy and caught an error, flag it
> * for others.
> */
> - if (!sdp->sd_log_error && buffer_busy(bh))
> + if (!sdp->sd_log_error && buffer_busy(bh)) {
> + active_count++;
> continue;
> + }
> if (!buffer_uptodate(bh) &&
> !cmpxchg(&sdp->sd_log_error, 0, -EIO)) {
> gfs2_io_error_bh(sdp, bh);
> @@ -285,6 +289,7 @@ static void gfs2_ail1_empty_one(struct gfs2_sbd *sdp, struct gfs2_trans *tr,
> }
> list_move(&bd->bd_ail_st_list, &tr->tr_ail2_list);
> }
> + return active_count;
> }
>
> /**
> @@ -303,8 +308,7 @@ static int gfs2_ail1_empty(struct gfs2_sbd *sdp, int max_revokes)
>
> spin_lock(&sdp->sd_ail_lock);
> list_for_each_entry_safe_reverse(tr, s, &sdp->sd_ail1_list, tr_list) {
> - gfs2_ail1_empty_one(sdp, tr, &max_revokes);
> - if (list_empty(&tr->tr_ail1_list) && oldest_tr)
> + if (!gfs2_ail1_empty_one(sdp, tr, &max_revokes) && oldest_tr)
> list_move(&tr->tr_list, &sdp->sd_ail2_list);
> else
> oldest_tr = 0;
> --
> 2.26.2
>
Thanks,
Andreas
More information about the Cluster-devel
mailing list