|
@@ -712,19 +712,14 @@ xfs_bmap_extents_to_btree(
|
|
args.wasdel = wasdel;
|
|
args.wasdel = wasdel;
|
|
*logflagsp = 0;
|
|
*logflagsp = 0;
|
|
if ((error = xfs_alloc_vextent(&args))) {
|
|
if ((error = xfs_alloc_vextent(&args))) {
|
|
- xfs_iroot_realloc(ip, -1, whichfork);
|
|
|
|
ASSERT(ifp->if_broot == NULL);
|
|
ASSERT(ifp->if_broot == NULL);
|
|
- XFS_IFORK_FMT_SET(ip, whichfork, XFS_DINODE_FMT_EXTENTS);
|
|
|
|
- xfs_btree_del_cursor(cur, XFS_BTREE_ERROR);
|
|
|
|
- return error;
|
|
|
|
|
|
+ goto err1;
|
|
}
|
|
}
|
|
|
|
|
|
if (WARN_ON_ONCE(args.fsbno == NULLFSBLOCK)) {
|
|
if (WARN_ON_ONCE(args.fsbno == NULLFSBLOCK)) {
|
|
- xfs_iroot_realloc(ip, -1, whichfork);
|
|
|
|
ASSERT(ifp->if_broot == NULL);
|
|
ASSERT(ifp->if_broot == NULL);
|
|
- XFS_IFORK_FMT_SET(ip, whichfork, XFS_DINODE_FMT_EXTENTS);
|
|
|
|
- xfs_btree_del_cursor(cur, XFS_BTREE_ERROR);
|
|
|
|
- return -ENOSPC;
|
|
|
|
|
|
+ error = -ENOSPC;
|
|
|
|
+ goto err1;
|
|
}
|
|
}
|
|
/*
|
|
/*
|
|
* Allocation can't fail, the space was reserved.
|
|
* Allocation can't fail, the space was reserved.
|
|
@@ -736,6 +731,10 @@ xfs_bmap_extents_to_btree(
|
|
ip->i_d.di_nblocks++;
|
|
ip->i_d.di_nblocks++;
|
|
xfs_trans_mod_dquot_byino(tp, ip, XFS_TRANS_DQ_BCOUNT, 1L);
|
|
xfs_trans_mod_dquot_byino(tp, ip, XFS_TRANS_DQ_BCOUNT, 1L);
|
|
abp = xfs_btree_get_bufl(mp, tp, args.fsbno, 0);
|
|
abp = xfs_btree_get_bufl(mp, tp, args.fsbno, 0);
|
|
|
|
+ if (!abp) {
|
|
|
|
+ error = -ENOSPC;
|
|
|
|
+ goto err2;
|
|
|
|
+ }
|
|
/*
|
|
/*
|
|
* Fill in the child block.
|
|
* Fill in the child block.
|
|
*/
|
|
*/
|
|
@@ -775,6 +774,15 @@ xfs_bmap_extents_to_btree(
|
|
*curp = cur;
|
|
*curp = cur;
|
|
*logflagsp = XFS_ILOG_CORE | xfs_ilog_fbroot(whichfork);
|
|
*logflagsp = XFS_ILOG_CORE | xfs_ilog_fbroot(whichfork);
|
|
return 0;
|
|
return 0;
|
|
|
|
+
|
|
|
|
+err2:
|
|
|
|
+ xfs_trans_mod_dquot_byino(tp, ip, XFS_TRANS_DQ_BCOUNT, -1L);
|
|
|
|
+err1:
|
|
|
|
+ xfs_iroot_realloc(ip, -1, whichfork);
|
|
|
|
+ XFS_IFORK_FMT_SET(ip, whichfork, XFS_DINODE_FMT_EXTENTS);
|
|
|
|
+ xfs_btree_del_cursor(cur, XFS_BTREE_ERROR);
|
|
|
|
+
|
|
|
|
+ return error;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|