Re: [2.6.26] kobject_add_internal failed for 2:0 with -EEXIST / unable to handle kernel NULL pointer dereference in sysfs_create_link

Kay Sievers
2008-11-03T11:53:19Z

On Fri, Oct 31, 2008 at 10:28, Peter Zijlstra <a.p.zijlstra@chello.nl> wrote:
> On Fri, 2008-10-31 at 00:23 +0100, Kay Sievers wrote:
>
>> Peter, it looks like bdi does not work for devices which share a single queue.
>> If I add:
>> --- a/mm/backing-dev.c
>> +++ b/mm/backing-dev.c
>> @@ -184,6 +184,8 @@ int bdi_register(struct backing_dev_info *bdi,
>> struct device *parent,
>> goto exit;
>> }
>>
>> + printk("XXXXXXX old bdidev is %p\n", bdi->dev);
>> + printk("XXXXXXX new bdidev is %p\n", dev);
>> bdi->dev = dev;
>> bdi_debug_register(bdi, dev_name(dev));
>>
>> I get:
>> $ modprobe floppy
>> Floppy drive(s): fd0 is 1.44M, fd1 is 1.44M
>> FDC 0 is a S82078B
>> XXXXXXX old bdidev is 0000000000000000
>> XXXXXXX new bdidev is ffff88001f20cd10
>> XXXXXXX old bdidev is ffff88001f20cd10
>> XXXXXXX new bdidev is ffff88001f20de30
>>
>> which very much looks like bdi will not remove any earlier registered
>> device, only the last one, right?
>
> Sharing a bdi is odd to begin with, let me poke at this a little.

Yeah, it's odd, but I'm not sure if you want to touch floppy.c. :)
Any objection to this patch, until you possible fix it differently?
http://marc.info/?l=linux-kernel&m=122541569310798&w=4

Kay