db07609875
segfaults from bnc#710486 due to unchecked usage of return value of open_ctree() [fixed compilation warnings] - pull upstream, replace existing patches, spec update - update 'restore' utility - lzo support - tools may now take earlies superblock when opening the fs - other fixes - pull integration-20111030 branch - mkfs: force mkfs if desired - other fixes - add btrfs-dump-super to mkinitrd - other fixes - skip non-existent devices or without media - documentation updates - scrubbing single device - graceful error handling when opening fs fails - updated mkinitrd script to scan devices before mount (bnc#727383) OBS-URL: https://build.opensuse.org/package/show/filesystems/btrfsprogs?expand=0&rev=115
41 lines
1.1 KiB
Diff
41 lines
1.1 KiB
Diff
From ff0e1b17030a9b1e027c8b77f67ab44136e172ac Mon Sep 17 00:00:00 2001
|
|
From: Josef Bacik <josef@redhat.com>
|
|
Date: Mon, 7 Nov 2011 16:41:01 -0500
|
|
Subject: [PATCH 19/35] Btrfs-progs: try other mirrors on read failure
|
|
|
|
If we hit a bad disk and the read doesn't work, try other mirrors in case we
|
|
have other disks with good copies. Thanks,
|
|
|
|
Signed-off-by: Josef Bacik <josef@redhat.com>
|
|
---
|
|
restore.c | 13 ++++++++++---
|
|
1 files changed, 10 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/restore.c b/restore.c
|
|
index f062a2b..4dabae2 100644
|
|
--- a/restore.c
|
|
+++ b/restore.c
|
|
@@ -244,9 +244,16 @@ again:
|
|
|
|
done = pread(dev_fd, inbuf+count, length, dev_bytenr);
|
|
if (done < length) {
|
|
- ret = -1;
|
|
- fprintf(stderr, "Short read %d\n", errno);
|
|
- goto out;
|
|
+ num_copies = btrfs_num_copies(&root->fs_info->mapping_tree,
|
|
+ bytenr, length);
|
|
+ mirror_num++;
|
|
+ if (mirror_num >= num_copies) {
|
|
+ ret = -1;
|
|
+ fprintf(stderr, "Exhausted mirrors trying to read\n");
|
|
+ goto out;
|
|
+ }
|
|
+ fprintf(stderr, "Trying another mirror\n");
|
|
+ goto again;
|
|
}
|
|
|
|
count += length;
|
|
--
|
|
1.7.6.233.gd79bc
|
|
|