Re: raid10 make_request failure during iozone benchmark upon btrfs
flat view
From: NeilBrown <hidden>
Date: 2012-07-03 01:39:43
On Mon, 02 Jul 2012 03:58:57 +0100 Kerin Millar [off-list ref] wrote:
Hi Neil, On 02/07/2012 03:52, NeilBrown wrote:quoted
On Mon, 02 Jul 2012 03:34:16 +0100 Kerin Millar[off-list ref] wrote:quoted
quoted
Hello, I'm running a 4-way RAID-10 array with the f2 layout scheme on a 3.5-rc5I thought I fixed this in 3.5-rc2. Maybe there is another bug.... Could you please double check that you are running a kernel with commit aba336bd1d46d6b0404b06f6915ed76150739057 Author: NeilBrown[off-list ref] Date: Thu May 31 15:39:11 2012 +1000 md: raid1/raid10: fix problem with merge_bvec_fn in it?I am indeed. I searched the list beforehand and noticed the patch in question. Not sure which -rc it landed in but I checked my source tree and it's definitely in there. Cheers, --Kerin
Thanks. Looking at it again I see that it is definitely a different bug, that patch wouldn't affect it. But I cannot see what could possibly be causing the problem. You have a 256K chunk size, so requests should be limited to 512 sectors aligned at a 512-sector boundary. However all the requests that a causing errors are 512 sectors long, but aligned on a 256-sector boundary (which is not also 512-sector). This is wrong. It could be that btrfs is submitting bad requests, but I think it always uses bio_add_page, and bio_add_page appears to do the right thing. It could be that dm-linear is causing problem, but it seems to correctly after the underlying device for alignment, and reports that alignment to bio_add_page. It could be that md/raid10 is the problem but I cannot find any fault in raid10_mergeable_bvec - performs much the same tests that the raid01 make_request function does. So it is a mystery. Is this failure repeatable? If so, could you please insert WARN_ON_ONCE(1); in drivers/md/raid10.c where it prints out the message: just after the "bad_map:" label. Also, in raid10_mergeable_bvec, insert WARN_ON_ONCE(max < 0); just before if (max < 0) /* bio_add cannot handle a negative return */ max = 0; and then see if either of those generate a warning, and post the full stack trace if they do. Thanks, NeilBrown
Attachments
- signature.asc [application/pgp-signature] 828 bytes