diff options
Diffstat (limited to 'cmds-restore.c')
-rw-r--r-- | cmds-restore.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/cmds-restore.c b/cmds-restore.c index 1d246919..617f5078 100644 --- a/cmds-restore.c +++ b/cmds-restore.c @@ -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; |