I can try and do this later this week possibly. Justin. On Tue, 23 Jan 2007, Neil Brown wrote: > On Monday January 22, kylewong@xxxxxxxxxx wrote: > > Hi, > > > > Yesterday I tried to increase the value of strip_cache_size to see if I can > > get better performance or not. I increase the value from 2048 to something > > like 16384. After I did that, the raid5 freeze. Any proccess read / write to > > it stucked at D state. I tried to change it back to 2048, read > > strip_cache_active, cat /proc/mdstat, mdadm stop, etc. All didn't return > > back. I even cannot shutdown the machine. Finally I need to press the reset > > button in order to get back my control. > > Thanks for reporting this. > > alt-sysrq-T or "echo t > /proc/sysrq-trigger" can be really helpful to > diagnose this sort of problem (providing the system isn't so badly > stuck that the kernel logs don't get stored). > > It is probably hitting a memory-allocation deadlock, though I cannot > see exactly where the deadlock would be. If you are able to reproduce > it and can get the kernel logs after 'alt-sysrq-T' I would really > appreciate it. > > This patch will almost certainly fix the problem, though I would like > to completely understand it first.... > > NeilBrown > > > > Signed-off-by: Neil Brown <neilb@xxxxxxx> > > ### Diffstat output > ./drivers/md/raid5.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff .prev/drivers/md/raid5.c ./drivers/md/raid5.c > --- .prev/drivers/md/raid5.c 2007-01-22 09:08:16.000000000 +1100 > +++ ./drivers/md/raid5.c 2007-01-23 07:17:25.000000000 +1100 > @@ -205,7 +205,7 @@ static int grow_buffers(struct stripe_he > for (i=0; i<num; i++) { > struct page *page; > > - if (!(page = alloc_page(GFP_KERNEL))) { > + if (!(page = alloc_page(GFP_IO))) { > return 1; > } > sh->dev[i].page = page; > @@ -321,7 +321,7 @@ static struct stripe_head *get_active_st > static int grow_one_stripe(raid5_conf_t *conf) > { > struct stripe_head *sh; > - sh = kmem_cache_alloc(conf->slab_cache, GFP_KERNEL); > + sh = kmem_cache_alloc(conf->slab_cache, GFP_IO); > if (!sh) > return 0; > memset(sh, 0, sizeof(*sh) + (conf->raid_disks-1)*sizeof(struct r5dev)); > - > To unsubscribe from this list: send the line "unsubscribe linux-raid" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > - To unsubscribe from this list: send the line "unsubscribe linux-raid" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html