On Mon, Dec 21, 2015 at 07:39:28AM +1100, Dave Chinner wrote:
> On Sat, Dec 19, 2015 at 12:56:42AM -0800, Darrick J. Wong wrote:
> > Create a macro to generate btree height calculator functions.
> > This will be used (much) later when we get to the refcount
> > btree.
> >
> > Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx>
> ....
> > +/* btree size calculator templates */
> > +#define DECLARE_BTREE_SIZE_FN(btree) \
> > +xfs_filblks_t xfs_##btree##_calc_btree_size(struct xfs_mount *mp, \
> > + unsigned long len);
> > +
> > +#define DEFINE_BTREE_SIZE_FN(btree, limitfield, maxlevels) \
> > +xfs_filblks_t \
> > +xfs_##btree##_calc_btree_size( \
> > + struct xfs_mount *mp, \
> > + unsigned long len) \
> > +{ \
> > + int level; \
> > + int maxrecs; \
> > + xfs_filblks_t rval; \
> > +\
> > + maxrecs = mp->limitfield[0]; \
> > + for (level = 0, rval = 0; level < maxlevels; level++) { \
> > + len += maxrecs - 1; \
> > + do_div(len, maxrecs); \
> > + rval += len; \
> > + if (len == 1) \
> > + return rval + maxlevels - \
> > + level - 1; \
> > + if (level == 0) \
> > + maxrecs = mp->limitfield[1]; \
> > + } \
> > + return rval; \
> > +}
>
> I really don't like using macros like this. The code becomes hard to
> debug, hard to edit, the functions don't show up in grep/cscope,
> etc.
>
> A helper function like this:
>
> xfs_filblks_t
> xfs_btree_calc_size(
> struct xfs_mount *mp,
> int *limits,
> int maxlevels,
> unsigned long len)
> {
> int level;
> int maxrecs;
> xfs_filblks_t rval;
>
> maxrecs = limits[0];
> for (level = 0, rval = 0; level < maxlevels; level++) {
> len += maxrecs - 1;
> do_div(len, maxrecs);
> rval += len;
> if (len == 1)
> return rval + maxlevels - level - 1;
> if (level == 0)
> maxrecs = limits[1];
> }
> return rval;
> }
>
> will work just as well when wrapped with the btree specific calling
> function and that will have none of the problems using a macro to
> build the functions has...
Will change to use a helper function.
--D
>
> Cheers,
>
> Dave.
> --
> Dave Chinner
> david@xxxxxxxxxxxxx
>
> _______________________________________________
> xfs mailing list
> xfs@xxxxxxxxxxx
> http://oss.sgi.com/mailman/listinfo/xfs
|