Skip to contentSkip to conversation

add test for DAX MAP_SYNC support

PATCH Superseded Ross Zwisler 3 participants 11 messages Dec 6, 2017 – Dec 10, 2017 libnvdimm: non-volatile memory device

lore
Share & tools
lore
#0 lore raw

v5 cover add test for DAX MAP_SYNC support

This is the fifth revision of my xfstest adding a test for the new mmap() MAP_SYNC flag. The previous version can be found here:

https://lists.01.org/pipermail/linux-nvdimm/2017-November/013329.html

Changes since v4:
- Test for dm-log-writes + DAX support in the spirit of _require_scratch_dax() instead of relying on specific module version number. (Eryu)

- Print out the missing mark name in the error output of _log_writes_replay_log(). (Eryu)

- Go back to using the output from "du -sh" to test our file block allocations. The "stat -c %s" I was using in v4 was broken if the file existed and only had partial block allocations, and the number of blocks reported by "stat -c %b" can vary based on the block size.

- Move the test number to 999 to avoid rebasing collisions. Feel free to renumber as necessary when merging.

I've updated the links at the bottom of this mail to point to the most recent version of my xfsprogs changes and to the current version of this series.

---

The purpose of this series is to exercise the new MAP_SYNC mmap() functionality [1]. It adds a test which uses dm-log-writes to try and replay filesystem metadata operations for a file that is being written via mmap().

If MAP_SYNC is active the dm-log-writes replay will recreate the file's block allocations and you'll end up with a test file which is a known size.

If MAP_SYNC is not active the metadata writes will most likely be lost and the replay will either fail to create the test file at all or it will may be smaller. In all of my testing the file simply doesn't exist on the replay if MAP_SYNC is ommited.

This test relies on a kernel with both the MAP_SYNC mmap() functionality and the DAX enabling in dm-log-writes. These both appear in kernel v4.15-rc*. For ease of testing I've posted a kernel that is v4.14 plus just those two patch series [2].

This test also relies on xfsprogs having support for MAP_SYNC and for dm-log-writes. I've posed a tree adding that support [3]. This xfsprogs series is still under review so if the xfs_io interfaces change this test will of course need to be updated as well.

Lastly, I've also posted a working version of this series [4].

[1]: https://lists.01.org/pipermail/linux-nvdimm/2017-November/013164.html
[2]: https://git.kernel.org/pub/scm/linux/kernel/git/zwisler/linux.git/log/?h=map_sync_dm_log_writes
[3]: https://git.kernel.org/pub/scm/linux/kernel/git/zwisler/xfsprogs-dev.git/log/?h=map_sync_v2
[4]: https://git.kernel.org/pub/scm/linux/kernel/git/zwisler/xfstests-dev.git/log/?h=map_sync_test_v5

Ross Zwisler (2):
dm-log-writes: only replay log to marks that exist
generic: add test for DAX MAP_SYNC support

 common/dmlogwrites    | 24 +++++++++++++++
 tests/generic/999     | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/generic/999.out |  3 ++
 tests/generic/group   |  1 +
 4 files changed, 110 insertions(+)
 create mode 100755 tests/generic/999
 create mode 100644 tests/generic/999.out
Signature · 6 lines
2.14.3

_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm
#1 lore raw

PATCH v5 1/2 dm-log-writes: only replay log to marks that exist

The 'replay-log' executable will replay the dm-log-writes log until the given mark, or until the end of the log if the mark isn't found.

This means that if the mark you're looking for was never inserted in the log or if you give garbage to _log_writes_replay_log() the entire log will be replayed. This can cause unexpected test results.

Fix this by making sure that the mark we're given actually exists in the log before we allow the replay.

---
 common/dmlogwrites | 4 ++++
 1 file changed, 4 insertions(+)
common/dmlogwrites +4 -0
index 247c7442..05829dbc 100644
@@ -72,6 +72,10 @@ _log_writes_replay_log()
 {
 	_mark=$1
 
+	$here/src/log-writes/replay-log --log $LOGWRITES_DEV --find \
+		--end-mark $_mark >> $seqres.full 2>&1
+	[ $? -ne 0 ] && _fail "mark '$_mark' does not exist"
+
 	$here/src/log-writes/replay-log --log $LOGWRITES_DEV --replay $SCRATCH_DEV \
 		--end-mark $_mark >> $seqres.full 2>&1
 	[ $? -ne 0 ] && _fail "replay failed"
Signature · 6 lines
2.14.3

_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm
#2 lore raw

Re: [fstests PATCH v5 1/2] dm-log-writes: only replay log to marks that exist

Quoted 7 lines · Ross Zwisler

The 'replay-log' executable will replay the dm-log-writes log until the given mark, or until the end of the log if the mark isn't found.

This means that if the mark you're looking for was never inserted in the log or if you give garbage to _log_writes_replay_log() the entire log will be replayed. This can cause unexpected test results.

Quoted 5 lines

Fix this by making sure that the mark we're given actually exists in the log before we allow the replay.

---

Looks good.

Amir.
_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm

#3 lore raw

PATCH v5 2/2 generic: add test for DAX MAP_SYNC support

In reply to Ross Zwisler

This test creates a file and writes to it via an mmap(), but never syncs via fsync/msync. This process is tracked via dm-log-writes, then replayed.

If MAP_SYNC is working the dm-log-writes replay will show the test file with 1 MiB of on-media block allocations. This is because each allocating page fault included an implicit metadata sync. If MAP_SYNC isn't working (which you can test by removing the "-S" flag to xfs_io mmap) the file will be smaller or missing entirely.

Note that dm-log-writes doesn't track the data that we write via the mmap(), so we can't do any data integrity checking. We can only verify that the metadata writes for the page faults happened.

---
 common/dmlogwrites    | 20 +++++++++++++
 tests/generic/999     | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/generic/999.out |  3 ++
 tests/generic/group   |  1 +
 4 files changed, 106 insertions(+)
 create mode 100755 tests/generic/999
 create mode 100644 tests/generic/999.out
common/dmlogwrites +20 -0
index 05829dbc..2b697bec 100644
@@ -28,6 +28,26 @@ _require_log_writes()
 	_require_test_program "log-writes/replay-log"
 }
 
+_require_log_writes_dax()
+{
+	[ -z "$LOGWRITES_DEV" -o ! -b "$LOGWRITES_DEV" ] && \
+		_notrun "This test requires a valid \$LOGWRITES_DEV"
+
+	_require_dm_target log-writes
+	_require_test_program "log-writes/replay-log"
+
+	_scratch_unmount
+	_log_writes_init
+	_log_writes_mkfs > /dev/null 2>&1
+	_log_writes_mount -o dax
+	# Check options to be sure. XFS ignores dax option
+	# and goes on if dev underneath does not support dax.
+	_fs_options $LOGWRITES_DMDEV | grep -qw "dax" || \
+		_notrun "$LOGWRITES_DMDEV $FSTYP does not support -o dax"
+	_log_writes_unmount
+	_log_writes_remove
+}
+
 _log_writes_init()
 {
 	local BLK_DEV_SIZE=`blockdev --getsz $SCRATCH_DEV`
tests/generic/999 new file +82 -0

82 lines not on this page · raw message

tests/generic/999.out new file +3 -0
new file mode 100644
index 00000000..c7b8f8a2
@@ -0,0 +1,3 @@
+QA output created by 999
+1.0M SCRATCH_MNT/test
+Silence is golden
tests/generic/group +1 -0
index 6c3bb03a..ae88aa03 100644
@@ -472,3 +472,4 @@
 467 auto quick exportfs
 468 shutdown auto quick metadata
 469 auto quick
+999 auto quick dax
Signature · 6 lines
2.14.3

_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm
#4 lore raw

Re: [fstests PATCH v5 2/2] generic: add test for DAX MAP_SYNC support

Quoted 148 lines · Ross Zwisler

This test creates a file and writes to it via an mmap(), but never syncs via fsync/msync. This process is tracked via dm-log-writes, then replayed.

If MAP_SYNC is working the dm-log-writes replay will show the test file with 1 MiB of on-media block allocations. This is because each allocating page fault included an implicit metadata sync. If MAP_SYNC isn't working (which you can test by removing the "-S" flag to xfs_io mmap) the file will be smaller or missing entirely.

Note that dm-log-writes doesn't track the data that we write via the mmap(), so we can't do any data integrity checking. We can only verify that the metadata writes for the page faults happened.

---
 common/dmlogwrites    | 20 +++++++++++++
 tests/generic/999     | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/generic/999.out |  3 ++
 tests/generic/group   |  1 +
 4 files changed, 106 insertions(+)
 create mode 100755 tests/generic/999
 create mode 100644 tests/generic/999.out
common/dmlogwrites +20 -0
index 05829dbc..2b697bec 100644
@@ -28,6 +28,26 @@ _require_log_writes()
        _require_test_program "log-writes/replay-log"
 }
 
+_require_log_writes_dax()
+{
+       [ -z "$LOGWRITES_DEV" -o ! -b "$LOGWRITES_DEV" ] && \
+               _notrun "This test requires a valid \$LOGWRITES_DEV"
+
+       _require_dm_target log-writes
+       _require_test_program "log-writes/replay-log"
+
+       _scratch_unmount
+       _log_writes_init
+       _log_writes_mkfs > /dev/null 2>&1
+       _log_writes_mount -o dax
+       # Check options to be sure. XFS ignores dax option
+       # and goes on if dev underneath does not support dax.
+       _fs_options $LOGWRITES_DMDEV | grep -qw "dax" || \
+               _notrun "$LOGWRITES_DMDEV $FSTYP does not support -o dax"
+       _log_writes_unmount
+       _log_writes_remove
+}
+
 _log_writes_init()
 {
        local BLK_DEV_SIZE=`blockdev --getsz $SCRATCH_DEV`
tests/generic/999 new file +82 -0
new file mode 100755
index 00000000..ca5772da
@@ -0,0 +1,82 @@
+#! /bin/bash
+# FS QA Test No. 999
+#
+# Use dm-log-writes to verify that MAP_SYNC actually syncs metadata during
+# page faults.
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2017 Intel Corporation.  All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write the Free Software Foundation,
+# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#-----------------------------------------------------------------------
+#
+
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+here=`pwd`
+status=1       # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+       _log_writes_cleanup
+}
+
+# get standard environment, filters and checks
+. ./common/rc
+. ./common/filter
+. ./common/dmlogwrites
+
+# remove previous $seqres.full before test
+rm -f $seqres.full
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+_require_log_writes_dax
+_require_xfs_io_command "log_writes"
+
+_log_writes_init
+_log_writes_mkfs >> $seqres.full 2>&1
+_log_writes_mount -o dax
+
+LEN=$((1024 * 1024)) # 1 MiB
+
+xfs_io -t -c "truncate $LEN" -c "mmap -S 0 $LEN" -c "mwrite 0 $LEN" \
+       -c "log_writes -d $LOGWRITES_NAME -m preunmap" \
+       -f $SCRATCH_MNT/test
+
+# Unmount the scratch dir and tear down the log writes target
+_log_writes_unmount
+_log_writes_remove
+_check_scratch_fs
+
+# destroy previous filesystem so we can be sure our rebuild works
+_scratch_mkfs >> $seqres.full 2>&1
+
+# check pre-unmap state
+_log_writes_replay_log preunmap
+_scratch_mount
+
+# We should see $SCRATCH_MNT/test as having 1 MiB in block allocations
+du -sh $SCRATCH_MNT/test | _filter_scratch | _filter_spaces
+
+_scratch_unmount
+_check_scratch_fs
+
+echo "Silence is golden"
+status=0
+exit
tests/generic/999.out new file +0 -0
new file mode 100644
index 00000000..c7b8f8a2

tests/generic/999.out line 3

Quoted 3 lines
tests/generic/999.out new file +3 -0
@@ -0,0 +1,3 @@
+QA output created by 999
+1.0M SCRATCH_MNT/test
+Silence is golden

You test is not silent ;)

Otherwise looks good

Amir.
_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm

#5 lore raw

Re: [fstests PATCH v5 2/2] generic: add test for DAX MAP_SYNC support

In reply to Ross Zwisler
Quoted 40 lines · Ross Zwisler

This test creates a file and writes to it via an mmap(), but never syncs via fsync/msync. This process is tracked via dm-log-writes, then replayed.

If MAP_SYNC is working the dm-log-writes replay will show the test file with 1 MiB of on-media block allocations. This is because each allocating page fault included an implicit metadata sync. If MAP_SYNC isn't working (which you can test by removing the "-S" flag to xfs_io mmap) the file will be smaller or missing entirely.

Note that dm-log-writes doesn't track the data that we write via the mmap(), so we can't do any data integrity checking. We can only verify that the metadata writes for the page faults happened.

---
 common/dmlogwrites    | 20 +++++++++++++
 tests/generic/999     | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/generic/999.out |  3 ++
 tests/generic/group   |  1 +
 4 files changed, 106 insertions(+)
 create mode 100755 tests/generic/999
 create mode 100644 tests/generic/999.out
common/dmlogwrites +9 -0
index 05829dbc..2b697bec 100644
@@ -28,6 +28,26 @@ _require_log_writes()
 	_require_test_program "log-writes/replay-log"
 }
 
+_require_log_writes_dax()
+{
+	[ -z "$LOGWRITES_DEV" -o ! -b "$LOGWRITES_DEV" ] && \
+		_notrun "This test requires a valid \$LOGWRITES_DEV"
+
+	_require_dm_target log-writes
+	_require_test_program "log-writes/replay-log"
+
+	_scratch_unmount

common/dmlogwrites _require_log_writes() · line 49

Quoted 10 lines
common/dmlogwrites +10 -0
+	_log_writes_init
+	_log_writes_mkfs > /dev/null 2>&1
+	_log_writes_mount -o dax
+	# Check options to be sure. XFS ignores dax option
+	# and goes on if dev underneath does not support dax.
+	_fs_options $LOGWRITES_DMDEV | grep -qw "dax" || \
+		_notrun "$LOGWRITES_DMDEV $FSTYP does not support -o dax"
+	_log_writes_unmount
+	_log_writes_remove
+}

Now we have two _require rules to test log_writes dm target:
_require_log_writes # _notrun explicitly when MOUNT_OPTIONS contains dax
_require_log_writes_dax # _notrun if log-writes target doesn't support dax

I think we can merge the two into one, i.e. extend _require_log_writes to check dax support status only when
- MOUNT_OPTIONS contains dax, or
- dax is given as a param explicitly, e.g. _require_log_writes dax

So old kernels that don't support dax log-writes still _notrun, and new kernels that have dax log-writes support could run all log-writes tests, like generic/455 and generic/457, in dax environment.

(I did a quick test with generic/45[57] on v4.15-rc2 kernel, 455 always fails due to md5sum mismatch, not sure where the problem is yet; 457 is _notrun, perhaps due to there's no dax support on reflink XFS.)

Quoted 48 lines
common/dmlogwrites +1 -0
+
 _log_writes_init()
 {
 	local BLK_DEV_SIZE=`blockdev --getsz $SCRATCH_DEV`
tests/generic/999 new file +38 -0
new file mode 100755
index 00000000..ca5772da
@@ -0,0 +1,82 @@
+#! /bin/bash
+# FS QA Test No. 999
+#
+# Use dm-log-writes to verify that MAP_SYNC actually syncs metadata during
+# page faults.
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2017 Intel Corporation.  All Rights Reserved.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write the Free Software Foundation,
+# Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#-----------------------------------------------------------------------
+#
+
+seq=`basename $0`
+seqres=$RESULT_DIR/$seq
+echo "QA output created by $seq"
+
+here=`pwd`
+status=1	# failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+_cleanup()
+{
+	_log_writes_cleanup
+}
+
+# get standard environment, filters and checks

tests/generic/999 line 48

Quoted 10 lines
tests/generic/999 new file +10 -0
+. ./common/rc
+. ./common/filter
+. ./common/dmlogwrites
+
+# remove previous $seqres.full before test
+rm -f $seqres.full
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux

Need _require_scratch before _require_log_writes

tests/generic/999 line 50

Quoted 2 lines
tests/generic/999 new file +2 -0
+_require_log_writes_dax
+_require_xfs_io_command "log_writes"

Also need to check "-S" option of mmap xfs_io command.

tests/generic/999 line 60

Quoted 10 lines
tests/generic/999 new file +10 -0
+
+_log_writes_init
+_log_writes_mkfs >> $seqres.full 2>&1
+_log_writes_mount -o dax
+
+LEN=$((1024 * 1024)) # 1 MiB
+
+xfs_io -t -c "truncate $LEN" -c "mmap -S 0 $LEN" -c "mwrite 0 $LEN" \
+	-c "log_writes -d $LOGWRITES_NAME -m preunmap" \
+	-f $SCRATCH_MNT/test

$XFS_IO_PROG

Quoted 8 lines
tests/generic/999 new file +8 -0
+
+# Unmount the scratch dir and tear down the log writes target
+_log_writes_unmount
+_log_writes_remove
+_check_scratch_fs
+
+# destroy previous filesystem so we can be sure our rebuild works
+_scratch_mkfs >> $seqres.full 2>&1

tests/generic/999 line 78

Quoted 10 lines
tests/generic/999 new file +10 -0
+
+# check pre-unmap state
+_log_writes_replay_log preunmap
+_scratch_mount
+
+# We should see $SCRATCH_MNT/test as having 1 MiB in block allocations
+du -sh $SCRATCH_MNT/test | _filter_scratch | _filter_spaces
+
+_scratch_unmount
+_check_scratch_fs

No need to umount & check scratch fs, 'check' will do it after test, as long as we called _require_scratch

tests/generic/999.out line 3

Quoted 13 lines
tests/generic/999 new file +4 -0
+
+echo "Silence is golden"
+status=0
+exit
tests/generic/999.out new file +3 -0
new file mode 100644
index 00000000..c7b8f8a2
@@ -0,0 +1,3 @@
+QA output created by 999
+1.0M SCRATCH_MNT/test
+Silence is golden

Yeah, as Amir mentioned, test is not silence :)

Thanks,
Eryu

Quoted 12 lines
tests/generic/group +1 -0
index 6c3bb03a..ae88aa03 100644
@@ -472,3 +472,4 @@
 467 auto quick exportfs
 468 shutdown auto quick metadata
 469 auto quick
+999 auto quick dax
Signature · 1 line
2.14.3

_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm

#6 lore raw

Re: [fstests PATCH v5 2/2] generic: add test for DAX MAP_SYNC support

Quoted 9 lines · Eryu Guan

Now we have two _require rules to test log_writes dm target:
_require_log_writes # _notrun explicitly when MOUNT_OPTIONS contains dax
_require_log_writes_dax # _notrun if log-writes target doesn't support dax

I think we can merge the two into one, i.e. extend _require_log_writes to check dax support status only when
- MOUNT_OPTIONS contains dax, or
- dax is given as a param explicitly, e.g. _require_log_writes dax

Quoted 7 lines

So old kernels that don't support dax log-writes still _notrun, and new kernels that have dax log-writes support could run all log-writes tests, like generic/455 and generic/457, in dax environment.

(I did a quick test with generic/45[57] on v4.15-rc2 kernel, 455 always fails due to md5sum mismatch, not sure where the problem is yet; 457 is _notrun, perhaps due to there's no dax support on reflink XFS.)

I looked in to generic/455 md5sum mismatch, and it is expected with the current DAX support found in dm-log-writes. The issue is that we snoop I/O, but we *don't* snoop the data written by mmap().

For DAX mmaps, the sync calls msync()/fsync() don't cause writes to the block driver of flushed page cache pages as they would in the page cache case. Instead the user writes directly into the persistent memory, and all we see is a flush call. For us to properly handle mmap() writes we'll need to catch the flush happening in dm-log-writes, iterate through the flushed data and copy it into the dm-log-writes log.

I actually had this implemented in my initial version of the DAX support for dm-log-writes, but by the time I was ready to merge the DAX flush path had been removed from DM. See
commit c3ca015fab6d ("dax: remove the pmem_dax_ops->flush abstraction") for more info.

I can look at adding some level of flush support back into DM so we can handle this case. Until/unless that happens, though, I think we should continue to make users specifically request DAX+dm-log-writes support that lacks mmap() data verfication capabilities via _require_log_writes_dax.

Thank you for the feedback. I'll post an updated patch that takes care of the rest of your comments.
_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm

#7 lore raw

PATCH v6 2/2 generic: add test for DAX MAP_SYNC support

In reply to Eryu Guan

This test creates a file and writes to it via an mmap(), but never syncs via fsync/msync. This process is tracked via dm-log-writes, then replayed.

If MAP_SYNC is working the dm-log-writes replay will show the test file with 1 MiB of on-media block allocations. This is because each allocating page fault included an implicit metadata sync. If MAP_SYNC isn't working (which you can test by removing the "-S" flag to xfs_io mmap) the file will be smaller or missing entirely.

Note that dm-log-writes doesn't track the data that we write via the mmap(), so we can't do any data integrity checking. We can only verify that the metadata writes for the page faults happened.

---

Changes since v5:
- Addressed Eryu's comments. Thanks for the review.

---
 common/dmlogwrites    | 19 ++++++++++++
 tests/generic/999     | 80 +++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/generic/999.out |  2 ++
 tests/generic/group   |  1 +
 4 files changed, 102 insertions(+)
 create mode 100755 tests/generic/999
 create mode 100644 tests/generic/999.out
common/dmlogwrites +19 -0
index 05829dbc..c235ee49 100644
@@ -28,6 +28,25 @@ _require_log_writes()
 	_require_test_program "log-writes/replay-log"
 }
 
+_require_log_writes_dax()
+{
+	[ -z "$LOGWRITES_DEV" -o ! -b "$LOGWRITES_DEV" ] && \
+		_notrun "This test requires a valid \$LOGWRITES_DEV"
+
+	_require_dm_target log-writes
+	_require_test_program "log-writes/replay-log"
+
+	_log_writes_init
+	_log_writes_mkfs > /dev/null 2>&1
+	_log_writes_mount -o dax
+	# Check options to be sure. XFS ignores dax option
+	# and goes on if dev underneath does not support dax.
+	_fs_options $LOGWRITES_DMDEV | grep -qw "dax" || \
+		_notrun "$LOGWRITES_DMDEV $FSTYP does not support -o dax"
+	_log_writes_unmount
+	_log_writes_remove
+}
+
 _log_writes_init()
 {
 	local BLK_DEV_SIZE=`blockdev --getsz $SCRATCH_DEV`
tests/generic/999 new file +80 -0

80 lines not on this page · raw message

tests/generic/999.out new file +2 -0
new file mode 100644
index 00000000..611289b6
@@ -0,0 +1,2 @@
+QA output created by 999
+1.0M SCRATCH_MNT/test
tests/generic/group +1 -0
index 6c3bb03a..ae88aa03 100644
@@ -472,3 +472,4 @@
 467 auto quick exportfs
 468 shutdown auto quick metadata
 469 auto quick
+999 auto quick dax
Signature · 6 lines
2.14.3

_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm
#8 lore raw

Re: [fstests PATCH v6 2/2] generic: add test for DAX MAP_SYNC support

Quoted 13 lines · Ross Zwisler

This test creates a file and writes to it via an mmap(), but never syncs via fsync/msync. This process is tracked via dm-log-writes, then replayed.

If MAP_SYNC is working the dm-log-writes replay will show the test file with 1 MiB of on-media block allocations. This is because each allocating page fault included an implicit metadata sync. If MAP_SYNC isn't working (which you can test by removing the "-S" flag to xfs_io mmap) the file will be smaller or missing entirely.

Note that dm-log-writes doesn't track the data that we write via the mmap(), so we can't do any data integrity checking. We can only verify that the metadata writes for the page faults happened.

Quoted 6 lines

---

Changes since v5:
- Addressed Eryu's comments. Thanks for the review.

Thanks for the explanation on the dm-log-writes dax support! I agree that we should keep _require_log_writes_dax for now till dm-log-writes gains full dax support. I added some comments about this above the helper definition and queued the patchset for next fstests update. (Test was re-numbered as generic/470, BTW.)

Thanks,
Eryu
_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm

#9 lore raw

Re: [fstests PATCH v6 2/2] generic: add test for DAX MAP_SYNC support

Quoted 1 line · Eryu Guan

(Test was re-numbered as generic/470, BTW.)

Thanks! For future reference, does the pattern of us submitting tests with high numbers (generic/999) to avoid merge conflicts and asking you to renumber them when you merge work for you? Or would you prefer that we number our tests to the next available, which may change from submission to submission?
_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm

#10 lore raw

Re: [fstests PATCH v6 2/2] generic: add test for DAX MAP_SYNC support

Quoted 8 lines · Ross Zwisler
Quoted 1 line · Eryu Guan

(Test was re-numbered as generic/470, BTW.)

Thanks! For future reference, does the pattern of us submitting tests with high numbers (generic/999) to avoid merge conflicts and asking you to renumber them when you merge work for you? Or would you prefer that we number our tests to the next available, which may change from submission to submission?

For patch that adds a single test, either way is fine, I need to edit the patch anyway on conflicts, as the group file conflicts. For patch or patchset that adds multiple tests, starting with a high test seq number would be better, I only need to edit the group file by hand, not the seq numbers in each test (that can be done by ./tools/mvtest script).

But overall, the starting seq number doesn't matter that much. OTOH, basing new tests on top of latest master as much as possible would be perfered, that reduces the possibility of conflicts, as I only need to resolve conflicts within all the new tests.

Thanks,
Eryu
_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm