Blame SOURCES/0108-Dump-get-stat-from-a-wrong-metadata-file-when-restor.patch

3c4af5
From 75562b57d43bd252399b55d0004b8eac4b337a67 Mon Sep 17 00:00:00 2001
3c4af5
From: Lidong Zhong <lidong.zhong@suse.com>
3c4af5
Date: Mon, 14 Dec 2020 22:51:33 +0800
3c4af5
Subject: [PATCH 108/108] Dump: get stat from a wrong metadata file when
3c4af5
 restoring metadata
3c4af5
3c4af5
The dumped metadata files are shown as below
3c4af5
localhost:~ # ll -ih test/
3c4af5
total 16K
3c4af5
34565564 -rw-r--r-- 2 root root 1.0G Dec 14 21:15
3c4af5
scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-3
3c4af5
34565563 -rw-r--r-- 2 root root 1.0G Dec 14 21:15
3c4af5
scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-4
3c4af5
34565563 -rw-r--r-- 2 root root 1.0G Dec 14 21:15 sda
3c4af5
34565564 -rw-r--r-- 2 root root 1.0G Dec 14 21:15 sdb
3c4af5
3c4af5
It reports such error when trying to restore metadata for /dev/sda
3c4af5
localhost:~ # mdadm --restore=test /dev/sda
3c4af5
mdadm: test/scsi-0QEMU_QEMU_HARDDISK_drive-scsi0-0-0-4 is not the same
3c4af5
size as /dev/sda - cannot restore.
3c4af5
It's because the stb value has been changed to other metadata file in
3c4af5
the while statement.
3c4af5
3c4af5
Signed-off-by: Lidong Zhong <lidong.zhong@suse.com>
3c4af5
Signed-off-by: Jes Sorensen <jsorensen@fb.com>
3c4af5
---
3c4af5
 Dump.c | 5 +++++
3c4af5
 1 file changed, 5 insertions(+)
3c4af5
3c4af5
diff --git a/Dump.c b/Dump.c
3c4af5
index 38e8f23..736bcb6 100644
3c4af5
--- a/Dump.c
3c4af5
+++ b/Dump.c
3c4af5
@@ -272,6 +272,11 @@ int Restore_metadata(char *dev, char *dir, struct context *c,
3c4af5
 		       fname);
3c4af5
 		goto err;
3c4af5
 	}
3c4af5
+	if (stat(fname, &stb) != 0) {
3c4af5
+		pr_err("Could not stat %s for --restore.\n",
3c4af5
+		       fname);
3c4af5
+		goto err;
3c4af5
+	}
3c4af5
 	if (((unsigned long long)stb.st_size) != size) {
3c4af5
 		pr_err("%s is not the same size as %s - cannot restore.\n",
3c4af5
 		       fname, dev);
3c4af5
-- 
3c4af5
2.7.5
3c4af5