Re: Raid 1 on 2.2.10 under RH6.0

Mike Galbraith (mikeg@weiden.de)
Sat, 19 Jun 1999 07:00:54 +0200 (CEST)


On Fri, 18 Jun 1999, Enéas Ulir de Queiroz wrote:

> Hello
>
> RAID-1 and RAID-5 are disable on stock kernels. You need patches from
> ftp://ftp.fi.kernel.org/pub/linux/daemons/raid/alpha.
> The HOWTO can be found at
> http://ostenfeld.dk/~jakob/Software-RAID.HOWTO/
>
> By the way, the latest kernel for which it works is 2.2.7. From 2.2.8 on
> the array will not sync. I think it is something related to the
> scheduling changes in 2.2.8.

Excellent.. I thought it was only here. (assuming I have broken something
is usually pretty safe :)

Anyway, I started stumbling around (2.3.6) looking for why, but have only
found what looks like a circular task_list so far. Is wait_on_buffer()
forever the same problem you see there?

-Mike

kdb> btp 194
EBP Caller Function(args)
0xc35e3f20 0xc0128705 schedule()
0xc35e3fb4 0xc01b189d __wait_on_buffer(0xc31f1440)
0xc35e3fd4 0xc01b4b0e md_do_sync(0xc3510380, 0x0)
0xc35e3fec 0xc01b0892 raid1syncd(0xc34a4a00)
0xc32a9da0 0xc01065f3 md_thread(0xc000be00, 0xc000be00, 0xc32a9e08, , )
kdb> go
(gdb) print *(struct buffer_head *)0x31f1440
$1 = {b_next = 0x0, b_blocknr = 127, b_size = 1024, b_dev = 2305,
b_rdev = 2305, b_rsector = 254, b_this_page = 0xc31f1560, b_state = 137,
b_next_free = 0xc3286a40, b_count = 2,
b_data = 0xc31eec00 <Address 0xc31eec00 out of bounds>, b_list = 0,
b_flushtime = 0, b_wait = {lock = {gcc_is_buggy = 0}, task_list = {
next = 0xc35e3f10, prev = 0xc35e3f10}, __magic = -1021373316,
__creator = -1072522408}, b_pprev = 0xc00225f8, b_prev_free = 0xc31f14a0,
b_reqnext = 0x0, b_end_io = 0xc01294e0 <end_buffer_io_sync>, b_dev_id = 0x0}
(gdb) list *0xc01b189d
0xc01b189d is in md_do_sync (/usr/src/linux/include/asm/bitops.h:118).
113 __asm__ __volatile__(
114 "btl %2,%1\n\tsbbl %0,%0"
115 :"=r" (oldbit)
116 :"m" (ADDR),"Ir" (nr));
117 return oldbit;
118 }
119
120 #define test_bit(nr,addr) \
121 (__builtin_constant_p(nr) ? \
122 __constant_test_bit((nr),(addr)) : \
(gdb) list *0xc01b188f
0xc01b188f is in md_do_sync (md.c:3401).
3396 ll_rw_block(WRITE, chunk, bh);
3397 run_task_queue(&tq_disk);
3398
3399 for (i = 0; i < chunk; i++) {
3400 ii = chunk-i-1;
3401 wait_on_buffer(bh[ii]);
3402
3403 if (spare && disk_faulty(spare)) {
3404 for (k = 0; k < chunk; k++)
3405 brelse(bh[k]);
(gdb)

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/