Hi all, This patchset attempts to fix the behavior of the logwrites replay tests when running on XFS. In short, the logwrites code logs every write made to a block device and can set tags at arbitrary points in that log. The replay tests then erase the block device and replay up to those tags, and then invoke the filesystem to see if it can recover the filesystem. However, the logwrites replay has long had subtle problems. XFS log recovery won't replay a metadata block from the log if the ondisk block has a newer log sequence number (LSNs), which rests on the assumption that ondisk filesystem metadata do not have LSNs greater than that of the head of the log. This is not true if we're replaying to a point in the past, so log recovery fails to produce a consistent filesystem. The logwrites replay code works around this issue by erasing the block device before replaying. Unfortunately, it uses BLKDISCARD, which has never guaranteed the results of a read after the discard completes. Some devices return zeroes, others do nothing. This inconsistency has been worked around by installing the one block device that guarantees that reads after a mass discard always return zeros -- dm-thinp. Unfortunately that leaves a subtle landmine for test authors. If their filesystem's recovery doesn't behave like XFS's then they might not need thinp. If it does, it's all too easy to write a broken testcase. Fix this whole situation by adding a warning to the logwrites setup code if the block device is not known to guarantee that reads after discard returns zeroes; fix the replay program to use BLKZEROOUT so that the block device is zeroed before replay begins; and then fix the logwrites setup to tell the replay program that it can use BLKDISCARD for the devices where we know that will work, because discard is much faster than writing zeroes. If you're going to start using this code, I strongly recommend pulling from my git trees, which are linked below. With a bit of luck, this should all go splendidly. Comments and questions are, as always, welcome. --D fstests git tree: https://git.kernel.org/cgit/linux/kernel/git/djwong/xfstests-dev.git/log/?h=logwrites-fix-zeroing --- Commits in this patchset: * logwrites: warn if we don't think read after discard returns zeroes * logwrites: use BLKZEROOUT if it's available * logwrites: only use BLKDISCARD if we know discard zeroes data --- common/dmlogwrites | 39 ++++++++++++++++++++++++++++++++++++++- src/log-writes/log-writes.c | 10 ++++++++++ src/log-writes/log-writes.h | 1 + src/log-writes/replay-log.c | 8 ++++++++ 4 files changed, 57 insertions(+), 1 deletion(-)