mirror of https://gitee.com/openkylin/linux.git
xfs: use new extent lookup helpers in __xfs_bunmapi
Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Brian Foster <bfoster@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
parent
2d58f6ef79
commit
7efc794561
|
@ -5430,8 +5430,6 @@ __xfs_bunmapi(
|
|||
{
|
||||
xfs_btree_cur_t *cur; /* bmap btree cursor */
|
||||
xfs_bmbt_irec_t del; /* extent being deleted */
|
||||
int eof; /* is deleting at eof */
|
||||
xfs_bmbt_rec_host_t *ep; /* extent record pointer */
|
||||
int error; /* error return value */
|
||||
xfs_extnum_t extno; /* extent number in list */
|
||||
xfs_bmbt_irec_t got; /* current extent record */
|
||||
|
@ -5441,7 +5439,6 @@ __xfs_bunmapi(
|
|||
int logflags; /* transaction logging flags */
|
||||
xfs_extlen_t mod; /* rt extent offset */
|
||||
xfs_mount_t *mp; /* mount structure */
|
||||
xfs_bmbt_irec_t prev; /* previous extent record */
|
||||
xfs_fileoff_t start; /* first file offset deleted */
|
||||
int tmp_logflags; /* partial logging flags */
|
||||
int wasdel; /* was a delayed alloc extent */
|
||||
|
@ -5480,18 +5477,17 @@ __xfs_bunmapi(
|
|||
isrt = (whichfork == XFS_DATA_FORK) && XFS_IS_REALTIME_INODE(ip);
|
||||
start = bno;
|
||||
bno = start + len - 1;
|
||||
ep = xfs_bmap_search_extents(ip, bno, whichfork, &eof, &lastx, &got,
|
||||
&prev);
|
||||
|
||||
/*
|
||||
* Check to see if the given block number is past the end of the
|
||||
* file, back up to the last block if so...
|
||||
*/
|
||||
if (eof) {
|
||||
ep = xfs_iext_get_ext(ifp, --lastx);
|
||||
xfs_bmbt_get_all(ep, &got);
|
||||
if (!xfs_iext_lookup_extent(ip, ifp, bno, &lastx, &got)) {
|
||||
ASSERT(lastx > 0);
|
||||
xfs_iext_get_extent(ifp, --lastx, &got);
|
||||
bno = got.br_startoff + got.br_blockcount - 1;
|
||||
}
|
||||
|
||||
logflags = 0;
|
||||
if (ifp->if_flags & XFS_IFBROOT) {
|
||||
ASSERT(XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_BTREE);
|
||||
|
@ -5522,8 +5518,7 @@ __xfs_bunmapi(
|
|||
if (got.br_startoff > bno) {
|
||||
if (--lastx < 0)
|
||||
break;
|
||||
ep = xfs_iext_get_ext(ifp, lastx);
|
||||
xfs_bmbt_get_all(ep, &got);
|
||||
xfs_iext_get_extent(ifp, lastx, &got);
|
||||
}
|
||||
/*
|
||||
* Is the last block of this extent before the range
|
||||
|
@ -5537,7 +5532,6 @@ __xfs_bunmapi(
|
|||
* Then deal with the (possibly delayed) allocated space
|
||||
* we found.
|
||||
*/
|
||||
ASSERT(ep != NULL);
|
||||
del = got;
|
||||
wasdel = isnullstartblock(del.br_startblock);
|
||||
if (got.br_startoff < start) {
|
||||
|
@ -5618,15 +5612,12 @@ __xfs_bunmapi(
|
|||
*/
|
||||
ASSERT(bno >= del.br_blockcount);
|
||||
bno -= del.br_blockcount;
|
||||
if (got.br_startoff > bno) {
|
||||
if (--lastx >= 0) {
|
||||
ep = xfs_iext_get_ext(ifp,
|
||||
lastx);
|
||||
xfs_bmbt_get_all(ep, &got);
|
||||
}
|
||||
}
|
||||
if (got.br_startoff > bno && --lastx >= 0)
|
||||
xfs_iext_get_extent(ifp, lastx, &got);
|
||||
continue;
|
||||
} else if (del.br_state == XFS_EXT_UNWRITTEN) {
|
||||
struct xfs_bmbt_irec prev;
|
||||
|
||||
/*
|
||||
* This one is already unwritten.
|
||||
* It must have a written left neighbor.
|
||||
|
@ -5634,8 +5625,7 @@ __xfs_bunmapi(
|
|||
* try again.
|
||||
*/
|
||||
ASSERT(lastx > 0);
|
||||
xfs_bmbt_get_all(xfs_iext_get_ext(ifp,
|
||||
lastx - 1), &prev);
|
||||
xfs_iext_get_extent(ifp, lastx - 1, &prev);
|
||||
ASSERT(prev.br_state == XFS_EXT_NORM);
|
||||
ASSERT(!isnullstartblock(prev.br_startblock));
|
||||
ASSERT(del.br_startblock ==
|
||||
|
@ -5733,13 +5723,9 @@ __xfs_bunmapi(
|
|||
*/
|
||||
if (bno != (xfs_fileoff_t)-1 && bno >= start) {
|
||||
if (lastx >= 0) {
|
||||
ep = xfs_iext_get_ext(ifp, lastx);
|
||||
if (xfs_bmbt_get_startoff(ep) > bno) {
|
||||
if (--lastx >= 0)
|
||||
ep = xfs_iext_get_ext(ifp,
|
||||
lastx);
|
||||
}
|
||||
xfs_bmbt_get_all(ep, &got);
|
||||
xfs_iext_get_extent(ifp, lastx, &got);
|
||||
if (got.br_startoff > bno && --lastx >= 0)
|
||||
xfs_iext_get_extent(ifp, lastx, &got);
|
||||
}
|
||||
extno++;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue