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@intel.com/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 >> >> > >> >> > 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. -- chandan