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