RE: Software raid0 will crash the file-system, when each disk is 5TB
From: Neil Brown <hidden>
Date: 2007-05-17 05:03:46
Also in:
linux-fsdevel, lkml
On Wednesday May 16, david@lang.hm wrote:
On Thu, 17 May 2007, Neil Brown wrote:quoted
On Thursday May 17, Jeff.Zheng@endace.com wrote:quoted
quoted
The only difference of any significance between the working and non-working configurations is that in the non-working, the component devices are larger than 2Gig, and hence have sector offsets greater than 32 bits.Do u mean 2T here?, but in both configuartion, the component devices are larger than 2T (2.25T&5.5T).Yes, I meant 2T, and yes, the components are always over 2T.2T decimal or 2T binary?
Either. The smallest as actually 2.75T (typo above). Precisely it was 2929641472 kilobytes or 5859282944 sectors or 0x15D3D9000 sectors. So it is over 32bits already... Uhm, I just noticed something. 'chunk' is unsigned long, and when it gets shifted up, we might lose bits. That could still happen with the 4*2.75T arrangement, but is much more likely in the 2*5.5T arrangement. Jeff, can you try this patch? Thanks. NeilBrown Signed-off-by: Neil Brown <redacted> ### Diffstat output ./drivers/md/raid0.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff .prev/drivers/md/raid0.c ./drivers/md/raid0.c
--- .prev/drivers/md/raid0.c 2007-05-17 10:33:30.000000000 +1000
+++ ./drivers/md/raid0.c 2007-05-17 15:02:15.000000000 +1000@@ -475,7 +475,7 @@ static int raid0_make_request (request_q x = block >> chunksize_bits; tmp_dev = zone->dev[sector_div(x, zone->nb_dev)]; } - rsect = (((chunk << chunksize_bits) + zone->dev_offset)<<1) + rsect = ((((sector_t)chunk << chunksize_bits) + zone->dev_offset)<<1) + sect_in_chunk; bio->bi_bdev = tmp_dev->bdev;