[ENBD] fr1 hangs when trying to access raid device..
Peter T. Breuer
enbd@lists.community.tummy.com
Wed, 5 Feb 2003 20:34:52 +0100 (MET)
"A month of sundays ago [Arve Emil Myr_s] wrote:"
> Oky, on the other hand,,;
> this only get stranger... i can access the raid with dd.. but watch this:
>
>
> vserv:~ # cat /etc/raidtab
> # autogenerated /etc/raidtab by YaST2
>
>
> raiddev /dev/fr10
> raid-level 1
> nr-raid-disks 2
> nr-spare-disks 0
You are missing a persistent block declaration. You want it to say
"no".
> chunk-size 4096
> device /dev/loop0
> raid-disk 0
> device /dev/loop1
> raid-disk 1
> vserv:~ # mkraid --really-force /dev/fr10
> cannot determine md version: No such file or directory
> cannot determine md version: No such file or directory
This implies that /dev/fr10 has no driver at this point, because the
driver DOES respond to the version ioctl call. You can check with
strace, but it's this section of the code:
case FR1_VERSION:
// PTB allow even if no device present
err = fr1_getversion (&ver);
if (copy_to_user ((char *) arg, &ver, sizeof (ver)) != 0) {
return -EFAULT;
}
return err;
please check with strace. What it returns is ..
static int
fr1_getversion (mdu_version_t * ver)
{
// PTB pure nonsense. We just want to say "ok" back to raid tools
ver->major = MD_MAJOR_VERSION;
ver->minor = MD_MINOR_VERSION;
ver->patchlevel = MD_PATCHLEVEL_VERSION;
return 0;
}
and these come from your kernel code.
> DESTROYING the contents of /dev/fr10 in 5 seconds, Ctrl-C if unsure!
> /dev/fr10: not an MD device!
> handling MD device /dev/fr10
> analyzing super-block
Yes, well there you have a problem, because you are running with a
persistent superblock and I don't handle that at all!
> disk 0: /dev/loop0, 4000kB, raid superblock at 3904kB
> disk 1: /dev/loop1, 4000kB, raid superblock at 3904kB
> vserv:~ # cat /proc/fr1stat
> Personalities : [raid1]
> read_ahead 4 sectors
> fr10 : inactive fr1 [dev 07:00][0] [dev 07:01][1]
> 0 blocks
And it shows up.
> Feb 5 20:02:17 vserv kernel: loop: loaded (max 8 devices)
> Feb 5 20:02:45 vserv kernel: fr1 open device 240:0
> Feb 5 20:02:45 vserv kernel: fr1 ioctl 40480923
> Feb 5 20:02:45 vserv kernel: fr1 mkraid1 on device 0
> Feb 5 20:02:45 vserv kernel: fr1 ioctl 40140921
> Feb 5 20:02:45 vserv kernel: fr1 hotadd called to add for device 700
> Feb 5 20:02:45 vserv kernel: fr1 create element 7:0 size 16000 blocks
> Feb 5 20:02:45 vserv kernel: fr1 hotadd component 07:00[0] to device 0
> Feb 5 20:02:45 vserv kernel: fr1 added new device 07:00 to f7a6ec00 with err 0
> Feb 5 20:02:45 vserv kernel: fr1 ioctl 40140921
> Feb 5 20:02:45 vserv kernel: fr1 hotadd called to add for device 701
> Feb 5 20:02:45 vserv kernel: fr1 create element 7:1 size 16000 blocks
> Feb 5 20:02:45 vserv kernel: fr1 hotadd component 07:01[1] to device 0
> Feb 5 20:02:45 vserv kernel: fr1 added new device 07:01 to f7a6ec00 with err 0
Both elements are OK. One would need to uncomment some printks to see
why the size is calculated as 0. It is. But running with the persistent
duperblock already puts it outside the known parameters.
> Feb 5 20:02:45 vserv kernel: fr1 open device 240:0
> Feb 5 20:02:45 vserv kernel: fr1 ioctl 902
> Feb 5 20:02:45 vserv kernel: fr1 close on device 240:0
> Feb 5 20:02:45 vserv kernel: fr1 close on device 240:0
>
>
> i can do a dd to /dev/fr10 here but anything else reports that the device i 0-blocks...
>
> btw: i know i load the same code that i compile, else i would not different major's when i recompile with different major in the .h file..
That doesn't convince me!
Do it again, without a persistent superblock.
Peter