Skip to content

Commit

Permalink
gfs2: Stop messing with ip->i_rgd in the rlist code
Browse files Browse the repository at this point in the history
In the resource group list code, keep the last resource group added in
the last position in the array.  Check against that instead of messing
with ip->i_rgd.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Signed-off-by: Bob Peterson <rpeterso@redhat.com>
  • Loading branch information
Andreas Gruenbacher committed Jul 4, 2018
1 parent ee9c7f9 commit 03f8c41
Showing 1 changed file with 22 additions and 6 deletions.
28 changes: 22 additions & 6 deletions fs/gfs2/rgrp.c
Original file line number Diff line number Diff line change
Expand Up @@ -2559,19 +2559,35 @@ void gfs2_rlist_add(struct gfs2_inode *ip, struct gfs2_rgrp_list *rlist,
if (gfs2_assert_warn(sdp, !rlist->rl_ghs))
return;

if (ip->i_rgd && rgrp_contains_block(ip->i_rgd, block))
rgd = ip->i_rgd;
else
/*
* The resource group last accessed is kept in the last position.
*/

if (rlist->rl_rgrps) {
rgd = rlist->rl_rgd[rlist->rl_rgrps - 1];
if (rgrp_contains_block(rgd, block))
return;
rgd = gfs2_blk2rgrpd(sdp, block, 1);
} else {
rgd = ip->i_rgd;
if (!rgd || !rgrp_contains_block(rgd, block))
rgd = gfs2_blk2rgrpd(sdp, block, 1);
}

if (!rgd) {
fs_err(sdp, "rlist_add: no rgrp for block %llu\n", (unsigned long long)block);
fs_err(sdp, "rlist_add: no rgrp for block %llu\n",
(unsigned long long)block);
return;
}
ip->i_rgd = rgd;

for (x = 0; x < rlist->rl_rgrps; x++)
if (rlist->rl_rgd[x] == rgd)
for (x = 0; x < rlist->rl_rgrps; x++) {
if (rlist->rl_rgd[x] == rgd) {
swap(rlist->rl_rgd[x],
rlist->rl_rgd[rlist->rl_rgrps - 1]);
return;
}
}

if (rlist->rl_rgrps == rlist->rl_space) {
new_space = rlist->rl_space + 10;
Expand Down

0 comments on commit 03f8c41

Please sign in to comment.