forked from luck/tmp_suning_uos_patched
xfs: do not use xfs_bmap_add_extent for adding delalloc extents
We can just call xfs_bmap_add_extent_hole_delay directly to add a delayed allocated regions to the extent tree, instead of going through all the complexities of xfs_bmap_add_extent that aren't needed for this simple case. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Alex Elder <aelder@sgi.com>
This commit is contained in:
parent
4403280aa5
commit
1fd044d9c6
@ -100,17 +100,6 @@ xfs_bmap_add_extent_delay_real(
|
||||
xfs_bmap_free_t *flist, /* list of extents to be freed */
|
||||
int *logflagsp); /* inode logging flags */
|
||||
|
||||
/*
|
||||
* Called by xfs_bmap_add_extent to handle cases converting a hole
|
||||
* to a delayed allocation.
|
||||
*/
|
||||
STATIC int /* error */
|
||||
xfs_bmap_add_extent_hole_delay(
|
||||
xfs_inode_t *ip, /* incore inode pointer */
|
||||
xfs_extnum_t *idx, /* extent number to update/insert */
|
||||
xfs_bmbt_irec_t *new, /* new data to add to file extents */
|
||||
int *logflagsp); /* inode logging flags */
|
||||
|
||||
/*
|
||||
* Called by xfs_bmap_add_extent to handle cases converting a hole
|
||||
* to a real allocation.
|
||||
@ -431,8 +420,7 @@ xfs_bmap_add_attrfork_local(
|
||||
}
|
||||
|
||||
/*
|
||||
* Called by xfs_bmapi to update file extent records and the btree
|
||||
* after allocating space (or doing a delayed allocation).
|
||||
* Update file extent records and the btree after allocating space.
|
||||
*/
|
||||
STATIC int /* error */
|
||||
xfs_bmap_add_extent(
|
||||
@ -464,21 +452,12 @@ xfs_bmap_add_extent(
|
||||
|
||||
ASSERT(*idx >= 0);
|
||||
ASSERT(*idx <= nextents);
|
||||
ASSERT(!isnullstartblock(new->br_startblock));
|
||||
|
||||
/*
|
||||
* Any kind of new delayed allocation goes here.
|
||||
*/
|
||||
if (isnullstartblock(new->br_startblock)) {
|
||||
if (cur)
|
||||
ASSERT((cur->bc_private.b.flags &
|
||||
XFS_BTCUR_BPRV_WASDEL) == 0);
|
||||
error = xfs_bmap_add_extent_hole_delay(ip, idx, new,
|
||||
&logflags);
|
||||
}
|
||||
/*
|
||||
* Real allocation off the end of the file.
|
||||
*/
|
||||
else if (*idx == nextents) {
|
||||
if (*idx == nextents) {
|
||||
if (cur)
|
||||
ASSERT((cur->bc_private.b.flags &
|
||||
XFS_BTCUR_BPRV_WASDEL) == 0);
|
||||
@ -1581,16 +1560,13 @@ xfs_bmap_add_extent_unwritten_real(
|
||||
}
|
||||
|
||||
/*
|
||||
* Called by xfs_bmap_add_extent to handle cases converting a hole
|
||||
* to a delayed allocation.
|
||||
* Convert a hole to a delayed allocation.
|
||||
*/
|
||||
/*ARGSUSED*/
|
||||
STATIC int /* error */
|
||||
STATIC void
|
||||
xfs_bmap_add_extent_hole_delay(
|
||||
xfs_inode_t *ip, /* incore inode pointer */
|
||||
xfs_extnum_t *idx, /* extent number to update/insert */
|
||||
xfs_bmbt_irec_t *new, /* new data to add to file extents */
|
||||
int *logflagsp) /* inode logging flags */
|
||||
xfs_bmbt_irec_t *new) /* new data to add to file extents */
|
||||
{
|
||||
xfs_ifork_t *ifp; /* inode fork pointer */
|
||||
xfs_bmbt_irec_t left; /* left neighbor extent entry */
|
||||
@ -1725,8 +1701,6 @@ xfs_bmap_add_extent_hole_delay(
|
||||
* Nothing to do for disk quota accounting here.
|
||||
*/
|
||||
}
|
||||
*logflagsp = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -4455,9 +4429,6 @@ xfs_bmapi_reserve_delalloc(
|
||||
struct xfs_ifork *ifp = XFS_IFORK_PTR(ip, XFS_DATA_FORK);
|
||||
xfs_extlen_t alen;
|
||||
xfs_extlen_t indlen;
|
||||
xfs_fsblock_t firstblock = NULLFSBLOCK;
|
||||
struct xfs_btree_cur *cur = NULL;
|
||||
int tmp_logflags = 0;
|
||||
char rt = XFS_IS_REALTIME_INODE(ip);
|
||||
xfs_extlen_t extsz;
|
||||
int error;
|
||||
@ -4524,16 +4495,11 @@ xfs_bmapi_reserve_delalloc(
|
||||
got->br_startblock = nullstartblock(indlen);
|
||||
got->br_blockcount = alen;
|
||||
got->br_state = XFS_EXT_NORM;
|
||||
|
||||
error = xfs_bmap_add_extent(NULL, ip, lastx, &cur, got, &firstblock,
|
||||
NULL, &tmp_logflags, XFS_DATA_FORK);
|
||||
ASSERT(!error);
|
||||
ASSERT(!tmp_logflags);
|
||||
ASSERT(!cur);
|
||||
xfs_bmap_add_extent_hole_delay(ip, lastx, got);
|
||||
|
||||
/*
|
||||
* Update our extent pointer, given that xfs_bmap_add_extent might
|
||||
* have merged it into one of the neighbouring ones.
|
||||
* Update our extent pointer, given that xfs_bmap_add_extent_hole_delay
|
||||
* might have merged it into one of the neighbouring ones.
|
||||
*/
|
||||
xfs_bmbt_get_all(xfs_iext_get_ext(ifp, *lastx), got);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user