mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-27 22:53:55 +08:00
xfs: move extent zeroing to xfs_bmapi_allocate
Move the extent zeroing case there for the XFS_BMAPI_ZERO flag outside the low-level allocator and into xfs_bmapi_allocate, where is still is in transaction context, but outside the very lowlevel code where it doesn't belong. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
This commit is contained in:
parent
be6cacbeea
commit
fd638f1de1
@ -3084,13 +3084,6 @@ xfs_alloc_vextent(
|
|||||||
args->len);
|
args->len);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Zero the extent if we were asked to do so */
|
|
||||||
if (args->datatype & XFS_ALLOC_USERDATA_ZERO) {
|
|
||||||
error = xfs_zero_extent(args->ip, args->fsbno, args->len);
|
|
||||||
if (error)
|
|
||||||
goto error0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
xfs_perag_put(args->pag);
|
xfs_perag_put(args->pag);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -54,7 +54,6 @@ typedef struct xfs_alloc_arg {
|
|||||||
struct xfs_mount *mp; /* file system mount point */
|
struct xfs_mount *mp; /* file system mount point */
|
||||||
struct xfs_buf *agbp; /* buffer for a.g. freelist header */
|
struct xfs_buf *agbp; /* buffer for a.g. freelist header */
|
||||||
struct xfs_perag *pag; /* per-ag struct for this agno */
|
struct xfs_perag *pag; /* per-ag struct for this agno */
|
||||||
struct xfs_inode *ip; /* for userdata zeroing method */
|
|
||||||
xfs_fsblock_t fsbno; /* file system block number */
|
xfs_fsblock_t fsbno; /* file system block number */
|
||||||
xfs_agnumber_t agno; /* allocation group number */
|
xfs_agnumber_t agno; /* allocation group number */
|
||||||
xfs_agblock_t agbno; /* allocation group-relative block # */
|
xfs_agblock_t agbno; /* allocation group-relative block # */
|
||||||
@ -83,8 +82,7 @@ typedef struct xfs_alloc_arg {
|
|||||||
*/
|
*/
|
||||||
#define XFS_ALLOC_USERDATA (1 << 0)/* allocation is for user data*/
|
#define XFS_ALLOC_USERDATA (1 << 0)/* allocation is for user data*/
|
||||||
#define XFS_ALLOC_INITIAL_USER_DATA (1 << 1)/* special case start of file */
|
#define XFS_ALLOC_INITIAL_USER_DATA (1 << 1)/* special case start of file */
|
||||||
#define XFS_ALLOC_USERDATA_ZERO (1 << 2)/* zero extent on allocation */
|
#define XFS_ALLOC_NOBUSY (1 << 2)/* Busy extents not allowed */
|
||||||
#define XFS_ALLOC_NOBUSY (1 << 3)/* Busy extents not allowed */
|
|
||||||
|
|
||||||
static inline bool
|
static inline bool
|
||||||
xfs_alloc_is_userdata(int datatype)
|
xfs_alloc_is_userdata(int datatype)
|
||||||
|
@ -3518,8 +3518,6 @@ xfs_bmap_btalloc(
|
|||||||
args.wasdel = ap->wasdel;
|
args.wasdel = ap->wasdel;
|
||||||
args.resv = XFS_AG_RESV_NONE;
|
args.resv = XFS_AG_RESV_NONE;
|
||||||
args.datatype = ap->datatype;
|
args.datatype = ap->datatype;
|
||||||
if (ap->datatype & XFS_ALLOC_USERDATA_ZERO)
|
|
||||||
args.ip = ap->ip;
|
|
||||||
|
|
||||||
error = xfs_alloc_vextent(&args);
|
error = xfs_alloc_vextent(&args);
|
||||||
if (error)
|
if (error)
|
||||||
@ -3974,8 +3972,6 @@ xfs_bmap_alloc_userdata(
|
|||||||
* the busy list.
|
* the busy list.
|
||||||
*/
|
*/
|
||||||
bma->datatype = XFS_ALLOC_NOBUSY;
|
bma->datatype = XFS_ALLOC_NOBUSY;
|
||||||
if (bma->flags & XFS_BMAPI_ZERO)
|
|
||||||
bma->datatype |= XFS_ALLOC_USERDATA_ZERO;
|
|
||||||
if (whichfork == XFS_DATA_FORK) {
|
if (whichfork == XFS_DATA_FORK) {
|
||||||
if (bma->offset == 0)
|
if (bma->offset == 0)
|
||||||
bma->datatype |= XFS_ALLOC_INITIAL_USER_DATA;
|
bma->datatype |= XFS_ALLOC_INITIAL_USER_DATA;
|
||||||
@ -4034,6 +4030,12 @@ xfs_bmapi_allocate(
|
|||||||
if (error || bma->blkno == NULLFSBLOCK)
|
if (error || bma->blkno == NULLFSBLOCK)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
|
if (bma->flags & XFS_BMAPI_ZERO) {
|
||||||
|
error = xfs_zero_extent(bma->ip, bma->blkno, bma->length);
|
||||||
|
if (error)
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
if ((ifp->if_flags & XFS_IFBROOT) && !bma->cur)
|
if ((ifp->if_flags & XFS_IFBROOT) && !bma->cur)
|
||||||
bma->cur = xfs_bmbt_init_cursor(mp, bma->tp, bma->ip, whichfork);
|
bma->cur = xfs_bmbt_init_cursor(mp, bma->tp, bma->ip, whichfork);
|
||||||
/*
|
/*
|
||||||
|
@ -165,13 +165,6 @@ xfs_bmap_rtalloc(
|
|||||||
xfs_trans_mod_dquot_byino(ap->tp, ap->ip,
|
xfs_trans_mod_dquot_byino(ap->tp, ap->ip,
|
||||||
ap->wasdel ? XFS_TRANS_DQ_DELRTBCOUNT :
|
ap->wasdel ? XFS_TRANS_DQ_DELRTBCOUNT :
|
||||||
XFS_TRANS_DQ_RTBCOUNT, (long) ralen);
|
XFS_TRANS_DQ_RTBCOUNT, (long) ralen);
|
||||||
|
|
||||||
/* Zero the extent if we were asked to do so */
|
|
||||||
if (ap->datatype & XFS_ALLOC_USERDATA_ZERO) {
|
|
||||||
error = xfs_zero_extent(ap->ip, ap->blkno, ap->length);
|
|
||||||
if (error)
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
ap->length = 0;
|
ap->length = 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user