On Tue, May 09, 2017 at 12:40:53PM -0700, Liu Bo wrote: > On Fri, May 05, 2017 at 06:52:45PM +0200, David Sterba wrote: > > On Thu, Apr 13, 2017 at 06:11:56PM -0700, Liu Bo wrote: > > > With raid1 profile, dio read isn't tolerating IO errors if read length is > > > less than the stripe length (64K). > > > > Can you please write more details why this is true? Some pointers to > > code etc, I'm lost. Eg. where the errors is tolerated. Thanks. > > Sure. > > Our bio didn't get split in btrfs_submit_direct_hook() if (dip->flags & > BTRFS_DIO_ORIG_BIO_SUBMITTED) is true. If the underlying device returns error > somehow, bio->bi_error has recorded that error. > > If we could recover the correct data from another copy in profile > raid1/10/5/6, > with btrfs_subio_endio_read() returning 0, bio would have the correct data in > its vector, but bio->bi_error is not updated accordingly so that the following > dio_end_io(dio_bio, bio->bi_error) makes directIO think this read has failed.
Great, thanks. Please update the patch and resend. -- 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