Re: [PATCH] generic/645: Confirm availability of free inodes
Ojaswin Mujoo <[email protected]> Thu, 30 Jul 2026 16:33:37 +0530
| Newsgroups | org.kernel.vger.fstests |
|---|---|
| Message-ID | <[email protected]> |
On Wed, Jul 29, 2026 at 08:44:51AM -0700, Darrick J. Wong wrote: > On Wed, Jul 29, 2026 at 11:06:57AM +0530, Ojaswin Mujoo wrote: > > On Thu, Jun 25, 2026 at 11:42:59AM -0700, Darrick J. Wong wrote: > > > On Wed, Jun 17, 2026 at 11:12:16AM +0530, Ojaswin Mujoo wrote: > > > > When running generic/645 with ext4 using 64k block size + bigalloc, the > > > > test fails with ENOSPC because the filesystem runs out of inodes before > > > > the test completes. > > > > > > > > The test creates approximately 10,001 files, however, in this particular > > > > configuration a standard 5G FS only has around ~5100 inodes resulting in > > > > the ENOSPC failure. > > > > > > > > Add a check using _get_free_inode() to verify sufficient inodes are > > > > available before running the test, else skip it. > > > > > > > > Reported-by: Disha Goel <[email protected]> > > > > Signed-off-by: Ojaswin Mujoo <[email protected]> > > > > --- > > > > tests/generic/645 | 6 ++++++ > > > > 1 file changed, 6 insertions(+) > > > > > > > > diff --git a/tests/generic/645 b/tests/generic/645 > > > > index d6eb75e6..944b33db 100755 > > > > --- a/tests/generic/645 > > > > +++ b/tests/generic/645 > > > > @@ -19,6 +19,12 @@ _require_chown > > > > _wants_kernel_commit dacfd001eaf2 \ > > > > "fs/mnt_idmapping.c: Return -EINVAL when no map is written" > > > > > > > > +_free_inodes=$(_get_free_inode $TEST_DIR) > > > > +if [ $_free_inodes -ne 0 ] && [ $_free_inodes -lt 10001 ]; then > > > > > > I'm assuming the > 0 check here is to cover weird filesystems like fat > > > that don't advertise any inodes? /me wonders if that ought to be a > > > > Hey Darrick, sorry I missed this email earlier. Yes that's the idea. I > > see there is a helper already > > > > _require_inode_limits() > > { > > if [ $(_get_free_inode $TEST_DIR) -eq 0 ]; then > > _notrun "$FSTYP does not have a fixed number of inodes available" > > fi > > } > > > > But this will end up skipping the FSes that don't have a concept of > > free inodes. > > > > > common helper where we can record that justification: > > > > > > _require_free_inodes() { > > > local path="$1" > > > local nr="$2" > > > > > > local _free_inodes=$(_get_free_inode "$path") > > > > > > # Weird filesystems like vfat don't report any inodes, so we > > > # can't check for sufficient free inodes; IOWs, FAFO. > > > test "$_free_inodes" -eq 0 && return > > > > If we do this, won't we pass the check for the case where say xfs has 0 > > free inodes. It's a rare chance IMObut still wondering if we want to > > keep that edge case open. > > > > What do you think in these options: > > - use the above check > > - use _require_free_inodes which will cause notruns on some FSes > > - Maybe have a new helper to check if FS advertises free inodes and then > > use somthing like > > > > if ! __fs_advertises_free_inodes > > return > > else > > test "$_free_inodes" -lt "$nr" && \ > > _notrun "Insufficient free inodes ($_free_inodes), need at least $nr" > > > > Hmmm. This is getting complicated, because generic tests can run on any > filesystem and we have no idea how much space an inode actually > consumes, or if the filesystem even has any real concept of inodes. > > Can we instead check the vfstest output for the ENOSPC error message and > _notrun it if that is found? Yes this sounds simple enough. The below diff works for me: diff --git a/tests/generic/645 b/tests/generic/645 index d6eb75e6..3d8ca905 100755 --- a/tests/generic/645 +++ b/tests/generic/645 @@ -22,7 +22,14 @@ _wants_kernel_commit dacfd001eaf2 \ echo "Silence is golden" $here/src/vfs/vfstest --test-nested-userns \ - --device "$TEST_DEV" --mount "$TEST_DIR" --fstype "$FSTYP" + --device "$TEST_DEV" --mount "$TEST_DIR" --fstype "$FSTYP" \ + > $tmp.vfstest 2>&1 +if grep -q "No space left on device" $tmp.vfstest; then + _notrun "No space left on device" +fi + +cat $tmp.vfstest status=$? If this looks good I cans send a formal patch. Regards, ojaswin > > --D > > > Regards, > > ojaswin > > > > > > > > test "$_free_inodes" -lt "$nr" && \ > > > _notrun "Insufficient free inodes ($_free_inodes), need at least $nr" > > > } > > > > > > > > > _require_free_inodes $TEST_DIR 10001 > > > > > > (maybe clean up the comment a bit) > > > > > > > > --D > > > > > > > + _notrun "Insufficient free inodes ($_free_inodes), need at least 10001" > > > > +fi > > > > + > > > > echo "Silence is golden" > > > > > > > > $here/src/vfs/vfstest --test-nested-userns \ > > > > -- > > > > 2.53.0 > > > > > > > > > >