[LTP] [PATCH 1/4] libswap: add known swap supported fs check

Petr Vorel pvorel@suse.cz
Mon Jan 22 11:57:34 CET 2024


> On Mon, Jan 22, 2024 at 5:03 PM Petr Vorel <pvorel@suse.cz> wrote:

> > Hi Li, Cyril,

> > > This introduce an enhancement to the library's is_swap_supported
> > > function to check for filesystem compatibility before attempting
> > > to create and enable a swap file.  A list of supported filesystems
> > > is added (ext2, ext3, ext4, xfs, vfat, exfat, ntfs), and a check
> > > against this list is performed to ensure that the swap operations
> > > are only attempted on known compatible filesystems.

> > > If the make_swapfile function fails, the error handling is now
> > > more descriptive: it distinguishes between failures due to the
> > > filesystem not supporting swap files and other types of failures.
> > > Similarly, when attempting to enable the swap file with swapon,
> > > the patch ensures that clearer error messages are provided in
> > > cases where the operation is not supported by the filesystem.

> > > Signed-off-by: Li Wang <liwang@redhat.com>
> > > ---
> > >  libs/libltpswap/libswap.c | 33 ++++++++++++++++++++++++++-------
> > >  1 file changed, 26 insertions(+), 7 deletions(-)

> > > diff --git a/libs/libltpswap/libswap.c b/libs/libltpswap/libswap.c
> > > index 13610709e..623f2fb3c 100644
> > > --- a/libs/libltpswap/libswap.c
> > > +++ b/libs/libltpswap/libswap.c
> > > @@ -12,6 +12,17 @@
> > >  #include "libswap.h"
> > >  #include "lapi/syscalls.h"

> > > +static const char *const swap_supported_fs[] = {
> > > +     "ext2",
> > > +     "ext3",
> > > +     "ext4",
> > > +     "xfs",
> > > +     "vfat",
> > > +     "exfat",
> > > +     "ntfs",
> > > +     NULL
> > > +};
> > > +
> > >  /*
> > >   * Make a swap file
> > >   */
> > > @@ -40,23 +51,31 @@ int make_swapfile(const char *swapfile, int safe)
> > >   */
> > >  void is_swap_supported(const char *filename)
> > >  {
> > > +     int i, sw_support = 0;
> > >       int fibmap = tst_fibmap(filename);
> > Just a note unrelated to this patchset. When testing on SLES kernel based
> > on
> > 5.3.18 we still get TCONF due missing FIBMAP ioctl support:

> > tst_test.c:1669: TINFO: === Testing on btrfs ===
> > tst_test.c:1118: TINFO: Formatting /dev/loop0 with btrfs opts='' extra
> > opts=''
> > tst_test.c:1132: TINFO: Mounting /dev/loop0 to /tmp/LTP_swazaqF1L/mntpoint
> > fstyp=btrfs flags=0
> > tst_ioctl.c:21: TINFO: FIBMAP ioctl is NOT supported: EINVAL (22)
> > libswap.c:45: TINFO: FS_NOCOW_FL attribute set on mntpoint/swapfile01

> > libswap.c:114: TCONF: Swapfile on btrfs not implemented


> Interesting, can you try with the below command manually to see if swapfile
> is supported correctly on the BTRFS?
> "cut from man 5 btrfs"

>           # truncate -s 0 swapfile
>           # chattr +C swapfile
>           # fallocate -l 2G swapfile
>           # chmod 0600 swapfile
>           # mkswap swapfile
>           # swapon swapfile

It works (tested on openSUSE Tumbleweed with 6.6.11 which also reported FIBMAP
ioctl is NOT supported), on file created with:

dd if=/dev/zero of=swapfile bs=400M count=1

# swapon -s
Filename				Type		Size		Used		Priority
/dev/vda3                               partition	2098152		34148		-2
/root/swapfile                          file		2097148		0		-3

# df -hT .
Filesystem     Type   Size  Used Avail Use% Mounted on
/dev/vda2      btrfs   28G   21G  1.4G  95% /root

Kind regards,
Petr

> > Am I wrong or could it be solved with FIEMAP (<linux/fiemap.h>)?
> > If yes, I wonder if we should fallback on btrfs when FIBMAP is missing

> > https://www.kernel.org/doc/Documentation/filesystems/fiemap.txt

> > https://unix.stackexchange.com/questions/623859/how-do-you-find-the-physical-offset-for-a-file-in-btrfs

> > Kind regards,
> > Petr


More information about the ltp mailing list