On Fri, May 23, 2014 at 10:03:44AM +1000, Dave Chinner wrote: > From: Dave Chinner <dchinner@xxxxxxxxxx> > > Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> > --- Reviewed-by: Brian Foster <bfoster@xxxxxxxxxx> > fs/xfs/xfs_bmap.c | 3 ++- > fs/xfs/xfs_da_btree.c | 24 ++++++++---------------- > fs/xfs/xfs_dir2.c | 5 ++--- > fs/xfs/xfs_dir2_leaf.c | 4 ++-- > fs/xfs/xfs_dir2_readdir.c | 16 ++++++++-------- > fs/xfs/xfs_mount.h | 1 - > fs/xfs/xfs_symlink.c | 1 + > fs/xfs/xfs_trans_resv.c | 1 + > fs/xfs/xfs_trans_space.h | 5 +++-- > 9 files changed, 27 insertions(+), 33 deletions(-) > > diff --git a/fs/xfs/xfs_bmap.c b/fs/xfs/xfs_bmap.c > index 1ff0da6..96175df 100644 > --- a/fs/xfs/xfs_bmap.c > +++ b/fs/xfs/xfs_bmap.c > @@ -1098,10 +1098,11 @@ xfs_bmap_add_attrfork_local( > > if (S_ISDIR(ip->i_d.di_mode)) { > memset(&dargs, 0, sizeof(dargs)); > + dargs.geo = ip->i_mount->m_dir_geo; > dargs.dp = ip; > dargs.firstblock = firstblock; > dargs.flist = flist; > - dargs.total = ip->i_mount->m_dirblkfsbs; > + dargs.total = dargs.geo->fsbcount; > dargs.whichfork = XFS_DATA_FORK; > dargs.trans = tp; > return xfs_dir2_sf_to_block(&dargs); > diff --git a/fs/xfs/xfs_da_btree.c b/fs/xfs/xfs_da_btree.c > index 8621202..4d0a1e8 100644 > --- a/fs/xfs/xfs_da_btree.c > +++ b/fs/xfs/xfs_da_btree.c > @@ -2090,20 +2090,12 @@ xfs_da_grow_inode( > xfs_dablk_t *new_blkno) > { > xfs_fileoff_t bno; > - int count; > int error; > > trace_xfs_da_grow_inode(args); > > - if (args->whichfork == XFS_DATA_FORK) { > - bno = args->geo->leafblk; > - count = args->dp->i_mount->m_dirblkfsbs; > - } else { > - bno = 0; > - count = 1; > - } > - > - error = xfs_da_grow_inode_int(args, &bno, count); > + bno = args->geo->leafblk; > + error = xfs_da_grow_inode_int(args, &bno, args->geo->fsbcount); > if (!error) > *new_blkno = (xfs_dablk_t)bno; > return error; > @@ -2170,7 +2162,7 @@ xfs_da3_swap_lastblock( > /* > * Read the last block in the btree space. > */ > - last_blkno = (xfs_dablk_t)lastoff - mp->m_dirblkfsbs; > + last_blkno = (xfs_dablk_t)lastoff - args->geo->fsbcount; > error = xfs_da3_node_read(tp, dp, last_blkno, -1, &last_buf, w); > if (error) > return error; > @@ -2357,10 +2349,7 @@ xfs_da_shrink_inode( > w = args->whichfork; > tp = args->trans; > mp = dp->i_mount; > - if (w == XFS_DATA_FORK) > - count = mp->m_dirblkfsbs; > - else > - count = 1; > + count = args->geo->fsbcount; > for (;;) { > /* > * Remove extents. If we get ENOSPC for a dir we have to move > @@ -2479,7 +2468,10 @@ xfs_dabuf_map( > ASSERT(map && *map); > ASSERT(*nmaps == 1); > > - nfsb = (whichfork == XFS_DATA_FORK) ? mp->m_dirblkfsbs : 1; > + if (whichfork == XFS_DATA_FORK) > + nfsb = mp->m_dir_geo->fsbcount; > + else > + nfsb = mp->m_attr_geo->fsbcount; > > /* > * Caller doesn't have a mapping. -2 means don't complain > diff --git a/fs/xfs/xfs_dir2.c b/fs/xfs/xfs_dir2.c > index fc09a11..200c9c4 100644 > --- a/fs/xfs/xfs_dir2.c > +++ b/fs/xfs/xfs_dir2.c > @@ -146,7 +146,6 @@ xfs_da_mount( > > /* XXX: these are to be removed as code is converted to use geo */ > mp->m_dirblksize = mp->m_dir_geo->blksize; > - mp->m_dirblkfsbs = mp->m_dir_geo->fsbcount; > mp->m_dir_node_ents = mp->m_dir_geo->node_ents; > mp->m_dir_magicpct = mp->m_dir_geo->magicpct; > mp->m_attr_node_ents = mp->m_attr_geo->node_ents; > @@ -620,7 +619,7 @@ xfs_dir2_grow_inode( > * Set lowest possible block in the space requested. > */ > bno = XFS_B_TO_FSBT(mp, space * XFS_DIR2_SPACE_SIZE); > - count = mp->m_dirblkfsbs; > + count = args->geo->fsbcount; > > error = xfs_da_grow_inode_int(args, &bno, count); > if (error) > @@ -711,7 +710,7 @@ xfs_dir2_shrink_inode( > /* > * Unmap the fsblock(s). > */ > - if ((error = xfs_bunmapi(tp, dp, da, mp->m_dirblkfsbs, > + if ((error = xfs_bunmapi(tp, dp, da, args->geo->fsbcount, > XFS_BMAPI_METADATA, 0, args->firstblock, args->flist, > &done))) { > /* > diff --git a/fs/xfs/xfs_dir2_leaf.c b/fs/xfs/xfs_dir2_leaf.c > index 3eb8b24..a1f1310 100644 > --- a/fs/xfs/xfs_dir2_leaf.c > +++ b/fs/xfs/xfs_dir2_leaf.c > @@ -1715,7 +1715,7 @@ xfs_dir2_node_to_leaf( > if ((error = xfs_bmap_last_offset(dp, &fo, XFS_DATA_FORK))) { > return error; > } > - fo -= mp->m_dirblkfsbs; > + fo -= args->geo->fsbcount; > /* > * If there are freespace blocks other than the first one, > * take this opportunity to remove trailing empty freespace blocks > @@ -1727,7 +1727,7 @@ xfs_dir2_node_to_leaf( > return error; > } > if (rval) > - fo -= mp->m_dirblkfsbs; > + fo -= args->geo->fsbcount; > else > return 0; > } > diff --git a/fs/xfs/xfs_dir2_readdir.c b/fs/xfs/xfs_dir2_readdir.c > index 0c8c09c..8cb5340 100644 > --- a/fs/xfs/xfs_dir2_readdir.c > +++ b/fs/xfs/xfs_dir2_readdir.c > @@ -314,12 +314,12 @@ xfs_dir2_leaf_readbuf( > if (bp) { > xfs_trans_brelse(NULL, bp); > bp = NULL; > - mip->map_blocks -= mp->m_dirblkfsbs; > + mip->map_blocks -= geo->fsbcount; > /* > * Loop to get rid of the extents for the > * directory block. > */ > - for (i = mp->m_dirblkfsbs; i > 0; ) { > + for (i = geo->fsbcount; i > 0; ) { > j = min_t(int, map->br_blockcount, i); > map->br_blockcount -= j; > map->br_startblock += j; > @@ -410,7 +410,7 @@ xfs_dir2_leaf_readbuf( > */ > mip->curdb = xfs_dir2_da_to_db(geo, map->br_startoff); > error = xfs_dir3_data_read(NULL, dp, map->br_startoff, > - map->br_blockcount >= mp->m_dirblkfsbs ? > + map->br_blockcount >= geo->fsbcount ? > XFS_FSB_TO_DADDR(mp, map->br_startblock) : -1, &bp); > > /* > @@ -424,7 +424,7 @@ xfs_dir2_leaf_readbuf( > * was previously ra. > */ > if (mip->ra_current) > - mip->ra_current -= mp->m_dirblkfsbs; > + mip->ra_current -= geo->fsbcount; > > /* > * Do we need more readahead? > @@ -432,13 +432,13 @@ xfs_dir2_leaf_readbuf( > blk_start_plug(&plug); > for (mip->ra_index = mip->ra_offset = i = 0; > mip->ra_want > mip->ra_current && i < mip->map_blocks; > - i += mp->m_dirblkfsbs) { > + i += geo->fsbcount) { > ASSERT(mip->ra_index < mip->map_valid); > /* > * Read-ahead a contiguous directory block. > */ > if (i > mip->ra_current && > - map[mip->ra_index].br_blockcount >= mp->m_dirblkfsbs) { > + map[mip->ra_index].br_blockcount >= geo->fsbcount) { > xfs_dir3_data_readahead(dp, > map[mip->ra_index].br_startoff + mip->ra_offset, > XFS_FSB_TO_DADDR(mp, > @@ -461,12 +461,12 @@ xfs_dir2_leaf_readbuf( > /* > * Advance offset through the mapping table. > */ > - for (j = 0; j < mp->m_dirblkfsbs; j += length ) { > + for (j = 0; j < geo->fsbcount; j += length ) { > /* > * The rest of this extent but not more than a dir > * block. > */ > - length = min_t(int, mp->m_dirblkfsbs, > + length = min_t(int, geo->fsbcount, > map[mip->ra_index].br_blockcount - > mip->ra_offset); > mip->ra_offset += length; > diff --git a/fs/xfs/xfs_mount.h b/fs/xfs/xfs_mount.h > index 264e210..275fed3 100644 > --- a/fs/xfs/xfs_mount.h > +++ b/fs/xfs/xfs_mount.h > @@ -155,7 +155,6 @@ typedef struct xfs_mount { > const struct xfs_dir_ops *m_dir_inode_ops; /* vector of dir inode ops */ > const struct xfs_dir_ops *m_nondir_inode_ops; /* !dir inode ops */ > int m_dirblksize; /* directory block sz--bytes */ > - int m_dirblkfsbs; /* directory block sz--fsbs */ > uint m_chsize; /* size of next field */ > atomic_t m_active_trans; /* number trans frozen */ > #ifdef HAVE_PERCPU_SB > diff --git a/fs/xfs/xfs_symlink.c b/fs/xfs/xfs_symlink.c > index 0816b40..d69363c 100644 > --- a/fs/xfs/xfs_symlink.c > +++ b/fs/xfs/xfs_symlink.c > @@ -27,6 +27,7 @@ > #include "xfs_ag.h" > #include "xfs_mount.h" > #include "xfs_da_format.h" > +#include "xfs_da_btree.h" > #include "xfs_dir2.h" > #include "xfs_inode.h" > #include "xfs_ialloc.h" > diff --git a/fs/xfs/xfs_trans_resv.c b/fs/xfs/xfs_trans_resv.c > index 52b6c3e..63a42a1 100644 > --- a/fs/xfs/xfs_trans_resv.c > +++ b/fs/xfs/xfs_trans_resv.c > @@ -26,6 +26,7 @@ > #include "xfs_ag.h" > #include "xfs_mount.h" > #include "xfs_da_format.h" > +#include "xfs_da_btree.h" > #include "xfs_inode.h" > #include "xfs_bmap_btree.h" > #include "xfs_ialloc.h" > diff --git a/fs/xfs/xfs_trans_space.h b/fs/xfs/xfs_trans_space.h > index df4c1f8..bf9c457 100644 > --- a/fs/xfs/xfs_trans_space.h > +++ b/fs/xfs/xfs_trans_space.h > @@ -28,7 +28,8 @@ > (((b + XFS_MAX_CONTIG_EXTENTS_PER_BLOCK(mp) - 1) / \ > XFS_MAX_CONTIG_EXTENTS_PER_BLOCK(mp)) * \ > XFS_EXTENTADD_SPACE_RES(mp,w)) > -#define XFS_DAENTER_1B(mp,w) ((w) == XFS_DATA_FORK ? (mp)->m_dirblkfsbs : 1) > +#define XFS_DAENTER_1B(mp,w) \ > + ((w) == XFS_DATA_FORK ? (mp)->m_dir_geo->fsbcount : 1) > #define XFS_DAENTER_DBS(mp,w) \ > (XFS_DA_NODE_MAXDEPTH + (((w) == XFS_DATA_FORK) ? 2 : 0)) > #define XFS_DAENTER_BLOCKS(mp,w) \ > @@ -55,7 +56,7 @@ > * Space reservation values for various transactions. > */ > #define XFS_ADDAFORK_SPACE_RES(mp) \ > - ((mp)->m_dirblkfsbs + XFS_DAENTER_BMAP1B(mp, XFS_DATA_FORK)) > + ((mp)->m_dir_geo->fsbcount + XFS_DAENTER_BMAP1B(mp, XFS_DATA_FORK)) > #define XFS_ATTRRM_SPACE_RES(mp) \ > XFS_DAREMOVE_SPACE_RES(mp, XFS_ATTR_FORK) > /* This macro is not used - see inline code in xfs_attr_set */ > -- > 1.9.0 > > _______________________________________________ > xfs mailing list > xfs@xxxxxxxxxxx > http://oss.sgi.com/mailman/listinfo/xfs _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs