Re: [PATCH V4 06/16] xfs: Promote xfs_extnum_t and xfs_aextnum_t to 64 and 32-bits respectively

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Jan 06, 2022 at 12:33:25PM +0530, Chandan Babu R wrote:
> On 05 Jan 2022 at 22:51, Darrick J. Wong wrote:
> > On Wed, Jan 05, 2022 at 07:44:23PM +0530, Chandan Babu R wrote:
> >> On 05 Jan 2022 at 05:24, Darrick J. Wong wrote:
> >> > On Wed, Dec 15, 2021 at 02:49:48PM +0530, Chandan Babu R wrote:
> >> >> On 14 Dec 2021 at 20:45, kernel test robot wrote:
> >> >> > Hi Chandan,
> >> >> >
> >> >> > Thank you for the patch! Yet something to improve:
> >> >> >
> >> >> > [auto build test ERROR on xfs-linux/for-next]
> >> >> > [also build test ERROR on v5.16-rc5]
> >> >> > [If your patch is applied to the wrong git tree, kindly drop us a note.
> >> >> > And when submitting patch, we suggest to use '--base' as documented in
> >> >> > https://git-scm.com/docs/git-format-patch]
> >> >> >
> >> >> > url:    https://github.com/0day-ci/linux/commits/Chandan-Babu-R/xfs-Extend-per-inode-extent-counters/20211214-164920
> >> >> > base:   https://git.kernel.org/pub/scm/fs/xfs/xfs-linux.git for-next
> >> >> > config: microblaze-randconfig-r016-20211214 (https://download.01.org/0day-ci/archive/20211214/202112142335.O3Nu0vQI-lkp@xxxxxxxxx/config)
> >> >> > compiler: microblaze-linux-gcc (GCC) 11.2.0
> >> >> > reproduce (this is a W=1 build):
> >> >> >         wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> >> >> >         chmod +x ~/bin/make.cross
> >> >> >         # https://github.com/0day-ci/linux/commit/db28da144803c4262c0d8622d736a7d20952ef6b
> >> >> >         git remote add linux-review https://github.com/0day-ci/linux
> >> >> >         git fetch --no-tags linux-review Chandan-Babu-R/xfs-Extend-per-inode-extent-counters/20211214-164920
> >> >> >         git checkout db28da144803c4262c0d8622d736a7d20952ef6b
> >> >> >         # save the config file to linux build tree
> >> >> >         mkdir build_dir
> >> >> >         COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross O=build_dir ARCH=microblaze SHELL=/bin/bash
> >> >> >
> >> >> > If you fix the issue, kindly add following tag as appropriate
> >> >> > Reported-by: kernel test robot <lkp@xxxxxxxxx>
> >> >> >
> >> >> > All errors (new ones prefixed by >>):
> >> >> >
> >> >> >    microblaze-linux-ld: fs/xfs/libxfs/xfs_bmap.o: in function `xfs_bmap_compute_maxlevels':
> >> >> >>> (.text+0x10cc0): undefined reference to `__udivdi3'
> >> >> >
> >> >> 
> >> >> The fix for the compilation error on 32-bit systems involved invoking do_div()
> >> >> instead of using the regular division operator. I will include the fix in the
> >> >> next version of the patchset.
> >> >
> >> > So, uh, how did you resolve this in the end?
> >> >
> >> > 	maxblocks = roundup_64(maxleafents, minleafrecs);
> >> >
> >> > and
> >> >
> >> > 	maxblocks = roundup_64(maxblocks, minnodrecs);
> >> >
> >> > ?
> >> 
> >> I had made the following changes,
> >> 
> >> 	maxblocks = maxleafents + minleafrecs - 1;
> >> 	do_div(maxblocks, minleafrecs);
> >> 
> >> and
> >> 	maxblocks += minnoderecs - 1;
> >> 	do_div(maxblocks, minnoderecs);
> >> 
> >> roundup_64() would cause maxleafents to have a value >= its previous value
> >> right?
> 
> Sorry, I meant to say "The result of roundup_64(maxleafents, minleafrecs) will
> be >= than maxleafents".
> 
> The original statement was,
> maxblocks = (maxleafents + minleafrecs - 1) / minleafrecs;
> i.e. maxblocks would contain the number of leaf blocks required to hold
> maxleafents number of records.
> 
> With maxleafents = 2^48, minleafrecs = minnoderecs = 125,
> "maxblocks = (maxleafents + minleafrecs - 1) / minleafrecs" would result in,
> maxblocks = (2^48 + 125 - 1) / 125
>           = ~2^41
> 
> >
> > roundup_64 doesn't alter its parameters, if I'm not mistaken:
> >
> > static inline uint64_t roundup_64(uint64_t x, uint32_t y)
> > {
> > 	x += y - 1;
> > 	do_div(x, y);
> > 	return x * y;
> > }
> >
>           
> A call to roundup_64(maxleafents, minleafrecs) would result in,
> x = 2^48 + 125 - 1
> x = do_div((2^48 + 125 - 1), 125) = ~2^41
> x = 2^41 * 125 = ~2^48
> 
> i.e. maxblocks will not have the number of required leaf blocks.

Arrrgh.  I meant to say "howmany_64", not "roundup_64".  Sorry for
wasting everybody's time. :(

static inline uint64_t howmany_64(uint64_t x, uint32_t y)
{
	x += y - 1;
	do_div(x, y);
	return x;	// <-- we don't multiply by (y)
}

--D

> -- 
> chandan



[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux