On Mon, Mar 27, 2017 at 06:59:44PM +0200, David Sterba wrote: > On Fri, Mar 24, 2017 at 12:13:35PM -0700, Liu Bo wrote: > > Now that scrub can fix data errors with the help of parity for raid56 > > profile, repair during read is able to as well. > > > > Although the mirror num in raid56 senario has different meanings, i.e. > > (typo: scenario) >
Thanks! > > 0 or 1: read data directly > > > 1: do recover with parity, > > it could be fit into how we repair bad block during read. > > Could we possibly add some symbolic names for the RAID56 case? > Yes, we could do that here, but I'm afraid it might not be helpful because most of places still use mirror or mirror_num, such as btrfs_submit_bio_hook and btrfs_map_bio. > > > > The trick is to use BTRFS_MAP_READ instead of BTRFS_MAP_WRITE to get the > > device and position on it. > > Please also document the trick in the code before the following. > Good point. Thanks, -liubo > > + if (btrfs_is_parity_mirror(map_tree, logical, length, mirror_num)) { > > + /* use BTRFS_MAP_READ to get the phy dev and sector */ > > + ret = btrfs_map_block(fs_info, BTRFS_MAP_READ, logical, > > + &map_length, &bbio, 0); > > + if (ret) { > > + btrfs_bio_counter_dec(fs_info); > > + bio_put(bio); > > + return -EIO; > > + } > > + ASSERT(bbio->mirror_num == 1); > > + } else { > > + ret = btrfs_map_block(fs_info, BTRFS_MAP_WRITE, logical, > > + &map_length, &bbio, mirror_num); > > + if (ret) { > > + btrfs_bio_counter_dec(fs_info); > > + bio_put(bio); > > + return -EIO; > > + } > > + BUG_ON(mirror_num != bbio->mirror_num); > > } > > - BUG_ON(mirror_num != bbio->mirror_num); > > - sector = bbio->stripes[mirror_num-1].physical >> 9; > > + > > + sector = bbio->stripes[bbio->mirror_num - 1].physical >> 9; > > bio->bi_iter.bi_sector = sector; > > - dev = bbio->stripes[mirror_num-1].dev; > > + dev = bbio->stripes[bbio->mirror_num - 1].dev; > > btrfs_put_bbio(bbio); > > if (!dev || !dev->bdev || !dev->writeable) { > > btrfs_bio_counter_dec(fs_info); -- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html