diff options
Diffstat (limited to 'fs/gfs2/rgrp.c')
| -rw-r--r-- | fs/gfs2/rgrp.c | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c index 7293ea27020..cf930cd9664 100644 --- a/fs/gfs2/rgrp.c +++ b/fs/gfs2/rgrp.c | |||
| @@ -1602,7 +1602,7 @@ rgrp_error: | |||
| 1602 | * | 1602 | * |
| 1603 | */ | 1603 | */ |
| 1604 | 1604 | ||
| 1605 | void gfs2_free_data(struct gfs2_inode *ip, u64 bstart, u32 blen) | 1605 | void __gfs2_free_data(struct gfs2_inode *ip, u64 bstart, u32 blen) |
| 1606 | { | 1606 | { |
| 1607 | struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); | 1607 | struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); |
| 1608 | struct gfs2_rgrpd *rgd; | 1608 | struct gfs2_rgrpd *rgd; |
| @@ -1617,7 +1617,21 @@ void gfs2_free_data(struct gfs2_inode *ip, u64 bstart, u32 blen) | |||
| 1617 | gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data); | 1617 | gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data); |
| 1618 | 1618 | ||
| 1619 | gfs2_trans_add_rg(rgd); | 1619 | gfs2_trans_add_rg(rgd); |
| 1620 | } | ||
| 1620 | 1621 | ||
| 1622 | /** | ||
| 1623 | * gfs2_free_data - free a contiguous run of data block(s) | ||
| 1624 | * @ip: the inode these blocks are being freed from | ||
| 1625 | * @bstart: first block of a run of contiguous blocks | ||
| 1626 | * @blen: the length of the block run | ||
| 1627 | * | ||
| 1628 | */ | ||
| 1629 | |||
| 1630 | void gfs2_free_data(struct gfs2_inode *ip, u64 bstart, u32 blen) | ||
| 1631 | { | ||
| 1632 | struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); | ||
| 1633 | |||
| 1634 | __gfs2_free_data(ip, bstart, blen); | ||
| 1621 | gfs2_statfs_change(sdp, 0, +blen, 0); | 1635 | gfs2_statfs_change(sdp, 0, +blen, 0); |
| 1622 | gfs2_quota_change(ip, -(s64)blen, ip->i_inode.i_uid, ip->i_inode.i_gid); | 1636 | gfs2_quota_change(ip, -(s64)blen, ip->i_inode.i_uid, ip->i_inode.i_gid); |
| 1623 | } | 1637 | } |
| @@ -1630,7 +1644,7 @@ void gfs2_free_data(struct gfs2_inode *ip, u64 bstart, u32 blen) | |||
| 1630 | * | 1644 | * |
| 1631 | */ | 1645 | */ |
| 1632 | 1646 | ||
| 1633 | void gfs2_free_meta(struct gfs2_inode *ip, u64 bstart, u32 blen) | 1647 | void __gfs2_free_meta(struct gfs2_inode *ip, u64 bstart, u32 blen) |
| 1634 | { | 1648 | { |
| 1635 | struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); | 1649 | struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); |
| 1636 | struct gfs2_rgrpd *rgd; | 1650 | struct gfs2_rgrpd *rgd; |
| @@ -1645,10 +1659,24 @@ void gfs2_free_meta(struct gfs2_inode *ip, u64 bstart, u32 blen) | |||
| 1645 | gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data); | 1659 | gfs2_rgrp_out(rgd, rgd->rd_bits[0].bi_bh->b_data); |
| 1646 | 1660 | ||
| 1647 | gfs2_trans_add_rg(rgd); | 1661 | gfs2_trans_add_rg(rgd); |
| 1662 | gfs2_meta_wipe(ip, bstart, blen); | ||
| 1663 | } | ||
| 1648 | 1664 | ||
| 1665 | /** | ||
| 1666 | * gfs2_free_meta - free a contiguous run of data block(s) | ||
| 1667 | * @ip: the inode these blocks are being freed from | ||
| 1668 | * @bstart: first block of a run of contiguous blocks | ||
| 1669 | * @blen: the length of the block run | ||
| 1670 | * | ||
| 1671 | */ | ||
| 1672 | |||
| 1673 | void gfs2_free_meta(struct gfs2_inode *ip, u64 bstart, u32 blen) | ||
| 1674 | { | ||
| 1675 | struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode); | ||
| 1676 | |||
| 1677 | __gfs2_free_meta(ip, bstart, blen); | ||
| 1649 | gfs2_statfs_change(sdp, 0, +blen, 0); | 1678 | gfs2_statfs_change(sdp, 0, +blen, 0); |
| 1650 | gfs2_quota_change(ip, -(s64)blen, ip->i_inode.i_uid, ip->i_inode.i_gid); | 1679 | gfs2_quota_change(ip, -(s64)blen, ip->i_inode.i_uid, ip->i_inode.i_gid); |
| 1651 | gfs2_meta_wipe(ip, bstart, blen); | ||
| 1652 | } | 1680 | } |
| 1653 | 1681 | ||
| 1654 | void gfs2_unlink_di(struct inode *inode) | 1682 | void gfs2_unlink_di(struct inode *inode) |
