提交 0d045540 编写于 作者: C Christoph Hellwig 提交者: Darrick J. Wong

xfs: treat idx as a cursor in xfs_bmap_add_extent_delay_real

Stop poking before and after the index and just increment or decrement
it while doing our operations on it to prepare for a new extent list
implementation.
Signed-off-by: NChristoph Hellwig <hch@lst.de>
Reviewed-by: NBrian Foster <bfoster@redhat.com>
Reviewed-by: NDarrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: NDarrick J. Wong <darrick.wong@oracle.com>
上级 bf99971c
...@@ -1648,12 +1648,13 @@ xfs_bmap_add_extent_delay_real( ...@@ -1648,12 +1648,13 @@ xfs_bmap_add_extent_delay_real(
* Filling in all of a previously delayed allocation extent. * Filling in all of a previously delayed allocation extent.
* The left and right neighbors are both contiguous with new. * The left and right neighbors are both contiguous with new.
*/ */
bma->idx--;
LEFT.br_blockcount += PREV.br_blockcount + RIGHT.br_blockcount; LEFT.br_blockcount += PREV.br_blockcount + RIGHT.br_blockcount;
xfs_iext_update_extent(bma->ip, state, bma->idx, &LEFT);
xfs_iext_remove(bma->ip, bma->idx + 1, 2, state); xfs_iext_remove(bma->ip, bma->idx, 2, state);
bma->idx--;
xfs_iext_update_extent(bma->ip, state, bma->idx, &LEFT);
(*nextents)--; (*nextents)--;
if (bma->cur == NULL) if (bma->cur == NULL)
rval = XFS_ILOG_CORE | XFS_ILOG_DEXT; rval = XFS_ILOG_CORE | XFS_ILOG_DEXT;
else { else {
...@@ -1681,13 +1682,13 @@ xfs_bmap_add_extent_delay_real( ...@@ -1681,13 +1682,13 @@ xfs_bmap_add_extent_delay_real(
* Filling in all of a previously delayed allocation extent. * Filling in all of a previously delayed allocation extent.
* The left neighbor is contiguous, the right is not. * The left neighbor is contiguous, the right is not.
*/ */
bma->idx--;
old = LEFT; old = LEFT;
LEFT.br_blockcount += PREV.br_blockcount; LEFT.br_blockcount += PREV.br_blockcount;
xfs_iext_remove(bma->ip, bma->idx, 1, state);
bma->idx--;
xfs_iext_update_extent(bma->ip, state, bma->idx, &LEFT); xfs_iext_update_extent(bma->ip, state, bma->idx, &LEFT);
xfs_iext_remove(bma->ip, bma->idx + 1, 1, state);
if (bma->cur == NULL) if (bma->cur == NULL)
rval = XFS_ILOG_DEXT; rval = XFS_ILOG_DEXT;
else { else {
...@@ -1709,9 +1710,12 @@ xfs_bmap_add_extent_delay_real( ...@@ -1709,9 +1710,12 @@ xfs_bmap_add_extent_delay_real(
*/ */
PREV.br_startblock = new->br_startblock; PREV.br_startblock = new->br_startblock;
PREV.br_blockcount += RIGHT.br_blockcount; PREV.br_blockcount += RIGHT.br_blockcount;
bma->idx++;
xfs_iext_remove(bma->ip, bma->idx, 1, state);
bma->idx--;
xfs_iext_update_extent(bma->ip, state, bma->idx, &PREV); xfs_iext_update_extent(bma->ip, state, bma->idx, &PREV);
xfs_iext_remove(bma->ip, bma->idx + 1, 1, state);
if (bma->cur == NULL) if (bma->cur == NULL)
rval = XFS_ILOG_DEXT; rval = XFS_ILOG_DEXT;
else { else {
...@@ -1763,12 +1767,14 @@ xfs_bmap_add_extent_delay_real( ...@@ -1763,12 +1767,14 @@ xfs_bmap_add_extent_delay_real(
startblockval(PREV.br_startblock)); startblockval(PREV.br_startblock));
LEFT.br_blockcount += new->br_blockcount; LEFT.br_blockcount += new->br_blockcount;
xfs_iext_update_extent(bma->ip, state, bma->idx - 1, &LEFT);
PREV.br_blockcount = temp; PREV.br_blockcount = temp;
PREV.br_startoff += new->br_blockcount; PREV.br_startoff += new->br_blockcount;
PREV.br_startblock = nullstartblock(da_new); PREV.br_startblock = nullstartblock(da_new);
xfs_iext_update_extent(bma->ip, state, bma->idx, &PREV); xfs_iext_update_extent(bma->ip, state, bma->idx, &PREV);
bma->idx--;
xfs_iext_update_extent(bma->ip, state, bma->idx, &LEFT);
if (bma->cur == NULL) if (bma->cur == NULL)
rval = XFS_ILOG_DEXT; rval = XFS_ILOG_DEXT;
...@@ -1783,7 +1789,6 @@ xfs_bmap_add_extent_delay_real( ...@@ -1783,7 +1789,6 @@ xfs_bmap_add_extent_delay_real(
goto done; goto done;
} }
bma->idx--;
break; break;
case BMAP_LEFT_FILLING: case BMAP_LEFT_FILLING:
...@@ -1836,7 +1841,6 @@ xfs_bmap_add_extent_delay_real( ...@@ -1836,7 +1841,6 @@ xfs_bmap_add_extent_delay_real(
RIGHT.br_startoff = new->br_startoff; RIGHT.br_startoff = new->br_startoff;
RIGHT.br_startblock = new->br_startblock; RIGHT.br_startblock = new->br_startblock;
RIGHT.br_blockcount += new->br_blockcount; RIGHT.br_blockcount += new->br_blockcount;
xfs_iext_update_extent(bma->ip, state, bma->idx + 1, &RIGHT);
if (bma->cur == NULL) if (bma->cur == NULL)
rval = XFS_ILOG_DEXT; rval = XFS_ILOG_DEXT;
...@@ -1857,9 +1861,10 @@ xfs_bmap_add_extent_delay_real( ...@@ -1857,9 +1861,10 @@ xfs_bmap_add_extent_delay_real(
PREV.br_blockcount = temp; PREV.br_blockcount = temp;
PREV.br_startblock = nullstartblock(da_new); PREV.br_startblock = nullstartblock(da_new);
xfs_iext_update_extent(bma->ip, state, bma->idx, &PREV);
xfs_iext_update_extent(bma->ip, state, bma->idx, &PREV);
bma->idx++; bma->idx++;
xfs_iext_update_extent(bma->ip, state, bma->idx, &RIGHT);
break; break;
case BMAP_RIGHT_FILLING: case BMAP_RIGHT_FILLING:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册