[PATCH 20/24] mdrestore: Detect metadump version from metadump image

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Chandan Babu R <chandan.babu@xxxxxxxxxx>
---
 mdrestore/xfs_mdrestore.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/mdrestore/xfs_mdrestore.c b/mdrestore/xfs_mdrestore.c
index 5ec1a47b0..52081a6ca 100644
--- a/mdrestore/xfs_mdrestore.c
+++ b/mdrestore/xfs_mdrestore.c
@@ -8,7 +8,7 @@
 #include "xfs_metadump.h"
 
 struct mdrestore_ops {
-	void (*read_header)(void *header, FILE *mdfp);
+	int (*read_header)(void *header, FILE *mdfp);
 	void (*show_info)(void *header, const char *mdfile);
 	void (*restore)(void *header, FILE *mdfp, int data_fd,
 			bool is_target_file);
@@ -86,7 +86,7 @@ open_device(
 	return fd;
 }
 
-static void
+static int
 read_header_v1(
 	void			*header,
 	FILE			*mdfp)
@@ -96,7 +96,9 @@ read_header_v1(
 	if (fread(mb, sizeof(*mb), 1, mdfp) != 1)
 		fatal("error reading from metadump file\n");
 	if (mb->mb_magic != cpu_to_be32(XFS_MD_MAGIC_V1))
-		fatal("specified file is not a metadata dump\n");
+		return -1;
+
+	return 0;
 }
 
 static void
@@ -316,9 +318,10 @@ main(
 			fatal("cannot open source dump file\n");
 	}
 
-	mdrestore.mdrops = &mdrestore_ops_v1;
-
-	mdrestore.mdrops->read_header(&mb, src_f);
+	if (mdrestore_ops_v1.read_header(&mb, src_f) == 0)
+		mdrestore.mdrops = &mdrestore_ops_v1;
+	else
+		fatal("Invalid metadump format\n");
 
 	if (mdrestore.show_info) {
 		mdrestore.mdrops->show_info(&mb, argv[optind]);
-- 
2.39.1




[Index of Archives]     [XFS Filesystem Development (older mail)]     [Linux Filesystem Development]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux RAID]     [Linux SCSI]


  Powered by Linux