mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
gfs2: make gfs2_ail1_empty_one return the count of active items
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. Signed-off-by: Bob Peterson <rpeterso@redhat.com> Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
This commit is contained in:
parent
68942870c6
commit
36c783092d
@ -244,13 +244,15 @@ static void gfs2_ail1_start(struct gfs2_sbd *sdp)
|
|||||||
* @tr: the transaction
|
* @tr: the transaction
|
||||||
* @max_revokes: If nonzero, issue revokes for the bd items for written buffers
|
* @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)
|
int *max_revokes)
|
||||||
{
|
{
|
||||||
struct gfs2_bufdata *bd, *s;
|
struct gfs2_bufdata *bd, *s;
|
||||||
struct buffer_head *bh;
|
struct buffer_head *bh;
|
||||||
|
int active_count = 0;
|
||||||
|
|
||||||
list_for_each_entry_safe_reverse(bd, s, &tr->tr_ail1_list,
|
list_for_each_entry_safe_reverse(bd, s, &tr->tr_ail1_list,
|
||||||
bd_ail_st_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
|
* If the ail buffer is not busy and caught an error, flag it
|
||||||
* for others.
|
* for others.
|
||||||
*/
|
*/
|
||||||
if (!sdp->sd_log_error && buffer_busy(bh))
|
if (!sdp->sd_log_error && buffer_busy(bh)) {
|
||||||
|
active_count++;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
if (!buffer_uptodate(bh) &&
|
if (!buffer_uptodate(bh) &&
|
||||||
!cmpxchg(&sdp->sd_log_error, 0, -EIO)) {
|
!cmpxchg(&sdp->sd_log_error, 0, -EIO)) {
|
||||||
gfs2_io_error_bh(sdp, bh);
|
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);
|
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);
|
spin_lock(&sdp->sd_ail_lock);
|
||||||
list_for_each_entry_safe_reverse(tr, s, &sdp->sd_ail1_list, tr_list) {
|
list_for_each_entry_safe_reverse(tr, s, &sdp->sd_ail1_list, tr_list) {
|
||||||
gfs2_ail1_empty_one(sdp, tr, &max_revokes);
|
if (!gfs2_ail1_empty_one(sdp, tr, &max_revokes) && oldest_tr)
|
||||||
if (list_empty(&tr->tr_ail1_list) && oldest_tr)
|
|
||||||
list_move(&tr->tr_list, &sdp->sd_ail2_list);
|
list_move(&tr->tr_list, &sdp->sd_ail2_list);
|
||||||
else
|
else
|
||||||
oldest_tr = 0;
|
oldest_tr = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user