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

Peter Zijlstra
2008-10-31T09:28:38Z

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.