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 denis bonnenfant:"
>   ITERATE_RDEV(mddev,rdev,rtmp) {
>       if (!mddev) {
>           printk(KERN_INFO "md: *****BUG***mddev***********!!!\n");
>           break;
>       }
>       printk(KERN_INFO "md: *****mddev=%p rdev=%p *************!!!\n", mddev, rdev);
>       if (!rdev) {
>           printk(KERN_INFO "md: *****BUG**rdev*************!!!\n");
>           break;
>       }
> 
> and got this  :
> 
> Mar 22 09:13:18 ldap-fixe kernel: md: 3846
> Mar 22 09:13:18 ldap-fixe kernel: md: *****mddev=f7fc8480 rdev=f7188b40 *************!!!
> Mar 22 09:13:18 ldap-fixe kernel: Unable to handle kernel NULL pointer dereference at virtual address 00000004

OK. And you are sure it does not exit from the ITERATE_RDEV loop? Good.

ITERATE_RDEV(mddev,rdev,rtmp)

is

        for (rtmp = mddev->disks.next;

             rdev = list_entry(rtmp, mdk_rdev_t, same_set),
             rtmp = rtmp->next,
             rtmp->prev != &mddev->disks

             ; )

so please expand the loop as follows:

    rtmp = mddev->disks.next;
    while (1) {

        printk(KERN_INFO "md %d: ** mddev=%p rdev=%p\n", __LINE__, mddev, rdev);

        rdev = list_entry(rtmp, mdk_rdev_t, same_set);
        rtmp = rtmp->next;
        if (rtmp->prev == &mddev->disks)
            break;

        if (rdev->raid_disk < 0 && !rdev->faulty) {
            if (mddev->pers->hot_add_disk(mddev,rdev))
                spares++;
            else
                break;
        }
    }



Peter
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.