common: Fix mismatched output from standard mkswap

With older util-linux(e.g. v2.17.2), running some tests(e.g.
generic/472, generic/495) got the following output:
-------------------------------------------------------
+mkswap: /mnt/xfstests/scratch/swap: warning: don't erase bootbits sectors
+        on whole disk. Use -f to force.
+mkswap: unable to relabel /mnt/xfstests/scratch/swap to system_u:object_r:swapfile_t:s0: Operation not supported
-------------------------------------------------------

1) Before commit c1f1b30 of util-linux, standard mkswap didn't zap bootbits
   sectors and printed a warning until force option(i.e. -f) was given.  We
   define "mkswap -f" as MKSWAP_PROG and replace all standard mkswap with
   $MKSWAP_PROG.

2) With mounting default SELinux context(e.g. system_u:object_r:root_t:s0),
   standard mkswap tried to reset the type of default context to swapfile_t
   if it is not swapfile_t, and then it failed and returned ENOTSUP expectedly
   as we don't want to create any SELinux attr on purpose.  standard mkswap
   ignored this relabel error by commit d97dc0e of util-linux, but it still
   reported the error before commit d97dc0e.  We try to skip the reset step
   in standard mkswap by mounting swapfile context directly.

Note:
We just mount swapfile context in related tests, and keep default context
in the rest of tests.

[Eryu: make mkswap a non-mandatory requirement and add comments on
"-f" option]

Signed-off-by: Xiao Yang <yangx.jy@cn.fujitsu.com>
Reviewed-by: Eryu Guan <guaneryu@gmail.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
This commit is contained in:
Xiao Yang
2018-12-21 17:33:28 +08:00
committed by Eryu Guan
parent 7fc034868d
commit 03f550bd49
4 changed files with 21 additions and 3 deletions
+14 -1
View File
@@ -2210,15 +2210,28 @@ _format_swapfile() {
# Swap files must be nocow on Btrfs.
$CHATTR_PROG +C "$fname" > /dev/null 2>&1
_pwrite_byte 0x61 0 "$sz" "$fname" >> $seqres.full
mkswap "$fname" >> $seqres.full
$MKSWAP_PROG "$fname" >> $seqres.full
}
# Check that the filesystem supports swapfiles
_require_scratch_swapfile()
{
_require_scratch
_require_command "$MKSWAP_PROG" "mkswap"
_scratch_mkfs >/dev/null
# With mounting SELinux context(e.g. system_u:object_r:root_t:s0),
# standard mkswap tried to reset the type of default context to
# swapfile_t if it's not swapfile_t, and then it failed and returned
# ENOTSUP expectedly as we don't want to create any SELinux attr on
# purpose. standard mkswap ignored this relabel error by commit
# d97dc0e of util-linux, but it still reported the error before
# commit d97dc0e. We mount swapfile context directly to skip the
# reset step.
[ -n "$SELINUX_MOUNT_OPTIONS" ] && export \
SELINUX_MOUNT_OPTIONS="-o context=system_u:object_r:swapfile_t:s0"
_scratch_mount
# Minimum size for mkswap is 10 pages