Re: Re: fr1-2.16 patch for 2.6.10 kernel
denis bonnenfant <[email protected]>
| Newsgroups | gmane.linux.enbd.general |
|---|---|
| Message-ID | <[email protected]> |
>
> Can you bemore explicit?
>
I quickly hacked this instead of the test :
p=conf->mirrors+mirror;
printk(KERN_INFO "raid1 %d: ** p=%p mirror=%d\n", __LINE__, p, mirror);
if ( !p->rdev) {
p->rdev = rdev;
goto suite;
}
printk(KERN_INFO "raid1 %d: ** p->rdev=%p rdev=%p \n", __LINE__, p->rdev, rdev);
if (p->rdev == rdev){
printk(KERN_INFO "raid1 %d: ** %p \n", __LINE__, p->rdev->bdev);
printk(KERN_INFO "raid1 %d: ** %p \n", __LINE__, p->rdev->bdev->bd_inode);
printk(KERN_INFO "raid1 %d: ** %d \n", __LINE__, p->rdev->bdev->bd_inode->i_rdev);
printk(KERN_INFO "raid1 %d: ** %p \n", __LINE__, rdev->bdev);
printk(KERN_INFO "raid1 %d: ** %p \n", __LINE__, rdev->bdev->bd_inode);
printk(KERN_INFO "raid1 %d: ** %d \n", __LINE__, rdev->bdev->bd_inode->i_rdev);
goto suite;
}
printk(KERN_INFO "raid1 %d: ** %p \n", __LINE__, p->rdev->bdev);
printk(KERN_INFO "raid1 %d: ** %p \n", __LINE__, p->rdev->bdev->bd_inode);
printk(KERN_INFO "raid1 %d: ** %d \n", __LINE__, p->rdev->bdev->bd_inode->i_rdev);
printk(KERN_INFO "raid1 %d: ** %p \n", __LINE__, rdev->bdev);
printk(KERN_INFO "raid1 %d: ** %p \n", __LINE__, rdev->bdev->bd_inode);
printk(KERN_INFO "raid1 %d: ** %d \n", __LINE__, rdev->bdev->bd_inode->i_rdev);
if ( p->rdev->bdev->bd_inode->i_rdev == rdev->bdev->bd_inode->i_rdev) {
printk(KERN_INFO "raid1 %d: ** p=%p rdev=%p mirror=%d\n", __LINE__, p, rdev, mirror);
suite:
/*#else
if ( !(p=conf->mirrors+mirror)->rdev) {
p->rdev = rdev;
*/
#endif /* CONFIG_MD_FR1 */
blk_queue_stack_limits(mddev->queue,
rdev->bdev->bd_disk->queue);
and then i got :
md 3885: ** mddev=f7fc8480 rdev=f7ff96c0
md 3886: ** mddev->pers=f88a8de0
md 3887: ** mddev->pers->hot_add_disk=f88a5388
raid1 1055: ** p=f798ac00 mirror=0
raid1 1060: ** p->rdev=f71dd100 rdev=f7ff96c0
raid1 1070: ** 00000000
it's this line : printk(KERN_INFO "raid1 %d: ** %p \n", __LINE__, p->rdev->bdev);
It's just before the third if (
Unable to handle kernel NULL pointer dereference at virtual address 00000004
printing eip:
f88a54bb
*pde = 00000000
Oops: 0000 [#1]
So why p->rdev->bdev is NULL ?