mdrestore: Add support for passing log device as an argument
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.
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Signed-off-by: Chandan Babu R <chandan.babu@oracle.com>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
diff --git a/man/man8/xfs_mdrestore.8 b/man/man8/xfs_mdrestore.8
index 72f3b29..6e7457c 100644
--- a/man/man8/xfs_mdrestore.8
+++ b/man/man8/xfs_mdrestore.8
@@ -5,6 +5,9 @@
.B xfs_mdrestore
[
.B \-gi
+] [
+.B \-l
+.I logdev
]
.I source
.I target
@@ -49,6 +52,11 @@
is specified, exits after displaying information. Older metadumps man not
include any descriptive information.
.TP
+.B \-l " logdev"
+Metadump in v2 format can contain metadata dumped from an external log.
+In such a scenario, the user has to provide a device to which the log device
+contents from the metadump file are copied.
+.TP
.B \-V
Prints the version number and exits.
.SH DIAGNOSTICS
diff --git a/mdrestore/xfs_mdrestore.c b/mdrestore/xfs_mdrestore.c
index 105a2f9..2de177c 100644
--- a/mdrestore/xfs_mdrestore.c
+++ b/mdrestore/xfs_mdrestore.c
@@ -459,7 +459,8 @@
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);
}
@@ -484,7 +485,7 @@
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 = true;
@@ -492,6 +493,10 @@
case 'i':
mdrestore.show_info = true;
break;
+ case 'l':
+ logdev = optarg;
+ mdrestore.external_log = true;
+ break;
case 'V':
printf("%s version %s\n", progname, VERSION);
exit(0);
@@ -528,6 +533,8 @@
switch (be32_to_cpu(headers.magic)) {
case XFS_MD_MAGIC_V1:
+ if (logdev != NULL)
+ usage();
mdrestore.mdrops = &mdrestore_ops_v1;
break;