LTP: swapon/off: 16K and 64K page size libswap.c:230: TFAIL: swapon() on fuse failed: EINVAL (22)

From: Naresh Kamboju

Date: Tue Sep 30 2025 - 06:40:02 EST


LTP syscalls swapon01, swapon02, swapon03, swapoff01 and swapoff02 test failing
on 16K and 64K page arm64 devices and passed with default 4K page size.

These failures are noticed on Linux next and mainline master (v6.17).

This test failed on 16K page size builds and 64K page size builds.
* CONFIG_ARM64_64K_PAGES=y
* CONFIG_ARM64_16K_PAGES=y

First seen on next-20250821
Good: next-20250820
Bad: next-20250821 ..next-20250929

Regression Analysis:
- New regression? yes
- Reproducibility? yes

Test regression: LTP swapon/off 16K and 64K page size LTP
libswap.c:230: TFAIL: swapon() on fuse failed: EINVAL (22)

Reported-by: Linux Kernel Functional Testing <lkft@xxxxxxxxxx>

Anders, bisected this on the Linux next and found the,
# first bad commit:
[bd24d2108e9c8459d2c9f3d6d910b0053887df57]
fuse: fix fuseblk i_blkbits for iomap partial writes

## Test logs
### swapon01

libswap.c:230: TFAIL: swapon() on fuse failed: EINVAL (22)
swapon01.c:39: TINFO: create a swapfile size of 128 megabytes (MB)
swapon01.c:25: TFAIL: tst_syscall(__NR_swapon, SWAP_FILE, 0) failed: EINVAL (22)

### swapon02

Windows will not be able to boot from this device.
tst_test.c:1229: TINFO: Mounting /dev/loop0 to
/tmp/LTP_swaybkEDa/mntpoint fstyp=ntfs flags=0
tst_test.c:1229: TINFO: Trying FUSE...
libswap.c:198: TINFO: create a swapfile size of 1 megabytes (MB)
tst_ioctl.c:26: TINFO: FIBMAP ioctl is supported
libswap.c:230: TFAIL: swapon() on fuse failed: EINVAL (22)
swapon02.c:52: TINFO: create a swapfile size of 1 megabytes (MB)
swapon02.c:53: TINFO: create a swapfile size of 1 megabytes (MB)
swapon02.c:56: TWARN: swapon(alreadyused) failed: EINVAL (22)
swapon02.c:73: TPASS: swapon(2) fail with Path does not exist : ENOENT (2)
swapon02.c:73: TPASS: swapon(2) fail with Invalid path : EINVAL (22)
swapon02.c:73: TPASS: swapon(2) fail with Permission denied : EPERM (1)
swapon02.c:73: TFAIL: swapon(2) fail with File already used expected
EBUSY: EINVAL (22)

### swapon03

tst_ioctl.c:26: TINFO: FIBMAP ioctl is supported
libswap.c:230: TFAIL: swapon() on fuse failed: EINVAL (22)
tst_kconfig.c:88: TINFO: Parsing kernel config '/proc/config.gz'
tst_kconfig.c:88: TINFO: Parsing kernel config '/proc/config.gz'
tst_kconfig.c:88: TINFO: Parsing kernel config '/proc/config.gz'
tst_kconfig.c:88: TINFO: Parsing kernel config '/proc/config.gz'
swapon03.c:51: TINFO: create a swapfile size of 1 megabytes (MB)
swapon03.c:54: TFAIL: swapon(filename, 0) failed: EINVAL (22)
swapon03.c:51: TINFO: create a swapfile size of 1 megabytes (MB)
swapon03.c:54: TFAIL: swapon(filename, 0) failed: EINVAL (22)
swapon03.c:51: TINFO: create a swapfile size of 1 megabytes (MB)
swapon03.c:54: TFAIL: swapon(filename, 0) failed: EINVAL (22)

### swapoff01

libswap.c:230: TFAIL: swapon() on fuse failed: EINVAL (22)
swapoff01.c:44: TINFO: create a swapfile with 65536 block numbers
swapoff01.c:44: TCONF: Insufficient disk space to create swap file
tst_test.c:1888: TINFO: === Testing on tmpfs ===
tst_test.c:1217: TINFO: Skipping mkfs for TMPFS filesystem
tst_test.c:1193: TINFO: Limiting tmpfs size to 350MB
tst_test.c:1229: TINFO: Mounting ltp-tmpfs to
/tmp/LTP_swahnekXb/mntpoint fstyp=tmpfs flags=0
libswap.c:198: TINFO: create a swapfile size of 1 megabytes (MB)
tst_ioctl.c:21: TINFO: FIBMAP ioctl is NOT supported: EINVAL (22)
libswap.c:228: TCONF: Swapfile on tmpfs not implemented
Summary:
passed 0
failed 1
broken 0
skipped 7

### swapoff02

st_ioctl.c:26: TINFO: FIBMAP ioctl is supported
libswap.c:230: TFAIL: swapon() on fuse failed: EINVAL (22)
swapoff02.c:88: TINFO: create a swapfile size of 1 megabytes (MB)
swapoff02.c:53: TPASS: swapoff(2) expected failure; Got errno - ENOENT
: path does not exist
swapoff02.c:53: TPASS: swapoff(2) expected failure; Got errno - EINVAL
: Invalid file
swapoff02.c:53: TPASS: swapoff(2) expected failure; Got errno - EPERM
: Permission denied
tst_test.c:1888: TINFO: === Testing on tmpfs ===
tst_test.c:1217: TINFO: Skipping mkfs for TMPFS filesystem
tst_test.c:1193: TINFO: Limiting tmpfs size to 32MB
tst_test.c:1229: TINFO: Mounting ltp-tmpfs to
/tmp/LTP_swaXbUs2F/mntpoint fstyp=tmpfs flags=0
libswap.c:198: TINFO: create a swapfile size of 1 megabytes (MB)
tst_ioctl.c:21: TINFO: FIBMAP ioctl is NOT supported: EINVAL (22)
libswap.c:228: TCONF: Swapfile on tmpfs not implemented
Summary:
passed 18
failed 1
broken 0
skipped 1

Here I am sharing mainline tree and logs.

## Source
* Kernel version: 6.17.0
* Git tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
* Git describe: v6.17
* Git commit: e5f0a698b34ed76002dc5cff3804a61c80233a7a
* Architectures: arm64
* Toolchains: gcc-13
* Kconfigs: lkftconfig+CONFIG_ARM64_64K_PAGES=y
* Kconfigs: lkftconfig+CONFIG_ARM64_16K_PAGES=y

## Build
* Test log arm64: https://qa-reports.linaro.org/api/testruns/30048876/log_file/
* Test log LAVA: https://lkft.validation.linaro.org/scheduler/job/8468115#L28598
* Test details:
https://regressions.linaro.org/lkft/linux-mainline-master/v6.17/ltp-syscalls/swapon03/
* Build plan: https://tuxapi.tuxsuite.com/v1/groups/linaro/projects/lkft/tests/33LezR2rctMs0EwZpyIDqRhU7s4
* Build link: https://storage.tuxsuite.com/public/linaro/lkft/builds/33Ley5LZz1crQhBtb1KXJMuS2GB/
* Kernel config:
https://storage.tuxsuite.com/public/linaro/lkft/builds/33Ley5LZz1crQhBtb1KXJMuS2GB/config

--
Linaro LKFT