STATIC int
xfs_bmapi_allocate(
struct xfs_bmalloca *bma,
- xfs_extnum_t *lastx,
int flags,
- int *nallocs,
int *logflags)
{
struct xfs_mount *mp = bma->ip->i_mount;
if (bma->wasdel) {
bma->length = (xfs_extlen_t)bma->got.br_blockcount;
bma->offset = bma->got.br_startoff;
- if (*lastx != NULLEXTNUM && *lastx) {
- xfs_bmbt_get_all(xfs_iext_get_ext(ifp, *lastx - 1),
+ if (bma->idx != NULLEXTNUM && bma->idx) {
+ xfs_bmbt_get_all(xfs_iext_get_ext(ifp, bma->idx - 1),
&bma->prev);
}
} else {
* Bump the number of extents we've allocated
* in this call.
*/
- (*nallocs)++;
+ bma->nallocs++;
if (bma->cur)
bma->cur->bc_private.b.flags =
bma->got.br_state = XFS_EXT_UNWRITTEN;
if (bma->wasdel) {
- error = xfs_bmap_add_extent_delay_real(bma->tp, bma->ip, lastx,
- &bma->cur, &bma->got, bma->firstblock,
- bma->flist, logflags);
+ error = xfs_bmap_add_extent_delay_real(bma->tp, bma->ip,
+ &bma->idx, &bma->cur, &bma->got,
+ bma->firstblock, bma->flist, logflags);
} else {
- error = xfs_bmap_add_extent_hole_real(bma->tp, bma->ip, lastx,
- &bma->cur, &bma->got, bma->firstblock,
- bma->flist, logflags, whichfork);
+ error = xfs_bmap_add_extent_hole_real(bma->tp, bma->ip,
+ &bma->idx, &bma->cur, &bma->got,
+ bma->firstblock, bma->flist, logflags,
+ whichfork);
}
if (error)
* or xfs_bmap_add_extent_hole_real might have merged it into one of
* the neighbouring ones.
*/
- xfs_bmbt_get_all(xfs_iext_get_ext(ifp, *lastx), &bma->got);
+ xfs_bmbt_get_all(xfs_iext_get_ext(ifp, bma->idx), &bma->got);
ASSERT(bma->got.br_startoff <= bma->offset);
ASSERT(bma->got.br_startoff + bma->got.br_blockcount >=
struct xfs_bmalloca *bma,
struct xfs_bmbt_irec *mval,
xfs_filblks_t len,
- xfs_extnum_t *lastx,
int flags,
int *logflags)
{
mval->br_state = (mval->br_state == XFS_EXT_UNWRITTEN)
? XFS_EXT_NORM : XFS_EXT_UNWRITTEN;
- error = xfs_bmap_add_extent_unwritten_real(bma->tp, bma->ip, lastx,
+ error = xfs_bmap_add_extent_unwritten_real(bma->tp, bma->ip, &bma->idx,
&bma->cur, mval, bma->firstblock, bma->flist, logflags);
if (error)
return error;
* xfs_bmap_add_extent_unwritten_real might have merged it into one
* of the neighbouring ones.
*/
- xfs_bmbt_get_all(xfs_iext_get_ext(ifp, *lastx), &bma->got);
+ xfs_bmbt_get_all(xfs_iext_get_ext(ifp, bma->idx), &bma->got);
/*
* We may have combined previously unwritten space with written space,
xfs_fileoff_t end; /* end of mapped file region */
int eof; /* after the end of extents */
int error; /* error return */
- xfs_extnum_t lastx; /* last useful extent number */
int logflags; /* flags for transaction logging */
int n; /* current extent index */
- int nallocs; /* number of extents alloc'd */
xfs_fileoff_t obno; /* old block number (offset) */
int tmp_logflags; /* temp flags holder */
int whichfork; /* data or attr fork */
XFS_STATS_INC(xs_blk_mapw);
logflags = 0;
- nallocs = 0;
if (XFS_IFORK_FORMAT(ip, whichfork) == XFS_DINODE_FMT_LOCAL) {
error = xfs_bmap_local_to_extents(tp, ip, firstblock, total,
goto error0;
}
- xfs_bmap_search_extents(ip, bno, whichfork, &eof, &lastx, &bma.got,
+ xfs_bmap_search_extents(ip, bno, whichfork, &eof, &bma.idx, &bma.got,
&bma.prev);
n = 0;
end = bno + len;
bma.length = len;
bma.offset = bno;
- error = xfs_bmapi_allocate(&bma, &lastx, flags,
- &nallocs, &tmp_logflags);
+ error = xfs_bmapi_allocate(&bma, flags, &tmp_logflags);
logflags |= tmp_logflags;
if (error)
goto error0;
end, n, flags);
/* Execute unwritten extent conversion if necessary */
- error = xfs_bmapi_convert_unwritten(&bma, mval, len, &lastx,
+ error = xfs_bmapi_convert_unwritten(&bma, mval, len,
flags, &tmp_logflags);
logflags |= tmp_logflags;
if (error == EAGAIN)
* XFS_BMAP_MAX_NMAP extents no matter what. Otherwise
* the transaction may get too big.
*/
- if (bno >= end || n >= *nmap || nallocs >= *nmap)
+ if (bno >= end || n >= *nmap || bma.nallocs >= *nmap)
break;
/* Else go on to the next record. */
bma.prev = bma.got;
- if (++lastx < ifp->if_bytes / sizeof(xfs_bmbt_rec_t))
- xfs_bmbt_get_all(xfs_iext_get_ext(ifp, lastx), &bma.got);
- else
+ if (++bma.idx < ifp->if_bytes / sizeof(xfs_bmbt_rec_t)) {
+ xfs_bmbt_get_all(xfs_iext_get_ext(ifp, bma.idx),
+ &bma.got);
+ } else
eof = 1;
}
*nmap = n;