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>
master
Josef Bacik 2013-03-12 13:38:10 -04:00 committed by David Sterba
parent 9969ea479d
commit 23bfbf0328
1 changed files with 10 additions and 3 deletions

View File

@ -245,9 +245,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;