Re: Re: fr1-2.16 patch for 2.6.10 kernel
"Peter T. Breuer" <[email protected]>
| Newsgroups | gmane.linux.enbd.general |
|---|---|
| Message-ID | <[email protected]> |
"Also sprach Peter T. Breuer:" > In article <[email protected]> you wrote: > > So why p->rdev->bdev is NULL ? > > rdev->bdev is null? > > Oh. OK. I'll take a look. It's fairly clear that unlock_rdev() has been run. static void unlock_rdev(mdk_rdev_t *rdev) { struct block_device *bdev = rdev->bdev; rdev->bdev = NULL; ^^^^^^^^^^^^^^^^^^^ if (!bdev) MD_BUG(); bd_release(bdev); blkdev_put(bdev, BDEV_RAW); } It probably has been run from export_rdev() static void export_rdev(mdk_rdev_t * rdev) { char b[BDEVNAME_SIZE]; printk(KERN_INFO "md: export_rdev(%s)\n", bdevname(rdev->bdev,b)); if (rdev->mddev) MD_BUG(); free_disk_sb(rdev); list_del_init(&rdev->same_set); #ifndef MODULE md_autodetect_dev(rdev->bdev->bd_dev); #endif unlock_rdev(rdev); ^^^^^^^^^^^^^^^^^^ kfree(rdev); } And that could come from many places. In particular kick_rdev_from_array(). static void kick_rdev_from_array(mdk_rdev_t * rdev) { unbind_rdev_from_array(rdev); export_rdev(rdev); ^^^^^^^^^^^^^^^^^^^ } And are you seeing this ONLY after the disk has failed to be recognized on reinsertion, because of a different UUID? Humour me .... can you perform your experiment NOT with scsi disks, but with a pair of loopback devices as mirror components? dd if=/dev/zero bs=1k count=4k of=/tmp/core0 dd if=/dev/zero bs=1k count=4k of=/tmp/core1 losetup /dev/loop0 /tmp/core0 losetup /dev/loop1 /tmp/core1 mdadm -C -l 1 -n 2 -x 0 /dev/md0 /dev/loop{0,1} ??