2020-12-02 21:43:05

by Ira Weiny

[permalink] [raw]
Subject: [PATCH] common/rc: Fix _check_s_dax()

From: Ira Weiny <[email protected]>

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/[email protected]/

Signed-off-by: Ira Weiny <[email protected]>
---

I went ahead and used Christoph's suggestion regarding using both bits.

---
common/rc | 23 ++++++++++++++++++-----
1 file changed, 18 insertions(+), 5 deletions(-)

diff --git a/common/rc b/common/rc
index b5a504e0dcb4..322e682e5239 100644
--- a/common/rc
+++ b/common/rc
@@ -3221,11 +3221,24 @@ _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"
- else
- (( attributes & 0x2000 )) || echo "$target doesn't have expected S_DAX flag"
- fi
+
+ # 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
+ if [ $exp_s_dax -ne 0 ]; then
+ echo "$target doesn't have expected S_DAX flag"
+ fi
+ fi
}

_check_xflag()
--
2.28.0.rc0.12.gb6a658bd00c9


2020-12-03 18:10:35

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [PATCH] common/rc: Fix _check_s_dax()

On Thu, Dec 03, 2020 at 11:55:50AM -0600, Eric Sandeen wrote:
> *nod* and my suggestion was to explicitly test for the old/wrong value and
> offer the test-runner a hint about why it may have been set (missing the
> fix commit), but we should still ultimately fail the test when it is seen.

Yes, that's what I'd prefer.

2020-12-04 01:47:02

by Ira Weiny

[permalink] [raw]
Subject: Re: [PATCH] common/rc: Fix _check_s_dax()

On Thu, Dec 03, 2020 at 07:08:39PM +0100, Christoph Hellwig wrote:
> On Thu, Dec 03, 2020 at 11:55:50AM -0600, Eric Sandeen wrote:
> > *nod* and my suggestion was to explicitly test for the old/wrong value and
> > offer the test-runner a hint about why it may have been set (missing the
> > fix commit), but we should still ultimately fail the test when it is seen.
>
> Yes, that's what I'd prefer.

Sorry for the misunderstanding. V3 on it's way.

Ira