diff mbox series

[V2] common/rc: Fix _check_s_dax()

Message ID 20201202214629.1563760-1-ira.weiny@intel.com
State Not Applicable
Headers show
Series [V2] common/rc: Fix _check_s_dax() | expand

Commit Message

Ira Weiny Dec. 2, 2020, 9:46 p.m. UTC
From: Ira Weiny <ira.weiny@intel.com>

There is a conflict with the user visible statx bits 'mount root' and
'dax'.  The kernel is changing the dax bit to correct this conflict.[1]

Adjust _check_s_dax() to use the new bit.  Because DAX tests do not run
on root mounts, STATX_ATTR_MOUNT_ROOT should always be 0, therefore we
can allow either bit to indicate DAX and cover any kernel which may be
running.

[1] https://lore.kernel.org/lkml/3e28d2c7-fbe5-298a-13ba-dcd8fd504666@redhat.com/

Signed-off-by: Ira Weiny <ira.weiny@intel.com>
---

Changes for V2:
	Fix bad indentation whitespace.

 common/rc | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)
diff mbox series

Patch

diff --git a/common/rc b/common/rc
index b5a504e0dcb4..9418f7bc8dab 100644
--- a/common/rc
+++ b/common/rc
@@ -3221,10 +3221,23 @@  _check_s_dax()
 	local exp_s_dax=$2
 
 	local attributes=$($XFS_IO_PROG -c 'statx -r' $target | awk '/stat.attributes / { print $3 }')
-	if [ $exp_s_dax -eq 0 ]; then
-		(( attributes & 0x2000 )) && echo "$target has unexpected S_DAX flag"
+
+	# The attribute bit value, STATX_ATTR_DAX (0x2000), conflicted with
+	# STATX_ATTR_MOUNT_ROOT.  Therefore, STATX_ATTR_DAX was changed to
+	# 0x00200000.
+	#
+	# Because DAX tests do not run on root mounts, STATX_ATTR_MOUNT_ROOT
+	# should always be 0, therefore we can allow either bit to indicate DAX
+	# and cover any kernel which may be running.
+
+	if [ $(( attributes & 0x00200000 )) -ne 0 ] || [ $(( attributes & 0x2000 )) -ne 0 ]; then
+		if [ $exp_s_dax -eq 0 ]; then
+			echo "$target has unexpected S_DAX flag"
+		fi
 	else
-		(( attributes & 0x2000 )) || echo "$target doesn't have expected S_DAX flag"
+		if [ $exp_s_dax -ne 0 ]; then
+			echo "$target doesn't have expected S_DAX flag"
+		fi
 	fi
 }