xfs: refactor accounting updates out of xfs_bmap_btalloc
Move all the inode and quota accounting updates out of xfs_bmap_btalloc in preparation for fixing some quota accounting problems with copy on write. Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Brian Foster <bfoster@redhat.com>
This commit is contained in:
parent
22431bf3df
commit
751f3767c2
@ -3337,6 +3337,22 @@ xfs_bmap_btalloc_filestreams(
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Update all inode and quota accounting for the allocation we just did. */
|
||||||
|
static void
|
||||||
|
xfs_bmap_btalloc_accounting(
|
||||||
|
struct xfs_bmalloca *ap,
|
||||||
|
struct xfs_alloc_arg *args)
|
||||||
|
{
|
||||||
|
if (!(ap->flags & XFS_BMAPI_COWFORK))
|
||||||
|
ap->ip->i_d.di_nblocks += args->len;
|
||||||
|
xfs_trans_log_inode(ap->tp, ap->ip, XFS_ILOG_CORE);
|
||||||
|
if (ap->wasdel)
|
||||||
|
ap->ip->i_delayed_blks -= args->len;
|
||||||
|
xfs_trans_mod_dquot_byino(ap->tp, ap->ip,
|
||||||
|
ap->wasdel ? XFS_TRANS_DQ_DELBCOUNT : XFS_TRANS_DQ_BCOUNT,
|
||||||
|
args->len);
|
||||||
|
}
|
||||||
|
|
||||||
STATIC int
|
STATIC int
|
||||||
xfs_bmap_btalloc(
|
xfs_bmap_btalloc(
|
||||||
struct xfs_bmalloca *ap) /* bmap alloc argument struct */
|
struct xfs_bmalloca *ap) /* bmap alloc argument struct */
|
||||||
@ -3571,19 +3587,7 @@ xfs_bmap_btalloc(
|
|||||||
*ap->firstblock = args.fsbno;
|
*ap->firstblock = args.fsbno;
|
||||||
ASSERT(nullfb || fb_agno <= args.agno);
|
ASSERT(nullfb || fb_agno <= args.agno);
|
||||||
ap->length = args.len;
|
ap->length = args.len;
|
||||||
if (!(ap->flags & XFS_BMAPI_COWFORK))
|
xfs_bmap_btalloc_accounting(ap, &args);
|
||||||
ap->ip->i_d.di_nblocks += args.len;
|
|
||||||
xfs_trans_log_inode(ap->tp, ap->ip, XFS_ILOG_CORE);
|
|
||||||
if (ap->wasdel)
|
|
||||||
ap->ip->i_delayed_blks -= args.len;
|
|
||||||
/*
|
|
||||||
* Adjust the disk quota also. This was reserved
|
|
||||||
* earlier.
|
|
||||||
*/
|
|
||||||
xfs_trans_mod_dquot_byino(ap->tp, ap->ip,
|
|
||||||
ap->wasdel ? XFS_TRANS_DQ_DELBCOUNT :
|
|
||||||
XFS_TRANS_DQ_BCOUNT,
|
|
||||||
(long) args.len);
|
|
||||||
} else {
|
} else {
|
||||||
ap->blkno = NULLFSBLOCK;
|
ap->blkno = NULLFSBLOCK;
|
||||||
ap->length = 0;
|
ap->length = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user