Re: [Patch -mm 2/2] driver core: Introduce device_move(): move adevice

From: Cornelia Huck
Date: Wed Nov 22 2006 - 11:45:46 EST


On Wed, 22 Nov 2006 10:32:47 -0500 (EST),
Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> wrote:

> Cornelia Huck wrote:
>
> > + if (old_parent)
> > + klist_del(&dev->knode_parent);
> > + klist_add_tail(&dev->knode_parent, &new_parent->klist_children);
>
> > + klist_del(&dev->knode_parent);
> > + if (old_parent)
> > + klist_add_tail(&dev->knode_parent,
> > &old_parent->klist_children);
>
> This is wrong. klist_del() does not wait for the knode to be removed from
> its klist. You need to use klist_remove().

Hmpf, you're right.

> I don't see any protection against new_parent being removed while dev is
> being transferred under it. Are you relying on the caller to make sure
> this never happens?

Is there any mechanism in the driver core to avoid such races? The only
locking I can see are klists and dev->sem (which only protects
probing). AFAICS, the caller needs to ensure consistency anyway (like
with the subchannel mutex we introduced in s390 to ensure device
register and unregister cannot be called concurrently).

--
Cornelia Huck
Linux for zSeries Developer
Tel.: +49-7031-16-4837, Mail: cornelia.huck@xxxxxxxxxx
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/