|
@@ -763,8 +763,8 @@ xfs_bmap_extents_to_btree(
|
|
args.type = XFS_ALLOCTYPE_START_BNO;
|
|
args.type = XFS_ALLOCTYPE_START_BNO;
|
|
args.fsbno = XFS_INO_TO_FSB(mp, ip->i_ino);
|
|
args.fsbno = XFS_INO_TO_FSB(mp, ip->i_ino);
|
|
} else if (dfops->dop_low) {
|
|
} else if (dfops->dop_low) {
|
|
-try_another_ag:
|
|
|
|
args.type = XFS_ALLOCTYPE_START_BNO;
|
|
args.type = XFS_ALLOCTYPE_START_BNO;
|
|
|
|
+try_another_ag:
|
|
args.fsbno = *firstblock;
|
|
args.fsbno = *firstblock;
|
|
} else {
|
|
} else {
|
|
args.type = XFS_ALLOCTYPE_NEAR_BNO;
|
|
args.type = XFS_ALLOCTYPE_NEAR_BNO;
|
|
@@ -790,13 +790,17 @@ try_another_ag:
|
|
if (xfs_sb_version_hasreflink(&cur->bc_mp->m_sb) &&
|
|
if (xfs_sb_version_hasreflink(&cur->bc_mp->m_sb) &&
|
|
args.fsbno == NULLFSBLOCK &&
|
|
args.fsbno == NULLFSBLOCK &&
|
|
args.type == XFS_ALLOCTYPE_NEAR_BNO) {
|
|
args.type == XFS_ALLOCTYPE_NEAR_BNO) {
|
|
- dfops->dop_low = true;
|
|
|
|
|
|
+ args.type = XFS_ALLOCTYPE_FIRST_AG;
|
|
goto try_another_ag;
|
|
goto try_another_ag;
|
|
}
|
|
}
|
|
|
|
+ if (WARN_ON_ONCE(args.fsbno == NULLFSBLOCK)) {
|
|
|
|
+ xfs_iroot_realloc(ip, -1, whichfork);
|
|
|
|
+ xfs_btree_del_cursor(cur, XFS_BTREE_ERROR);
|
|
|
|
+ return -ENOSPC;
|
|
|
|
+ }
|
|
/*
|
|
/*
|
|
* Allocation can't fail, the space was reserved.
|
|
* Allocation can't fail, the space was reserved.
|
|
*/
|
|
*/
|
|
- ASSERT(args.fsbno != NULLFSBLOCK);
|
|
|
|
ASSERT(*firstblock == NULLFSBLOCK ||
|
|
ASSERT(*firstblock == NULLFSBLOCK ||
|
|
args.agno >= XFS_FSB_TO_AGNO(mp, *firstblock));
|
|
args.agno >= XFS_FSB_TO_AGNO(mp, *firstblock));
|
|
*firstblock = cur->bc_private.b.firstblock = args.fsbno;
|
|
*firstblock = cur->bc_private.b.firstblock = args.fsbno;
|