All of lore.kernel.org
 help / color / mirror / Atom feed
From: Qu Wenruo <wqu@suse.com>
To: linux-btrfs@vger.kernel.org, fstests@vger.kernel.org
Subject: [PATCH] fstests: log-writes: Add new option to replay/find next write to sector
Date: Thu, 28 Mar 2019 13:35:07 +0800	[thread overview]
Message-ID: <20190328053507.10191-1-wqu@suse.com> (raw)

For kernel operation we have METADATA/FUA/FLUSH flags as a beacon, but
for user space write we don't have any useful flag unless the user space
tool call fsync() to generate a FLUSH bio.

This means for user space write, we don't really have an equivalent of
--next-fua to find super block write.

So this patch will add a new option, --next-write <sector> to
replay/find next write to certain sector.
And normally the <sector> should be super block sector number.

With that, we can replay to super block write even it's user space
triggering the write.

Signed-off-by: Qu Wenruo <wqu@suse.com>
---
 src/log-writes/replay-log.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/src/log-writes/replay-log.c b/src/log-writes/replay-log.c
index c16df40e5741..0d0ec49c8a00 100644
--- a/src/log-writes/replay-log.c
+++ b/src/log-writes/replay-log.c
@@ -9,6 +9,7 @@
 enum option_indexes {
 	NEXT_FLUSH,
 	NEXT_FUA,
+	NEXT_WRITE,
 	START_ENTRY,
 	END_MARK,
 	LOG,
@@ -28,6 +29,7 @@ enum option_indexes {
 static struct option long_options[] = {
 	{"next-flush", no_argument, NULL, 0},
 	{"next-fua", no_argument, NULL, 0},
+	{"next-write", required_argument, NULL, 0},
 	{"start-entry", required_argument, NULL, 0},
 	{"end-mark", required_argument, NULL, 0},
 	{"log", required_argument, NULL, 0},
@@ -53,6 +55,8 @@ static void usage(void)
 	fprintf(stderr, "\t--limit <number> - number of entries to replay\n");
 	fprintf(stderr, "\t--next-flush - replay to/find the next flush\n");
 	fprintf(stderr, "\t--next-fua - replay to/find the next fua\n");
+	fprintf(stderr, "\t--next-write <sector> - replay to/find the next "
+			"write to <sector>\n");
 	fprintf(stderr, "\t--start-entry <entry> - start at the given "
 		"entry #\n");
 	fprintf(stderr, "\t--start-mark <mark> - mark to start from\n");
@@ -139,6 +143,7 @@ int main(int argc, char **argv)
 	char *logfile = NULL, *replayfile = NULL, *fsck_command = NULL;
 	struct log_write_entry *entry;
 	u64 stop_flags = 0;
+	u64 stop_sector = 0;
 	u64 start_entry = 0;
 	u64 start_sector = 0;
 	u64 end_sector = -1ULL;
@@ -173,6 +178,14 @@ int main(int argc, char **argv)
 		case NEXT_FUA:
 			stop_flags |= LOG_FUA_FLAG;
 			break;
+		case NEXT_WRITE:
+			stop_sector = strtoull(optarg, &tmp, 0);
+			if (tmp && *tmp != '\0') {
+				fprintf(stderr, "Invalid sector number\n");
+				exit(1);
+			}
+			tmp = NULL;
+			break;
 		case START_ENTRY:
 			start_entry = strtoull(optarg, &tmp, 0);
 			if (tmp && *tmp != '\0') {
@@ -324,7 +337,8 @@ int main(int argc, char **argv)
 		while ((ret = log_seek_next_entry(log, entry, 1)) == 0) {
 			num_entries++;
 			if ((run_limit && num_entries == run_limit) ||
-			    should_stop(entry, stop_flags, end_mark)) {
+			    should_stop(entry, stop_flags, end_mark) ||
+			    (stop_sector && entry->sector == stop_sector)) {
 				printf("%llu@%llu\n",
 				       (unsigned long long)log->cur_entry - 1,
 				       log->cur_pos / log->sectorsize);
-- 
2.21.0

             reply	other threads:[~2019-03-28  5:35 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-28  5:35 Qu Wenruo [this message]
2019-04-06 12:10 ` [PATCH] fstests: log-writes: Add new option to replay/find next write to sector Eryu Guan
2019-04-06 16:49 ` Amir Goldstein

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190328053507.10191-1-wqu@suse.com \
    --to=wqu@suse.com \
    --cc=fstests@vger.kernel.org \
    --cc=linux-btrfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.