[LTP] quotactl0{2, 3, 5, 7}.c dependency problems on older kernels

xuyang2018.jy@fujitsu.com xuyang2018.jy@fujitsu.com
Fri Mar 18 10:26:12 CET 2022


Hi Petr
> Hi Xu,
>
>> Hi Petr
>>> Hi Xu,
>
>>> actually quotactl0{2,3,5,7}.c and quotactl03.c fail on only on v4.5:
>
>>> tst_kconfig.c:82: TINFO: Parsing kernel config '/.config'
>>> tst_device.c:88: TINFO: Found free device 0 '/dev/loop0'
>>> tst_test.c:996: TINFO: Formatting /dev/loop0 with xfs opts='' extra opts=''
>>> [  271.093416] XFS (loop0): Superblock has unknown read-only compatible features (0x4) enabled.
>>> [  271.096902] XFS (loop0): Attempted to mount read-only compatible filesystem read-write.
>>> [  271.100128] XFS (loop0): Filesystem can only be safely mounted read only.
>>> [  271.101852] XFS (loop0): SB validate failed with error -22.
>>> tst_test.c:1010: TBROK: mount(/dev/loop0, mntpoint, xfs, 0, 0x41d6a0) failed: EINVAL (22)
>> That is because you use a newer xfsprogs (it provides newer mkfs.xfs and
>> enable reflink feature by default[1]). But older kernel can't regcozine
>> this feature bits[2](it supports reflink feature bits since kernel
>> 4.9-rc1), then mount failed.
>
>> [1]https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git/commit/?id=ec1b42e6d58dcb7cfc5de6fc825832944997e176
>> [2]https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit?id=f0ec1b8ef11df0a51954df7e3ff3ca4aadb0d34b
>
>> I don't think this is a problem, user should know its kernel version
>> and xfsprogs vesion. Linux distribution has sloved this well except you
>> used yourself compiled kernel.
>
> TL;DR: Understand and we can stop debugging to not waste time.
>
> Giving userspace tool needs to match kernel brings extra barrier when bisecting
> in the history :). I suppose there is no list to match these (actually it'd be
> better to ask on linux-xfs). I'd have to experiment with slightly older ones -
> I'm using mkfs.xfs 5.14.2 from openSUSE Tumbleweed (i.e. latest stable).
>
>>> Tested on config:
>>> grep -e QUOTA -e QFMT /.config
>>> CONFIG_XFS_QUOTA=y
>>> CONFIG_QUOTA=y
>>> CONFIG_QUOTA_NETLINK_INTERFACE=y
>>> # CONFIG_PRINT_QUOTA_WARNING is not set
>>> # CONFIG_QUOTA_DEBUG is not set
>>> CONFIG_QUOTA_TREE=y
>>> # CONFIG_QFMT_V1 is not set
>>> CONFIG_QFMT_V2=y
>>> CONFIG_QUOTACTL=y
>>> CONFIG_QUOTACTL_COMPAT=y
>
>>> But not work either on v4.10:
>>> [  299.235456] XFS (loop0): EXPERIMENTAL reflink feature enabled. Use at your own risk!
>>> [  299.239463] XFS (loop0): Mounting V5 Filesystem
>>> [  299.240950] XFS (loop0): Log size 1368 blocks too small, minimum size is 1580 blocks
>> In xfstests, we use -lsize parameter[3] or use a value then get the
>> correct value from error log[4]. reflink feature will increase log
>> size[5], so we can disable reflink feature by using mkfs.xfs -m
>> reflink=0 /dev/loop0 (it also need mkfs.xfs support, so we may need a
>> mkfs.xfs cmd version check[5], if meet this version, use mkfs.xfs -m
>> reflink=0, if less than this version, we can ignore this version and
>> don't use mkfs.xfs extra option).
>
>> Firstly, can you try mkfs.xfs -m reflink=0 way whether fix these  two
>> problems?
>
> Yes, adding .dev_fs_opts:
> @@ -84,6 +88,12 @@ static struct tst_test test = {
>          .test_all = verify_quota,
>          .format_device = 1,
>          .dev_fs_type = "xfs",
> +       .dev_fs_opts = (const char *const[]){
> +               "-m",
> +               "reflink=0",
> +               NULL,
> +       },
> +
>
> ... helps to quotactl0{2,3,5,7}.c helps to all:
>
> quotactl0{2,3,5}.c TPASS/TCONF:
> tst_test.c:996: TINFO: Formatting /dev/loop0 with xfs opts='-m reflink=0' extra opts=''
> [   55.193262] XFS (loop0): Mounting V5 Filesystem
> [   55.197574] XFS (loop0): Ending clean mount
> [   55.199560] XFS (loop0): Quotacheck needed: Please wait.
> [   55.202735] XFS (loop0): Quotacheck: Done.
> tst_test.c:1456: TINFO: Timeout per run is 0h 05m 00s
> quotactl_syscall_var.h:27: TINFO: Test quotactl()
> quotactl02.c:119: TINFO: Test #0: QCMD(Q_XGETQSTAT, USRQUOTA) off
> quotactl02.h:64: TPASS: quotactl() succeeded to turn off xfs quota and get xfs quota off status for user
> ...
> ../../../../include/lapi/quotactl.h:18: TCONF: syscall(443) __NR_quotactl_fd not supported on your arch
>
> quotactl07.c fails on Q_XQUOTARM, but that's correct (missing 3dd4d40b4208 from v5.5)
>
> tst_test.c:996: TINFO: Formatting /dev/loop0 with xfs opts='-m reflink=0' extra opts=''
> ...
> quotactl07.c:37: TPASS: do_quotactl(Q_XQUOTARM,valid_type) passed
> quotactl07.c:41: TPASS: Q_XQUOTARM to free space, delta(1)
> quotactl07.c:45: TFAIL: do_quotactl(Q_XQUOTARM, invalid_type) succeeded
> [  116.407282] XFS (loop0): Unmounting Filesystem
> tst_test.c:1456: TINFO: Timeout per run is 0h 05m 00s
> ...
> ../../../../include/lapi/quotactl.h:18: TCONF: syscall(443) __NR_quotactl_fd not supported on your arch
>
> =>  not sure if we want to add this "-m reflink=0" to these tests (into
> quotactl_syscall_var.h, which they all use).
xfsprogs supports -m reflink after 2016.10, some old distributions 
xfsprogs doesn't support it ie centos7.9ga.

So if we add this, it will TCONF on these old linux distributions.

I think we need a mkfs.xfs wrapper in quotactl_syscall_var.h, this 
wrapper does the following thing:
1. mkfs.xfs -m reflink=0 succeed then return
2. mkfs.xfs -m reflink=0 failed then use mkfs.xfs to format, then return


ps:Another way is using MKFS_OPTIONS environment like xfstests, then we 
can refer to filesytem type to get value ie xfs MKFS_OPTIONS gets from 
XFS_MKFS_OPTIONS[1]. so the style of a complete mkfs option in case is 
that XFS_MKFS_OPTIONS + dev_fs_opts. But the former way is simple and 
enough to fix.

[1]https://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git/tree/common/config#n420

Best Regards
Yang Xu
>
> Kind regards,
> Petr
>
>> [3]https://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git/commit/?id=7e07c4bebb08414ca8228ea91bdf57828fd4d110
>> [4]https://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git/tree/common/xfs#n81
>> [5]https://git.kernel.org/pub/scm/fs/xfs/xfsprogs-dev.git/commit/?id=a5132d9b3634fb6436d1f06642ceda82e64ea2f5
>
>> Best Regards
>> Yang Xu


More information about the ltp mailing list