On Tue, May 23, 2023 at 11:09:59 AM -0700, Darrick J. Wong wrote: > On Tue, May 23, 2023 at 02:30:49PM +0530, Chandan Babu R wrote: >> metadump v2 format allows dumping metadata from external log devices. This >> commit allows passing the device file to which log data must be restored from >> the corresponding metadump file. >> >> Signed-off-by: Chandan Babu R <chandan.babu@xxxxxxxxxx> >> --- >> mdrestore/xfs_mdrestore.c | 10 ++++++++-- >> 1 file changed, 8 insertions(+), 2 deletions(-) >> >> diff --git a/mdrestore/xfs_mdrestore.c b/mdrestore/xfs_mdrestore.c >> index 9e06d37dc..f5eff62ef 100644 >> --- a/mdrestore/xfs_mdrestore.c >> +++ b/mdrestore/xfs_mdrestore.c >> @@ -427,7 +427,8 @@ static struct mdrestore_ops mdrestore_ops_v2 = { >> static void >> usage(void) >> { >> - fprintf(stderr, "Usage: %s [-V] [-g] [-i] source target\n", progname); >> + fprintf(stderr, "Usage: %s [-V] [-g] [-i] [-l logdev] source target\n", >> + progname); >> exit(1); >> } >> >> @@ -453,7 +454,7 @@ main( >> >> progname = basename(argv[0]); >> >> - while ((c = getopt(argc, argv, "giV")) != EOF) { >> + while ((c = getopt(argc, argv, "gil:V")) != EOF) { >> switch (c) { >> case 'g': >> mdrestore.show_progress = 1; >> @@ -461,6 +462,9 @@ main( >> case 'i': >> mdrestore.show_info = 1; >> break; >> + case 'l': >> + logdev = optarg; >> + break; >> case 'V': >> printf("%s version %s\n", progname, VERSION); >> exit(0); >> @@ -493,6 +497,8 @@ main( >> } >> >> if (mdrestore_ops_v1.read_header(&mb, src_f) == 0) { >> + if (logdev != NULL) >> + usage(); >> mdrestore.mdrops = &mdrestore_ops_v1; >> header = &mb; >> } else if (mdrestore_ops_v2.read_header(&xmh, src_f) == 0) { > > What if we have a v2 with XME_ADDR_LOG_DEVICE meta_extents but the > caller doesn't specify -l? Do we proceed with the metadump, only to > fail midway through the restore? restore_v2() has the following statement just after reading in the superblock, if (sb.sb_logstart == 0 && log_fd == -1) fatal("External Log device is required\n"); Hence, In the case of a missing log device argument, the program exits before any metadata is written to the target device. -- chandan