Message ID | 20170413080517.12564-8-hch@lst.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Apr 13, 2017 at 10:05:14AM +0200, Christoph Hellwig wrote: > minleft counts the number of blocks that need to be available after the > current allocation has been completed. As the total allocation should not > be more than the transaction reservation we need to subtract the > allocation length. In addition we need to subtract the already used > transaction reservation, for that use the new xfs_trans_blk_res helper. > > Signed-off-by: Christoph Hellwig <hch@lst.de> > --- Reviewed-by: Brian Foster <bfoster@redhat.com> > fs/xfs/libxfs/xfs_bmap_btree.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/fs/xfs/libxfs/xfs_bmap_btree.c b/fs/xfs/libxfs/xfs_bmap_btree.c > index ce41dd5fbb34..153c969febd4 100644 > --- a/fs/xfs/libxfs/xfs_bmap_btree.c > +++ b/fs/xfs/libxfs/xfs_bmap_btree.c > @@ -442,6 +442,7 @@ xfs_bmbt_alloc_block( > args.mp = cur->bc_mp; > args.fsbno = cur->bc_private.b.firstblock; > args.firstblock = args.fsbno; > + args.minlen = args.maxlen = args.prod = 1; > xfs_rmap_ino_bmbt_owner(&args.oinfo, cur->bc_private.b.ip->i_ino, > cur->bc_private.b.whichfork); > > @@ -459,14 +460,14 @@ xfs_bmbt_alloc_block( > * reservation amount is insufficient then we may fail a > * block allocation here and corrupt the filesystem. > */ > - args.minleft = args.tp->t_blk_res; > + if (xfs_trans_blk_res(args.tp)) > + args.minleft = xfs_trans_blk_res(args.tp) - args.maxlen; > } else if (cur->bc_private.b.dfops->dop_low) { > args.type = XFS_ALLOCTYPE_START_BNO; > } else { > args.type = XFS_ALLOCTYPE_NEAR_BNO; > } > > - args.minlen = args.maxlen = args.prod = 1; > args.wasdel = cur->bc_private.b.flags & XFS_BTCUR_BPRV_WASDEL; > if (!args.wasdel && args.tp->t_blk_res == 0) { > error = -ENOSPC; > -- > 2.11.0 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-xfs" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/fs/xfs/libxfs/xfs_bmap_btree.c b/fs/xfs/libxfs/xfs_bmap_btree.c index ce41dd5fbb34..153c969febd4 100644 --- a/fs/xfs/libxfs/xfs_bmap_btree.c +++ b/fs/xfs/libxfs/xfs_bmap_btree.c @@ -442,6 +442,7 @@ xfs_bmbt_alloc_block( args.mp = cur->bc_mp; args.fsbno = cur->bc_private.b.firstblock; args.firstblock = args.fsbno; + args.minlen = args.maxlen = args.prod = 1; xfs_rmap_ino_bmbt_owner(&args.oinfo, cur->bc_private.b.ip->i_ino, cur->bc_private.b.whichfork); @@ -459,14 +460,14 @@ xfs_bmbt_alloc_block( * reservation amount is insufficient then we may fail a * block allocation here and corrupt the filesystem. */ - args.minleft = args.tp->t_blk_res; + if (xfs_trans_blk_res(args.tp)) + args.minleft = xfs_trans_blk_res(args.tp) - args.maxlen; } else if (cur->bc_private.b.dfops->dop_low) { args.type = XFS_ALLOCTYPE_START_BNO; } else { args.type = XFS_ALLOCTYPE_NEAR_BNO; } - args.minlen = args.maxlen = args.prod = 1; args.wasdel = cur->bc_private.b.flags & XFS_BTCUR_BPRV_WASDEL; if (!args.wasdel && args.tp->t_blk_res == 0) { error = -ENOSPC;
minleft counts the number of blocks that need to be available after the current allocation has been completed. As the total allocation should not be more than the transaction reservation we need to subtract the allocation length. In addition we need to subtract the already used transaction reservation, for that use the new xfs_trans_blk_res helper. Signed-off-by: Christoph Hellwig <hch@lst.de> --- fs/xfs/libxfs/xfs_bmap_btree.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)