@@ -64,8 +64,8 @@ static void usage(void)
fprintf(stderr, "\t--no-discard - don't process discard entries\n");
fprintf(stderr, "\t--fsck - the fsck command to run, must specify "
"--check\n");
- fprintf(stderr, "\t--check [<number>|flush|fua] when to check the "
- "file system, mush specify --fsck\n");
+ fprintf(stderr, "\t--check [<number>|flush|fua|discard] when to check "
+ "the file system, mush specify --fsck\n");
fprintf(stderr, "\t--start-sector <sector> - replay ops on region "
"from <sector> onto <device>\n");
fprintf(stderr, "\t--end-sector <sector> - replay ops on region "
@@ -115,6 +115,7 @@ enum log_replay_check_mode {
CHECK_NUMBER = 1,
CHECK_FUA = 2,
CHECK_FLUSH = 3,
+ CHECK_DISCARD = 4,
};
static int seek_to_mark(struct log *log, struct log_write_entry *entry,
@@ -253,6 +254,8 @@ int main(int argc, char **argv)
check_mode = CHECK_FLUSH;
} else if (!strcmp(optarg, "fua")) {
check_mode = CHECK_FUA;
+ } else if (!strcmp(optarg, "discard")) {
+ check_mode = CHECK_DISCARD;
} else {
check_mode = CHECK_NUMBER;
check_number = strtoull(optarg, &tmp, 0);
@@ -369,6 +372,9 @@ int main(int argc, char **argv)
else if ((check_mode == CHECK_FLUSH) &&
should_stop(entry, LOG_FLUSH_FLAG, NULL))
ret = run_fsck(log, fsck_command);
+ else if ((check_mode == CHECK_DISCARD) &&
+ should_stop(entry, LOG_DISCARD_FLAG, NULL))
+ ret = run_fsck(log, fsck_command);
else
ret = 0;
if (ret) {
Despite the existing <number>|fua|flush checkpoint, add a new discard check point to make sure discard is not screwing up things. Signed-off-by: Qu Wenruo <wqu@suse.com> --- src/log-writes/replay-log.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)