[PATCH] common/rc: teach _require_scratch_swapfile() that swap does not work with DAX

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]



The statement, "ext* and xfs have supported all variants of swap files
since their introduction, so swapon should not fail," is not quite
completely true.  In particular, swapon does not work if the DAX is
active on a swapfile, and that would be true if the file system is
mounted with -o dax.

So if swapon fails, check to see if the swapfile has the
STATX_ATTR_DAX attribute set, and if so, issue a _notrun instead of a
_fail.

Fixes: 725feeff94cc ("common/rc: swapon should not fail for given FS in _require_scratch_swapfile()")
Signed-off-by: Theodore Ts'o <tytso@xxxxxxx>
---
 common/rc | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/common/rc b/common/rc
index 0f91340f..d2fd5c5c 100644
--- a/common/rc
+++ b/common/rc
@@ -2495,8 +2495,17 @@ _require_scratch_swapfile()
 	case "$FSTYP" in
 	ext2|ext3|ext4|xfs)
 		if ! swapon "$SCRATCH_MNT/swap" >/dev/null 2>&1; then
+			local attributes=$($XFS_IO_PROG -c 'statx -r' \
+					"$SCRATCH_MNT/swap" 2>/dev/null | \
+					awk '/stat.attributes / { print $3 }')
 			_scratch_unmount
-			_fail "swapon failed for $FSTYP"
+			if test -n "$attributes" -a \
+				$((attributes & 0x00200000)) -eq $((0x00200000)) ;
+			then
+			    _notrun "DAX swapfiles are not supported"
+			else
+			    _fail "swapon failed for $FSTYP"
+			fi
 		fi
 		;;
 	*)
-- 
2.31.0




[Index of Archives]     [Linux Filesystems Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux