diff options
-rw-r--r-- | fs/gfs2/bmap.c | 4 | ||||
-rw-r--r-- | fs/gfs2/dir.c | 2 | ||||
-rw-r--r-- | fs/gfs2/rgrp.c | 14 | ||||
-rw-r--r-- | fs/gfs2/rgrp.h | 2 | ||||
-rw-r--r-- | fs/gfs2/xattr.c | 4 |
5 files changed, 15 insertions, 11 deletions
diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c index 9d3a0c26df28..22ad413213ca 100644 --- a/fs/gfs2/bmap.c +++ b/fs/gfs2/bmap.c | |||
@@ -724,7 +724,7 @@ static int do_strip(struct gfs2_inode *ip, struct buffer_head *dibh, | |||
724 | blen++; | 724 | blen++; |
725 | else { | 725 | else { |
726 | if (bstart) | 726 | if (bstart) |
727 | gfs2_rlist_add(sdp, &rlist, bstart); | 727 | gfs2_rlist_add(ip, &rlist, bstart); |
728 | 728 | ||
729 | bstart = bn; | 729 | bstart = bn; |
730 | blen = 1; | 730 | blen = 1; |
@@ -732,7 +732,7 @@ static int do_strip(struct gfs2_inode *ip, struct buffer_head *dibh, | |||
732 | } | 732 | } |
733 | 733 | ||
734 | if (bstart) | 734 | if (bstart) |
735 | gfs2_rlist_add(sdp, &rlist, bstart); | 735 | gfs2_rlist_add(ip, &rlist, bstart); |
736 | else | 736 | else |
737 | goto out; /* Nothing to do */ | 737 | goto out; /* Nothing to do */ |
738 | 738 | ||
diff --git a/fs/gfs2/dir.c b/fs/gfs2/dir.c index 90b877b464ca..8ccad2467cb6 100644 --- a/fs/gfs2/dir.c +++ b/fs/gfs2/dir.c | |||
@@ -1821,7 +1821,7 @@ static int leaf_dealloc(struct gfs2_inode *dip, u32 index, u32 len, | |||
1821 | if (blk != leaf_no) | 1821 | if (blk != leaf_no) |
1822 | brelse(bh); | 1822 | brelse(bh); |
1823 | 1823 | ||
1824 | gfs2_rlist_add(sdp, &rlist, blk); | 1824 | gfs2_rlist_add(dip, &rlist, blk); |
1825 | l_blocks++; | 1825 | l_blocks++; |
1826 | } | 1826 | } |
1827 | 1827 | ||
diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c index 08b3a8002aca..3088fb25656d 100644 --- a/fs/gfs2/rgrp.c +++ b/fs/gfs2/rgrp.c | |||
@@ -1560,7 +1560,7 @@ fail: | |||
1560 | 1560 | ||
1561 | /** | 1561 | /** |
1562 | * gfs2_rlist_add - add a RG to a list of RGs | 1562 | * gfs2_rlist_add - add a RG to a list of RGs |
1563 | * @sdp: the filesystem | 1563 | * @ip: the inode |
1564 | * @rlist: the list of resource groups | 1564 | * @rlist: the list of resource groups |
1565 | * @block: the block | 1565 | * @block: the block |
1566 | * | 1566 | * |
@@ -1570,9 +1570,10 @@ fail: | |||
1570 | * | 1570 | * |
1571 | */ | 1571 | */ |
1572 | 1572 | ||
1573 | void gfs2_rlist_add(struct gfs2_sbd *sdp, struct gfs2_rgrp_list *rlist, | 1573 | void gfs2_rlist_add(struct gfs2_inode *ip, struct gfs2_rgrp_list *rlist, |
1574 | u64 block) | 1574 | u64 block) |
1575 | { | 1575 | { |
1576 | struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); | ||
1576 | struct gfs2_rgrpd *rgd; | 1577 | struct gfs2_rgrpd *rgd; |
1577 | struct gfs2_rgrpd **tmp; | 1578 | struct gfs2_rgrpd **tmp; |
1578 | unsigned int new_space; | 1579 | unsigned int new_space; |
@@ -1581,12 +1582,15 @@ void gfs2_rlist_add(struct gfs2_sbd *sdp, struct gfs2_rgrp_list *rlist, | |||
1581 | if (gfs2_assert_warn(sdp, !rlist->rl_ghs)) | 1582 | if (gfs2_assert_warn(sdp, !rlist->rl_ghs)) |
1582 | return; | 1583 | return; |
1583 | 1584 | ||
1584 | rgd = gfs2_blk2rgrpd(sdp, block); | 1585 | if (ip->i_rgd && rgrp_contains_block(ip->i_rgd, block)) |
1586 | rgd = ip->i_rgd; | ||
1587 | else | ||
1588 | rgd = gfs2_blk2rgrpd(sdp, block); | ||
1585 | if (!rgd) { | 1589 | if (!rgd) { |
1586 | if (gfs2_consist(sdp)) | 1590 | fs_err(sdp, "rlist_add: no rgrp for block %llu\n", (unsigned long long)block); |
1587 | fs_err(sdp, "block = %llu\n", (unsigned long long)block); | ||
1588 | return; | 1591 | return; |
1589 | } | 1592 | } |
1593 | ip->i_rgd = rgd; | ||
1590 | 1594 | ||
1591 | for (x = 0; x < rlist->rl_rgrps; x++) | 1595 | for (x = 0; x < rlist->rl_rgrps; x++) |
1592 | if (rlist->rl_rgd[x] == rgd) | 1596 | if (rlist->rl_rgd[x] == rgd) |
diff --git a/fs/gfs2/rgrp.h b/fs/gfs2/rgrp.h index 0439fca18f08..0e886d830784 100644 --- a/fs/gfs2/rgrp.h +++ b/fs/gfs2/rgrp.h | |||
@@ -60,7 +60,7 @@ struct gfs2_rgrp_list { | |||
60 | struct gfs2_holder *rl_ghs; | 60 | struct gfs2_holder *rl_ghs; |
61 | }; | 61 | }; |
62 | 62 | ||
63 | extern void gfs2_rlist_add(struct gfs2_sbd *sdp, struct gfs2_rgrp_list *rlist, | 63 | extern void gfs2_rlist_add(struct gfs2_inode *ip, struct gfs2_rgrp_list *rlist, |
64 | u64 block); | 64 | u64 block); |
65 | extern void gfs2_rlist_alloc(struct gfs2_rgrp_list *rlist, unsigned int state); | 65 | extern void gfs2_rlist_alloc(struct gfs2_rgrp_list *rlist, unsigned int state); |
66 | extern void gfs2_rlist_free(struct gfs2_rgrp_list *rlist); | 66 | extern void gfs2_rlist_free(struct gfs2_rgrp_list *rlist); |
diff --git a/fs/gfs2/xattr.c b/fs/gfs2/xattr.c index e7bf0ea1c3cc..71d7bf830c09 100644 --- a/fs/gfs2/xattr.c +++ b/fs/gfs2/xattr.c | |||
@@ -1356,14 +1356,14 @@ static int ea_dealloc_indirect(struct gfs2_inode *ip) | |||
1356 | blen++; | 1356 | blen++; |
1357 | else { | 1357 | else { |
1358 | if (bstart) | 1358 | if (bstart) |
1359 | gfs2_rlist_add(sdp, &rlist, bstart); | 1359 | gfs2_rlist_add(ip, &rlist, bstart); |
1360 | bstart = bn; | 1360 | bstart = bn; |
1361 | blen = 1; | 1361 | blen = 1; |
1362 | } | 1362 | } |
1363 | blks++; | 1363 | blks++; |
1364 | } | 1364 | } |
1365 | if (bstart) | 1365 | if (bstart) |
1366 | gfs2_rlist_add(sdp, &rlist, bstart); | 1366 | gfs2_rlist_add(ip, &rlist, bstart); |
1367 | else | 1367 | else |
1368 | goto out; | 1368 | goto out; |
1369 | 1369 | ||