On Fri, Oct 25, 2019 at 05:03:36PM +0200, Christoph Hellwig wrote: > Always set XFS_ALLOC_USERDATA for data fork allocations, and check it > in xfs_alloc_is_userdata instead of the current obsfucated check. > Also remove the xfs_alloc_is_userdata and xfs_alloc_allow_busy_reuse > helpers to make the code a little easier to understand. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> Looks ok, Reviewed-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> --D > --- > fs/xfs/libxfs/xfs_alloc.c | 8 ++++---- > fs/xfs/libxfs/xfs_alloc.h | 12 ------------ > fs/xfs/libxfs/xfs_bmap.c | 11 +++++------ > fs/xfs/xfs_extent_busy.c | 2 +- > fs/xfs/xfs_filestream.c | 2 +- > 5 files changed, 11 insertions(+), 24 deletions(-) > > diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c > index ff6454887ff3..4a6d6a1ad9f3 100644 > --- a/fs/xfs/libxfs/xfs_alloc.c > +++ b/fs/xfs/libxfs/xfs_alloc.c > @@ -331,7 +331,7 @@ xfs_alloc_compute_diff( > xfs_extlen_t newlen1=0; /* length with newbno1 */ > xfs_extlen_t newlen2=0; /* length with newbno2 */ > xfs_agblock_t wantend; /* end of target extent */ > - bool userdata = xfs_alloc_is_userdata(datatype); > + bool userdata = datatype & XFS_ALLOC_USERDATA; > > ASSERT(freelen >= wantlen); > freeend = freebno + freelen; > @@ -1041,9 +1041,9 @@ xfs_alloc_ag_vextent_small( > goto out; > > xfs_extent_busy_reuse(args->mp, args->agno, fbno, 1, > - xfs_alloc_allow_busy_reuse(args->datatype)); > + (args->datatype & XFS_ALLOC_NOBUSY)); > > - if (xfs_alloc_is_userdata(args->datatype)) { > + if (args->datatype & XFS_ALLOC_USERDATA) { > struct xfs_buf *bp; > > bp = xfs_btree_get_bufs(args->mp, args->tp, args->agno, fbno); > @@ -2380,7 +2380,7 @@ xfs_alloc_fix_freelist( > * somewhere else if we are not being asked to try harder at this > * point > */ > - if (pag->pagf_metadata && xfs_alloc_is_userdata(args->datatype) && > + if (pag->pagf_metadata && (args->datatype & XFS_ALLOC_USERDATA) && > (flags & XFS_ALLOC_FLAG_TRYLOCK)) { > ASSERT(!(flags & XFS_ALLOC_FLAG_FREEING)); > goto out_agbp_relse; > diff --git a/fs/xfs/libxfs/xfs_alloc.h b/fs/xfs/libxfs/xfs_alloc.h > index 626384d75c9c..7380fbe4a3ff 100644 > --- a/fs/xfs/libxfs/xfs_alloc.h > +++ b/fs/xfs/libxfs/xfs_alloc.h > @@ -84,18 +84,6 @@ typedef struct xfs_alloc_arg { > #define XFS_ALLOC_INITIAL_USER_DATA (1 << 1)/* special case start of file */ > #define XFS_ALLOC_NOBUSY (1 << 2)/* Busy extents not allowed */ > > -static inline bool > -xfs_alloc_is_userdata(int datatype) > -{ > - return (datatype & ~XFS_ALLOC_NOBUSY) != 0; > -} > - > -static inline bool > -xfs_alloc_allow_busy_reuse(int datatype) > -{ > - return (datatype & XFS_ALLOC_NOBUSY) == 0; > -} > - > /* freespace limit calculations */ > #define XFS_ALLOC_AGFL_RESERVE 4 > unsigned int xfs_alloc_set_aside(struct xfs_mount *mp); > diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c > index 6ec3c48abc1b..f62f66863801 100644 > --- a/fs/xfs/libxfs/xfs_bmap.c > +++ b/fs/xfs/libxfs/xfs_bmap.c > @@ -3059,7 +3059,7 @@ xfs_bmap_adjacent( > mp = ap->ip->i_mount; > nullfb = ap->tp->t_firstblock == NULLFSBLOCK; > rt = XFS_IS_REALTIME_INODE(ap->ip) && > - xfs_alloc_is_userdata(ap->datatype); > + (ap->datatype & XFS_ALLOC_USERDATA); > fb_agno = nullfb ? NULLAGNUMBER : XFS_FSB_TO_AGNO(mp, > ap->tp->t_firstblock); > /* > @@ -3412,7 +3412,7 @@ xfs_bmap_btalloc( > > if (ap->flags & XFS_BMAPI_COWFORK) > align = xfs_get_cowextsz_hint(ap->ip); > - else if (xfs_alloc_is_userdata(ap->datatype)) > + else if (ap->datatype & XFS_ALLOC_USERDATA) > align = xfs_get_extsz_hint(ap->ip); > if (align) { > error = xfs_bmap_extsize_align(mp, &ap->got, &ap->prev, > @@ -3427,7 +3427,7 @@ xfs_bmap_btalloc( > fb_agno = nullfb ? NULLAGNUMBER : XFS_FSB_TO_AGNO(mp, > ap->tp->t_firstblock); > if (nullfb) { > - if (xfs_alloc_is_userdata(ap->datatype) && > + if ((ap->datatype & XFS_ALLOC_USERDATA) && > xfs_inode_is_filestream(ap->ip)) { > ag = xfs_filestream_lookup_ag(ap->ip); > ag = (ag != NULLAGNUMBER) ? ag : 0; > @@ -3467,7 +3467,7 @@ xfs_bmap_btalloc( > * enough for the request. If one isn't found, then adjust > * the minimum allocation size to the largest space found. > */ > - if (xfs_alloc_is_userdata(ap->datatype) && > + if ((ap->datatype & XFS_ALLOC_USERDATA) && > xfs_inode_is_filestream(ap->ip)) > error = xfs_bmap_btalloc_filestreams(ap, &args, &blen); > else > @@ -4010,10 +4010,9 @@ xfs_bmap_alloc_userdata( > */ > bma->datatype = XFS_ALLOC_NOBUSY; > if (whichfork == XFS_DATA_FORK) { > + bma->datatype |= XFS_ALLOC_USERDATA; > if (bma->offset == 0) > bma->datatype |= XFS_ALLOC_INITIAL_USER_DATA; > - else > - bma->datatype |= XFS_ALLOC_USERDATA; > > if (mp->m_dalign && bma->length >= mp->m_dalign) { > error = xfs_bmap_isaeof(bma, whichfork); > diff --git a/fs/xfs/xfs_extent_busy.c b/fs/xfs/xfs_extent_busy.c > index 2183d87be4cf..3991e59cfd18 100644 > --- a/fs/xfs/xfs_extent_busy.c > +++ b/fs/xfs/xfs_extent_busy.c > @@ -367,7 +367,7 @@ xfs_extent_busy_trim( > * If this is a metadata allocation, try to reuse the busy > * extent instead of trimming the allocation. > */ > - if (!xfs_alloc_is_userdata(args->datatype) && > + if (!(args->datatype & XFS_ALLOC_USERDATA) && > !(busyp->flags & XFS_EXTENT_BUSY_DISCARDED)) { > if (!xfs_extent_busy_update_extent(args->mp, args->pag, > busyp, fbno, flen, > diff --git a/fs/xfs/xfs_filestream.c b/fs/xfs/xfs_filestream.c > index 574a7a8b4736..2ae356775f63 100644 > --- a/fs/xfs/xfs_filestream.c > +++ b/fs/xfs/xfs_filestream.c > @@ -374,7 +374,7 @@ xfs_filestream_new_ag( > startag = (item->ag + 1) % mp->m_sb.sb_agcount; > } > > - if (xfs_alloc_is_userdata(ap->datatype)) > + if (ap->datatype & XFS_ALLOC_USERDATA) > flags |= XFS_PICK_USERDATA; > if (ap->tp->t_flags & XFS_TRANS_LOWMODE) > flags |= XFS_PICK_LOWSPACE; > -- > 2.20.1 >