2013-08-11 04:54:15

by Michael Marineau

[permalink] [raw]
Subject: [PATCH] 9p: send uevent after adding/removing mount_tag attribute

This driver adds an attribute to the existing virtio device so a CHANGE
event is required in order udev rules to make use of it. The ADD event
happens before this driver is probed and unlike a more typical driver
like a block device there isn't a higher level device to watch for.

Signed-off-by: Michael Marineau <[email protected]>
---
net/9p/trans_virtio.c | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c
index e1c26b1..990afab 100644
--- a/net/9p/trans_virtio.c
+++ b/net/9p/trans_virtio.c
@@ -577,6 +577,10 @@ static int p9_virtio_probe(struct virtio_device *vdev)
mutex_lock(&virtio_9p_lock);
list_add_tail(&chan->chan_list, &virtio_chan_list);
mutex_unlock(&virtio_9p_lock);
+
+ /* Let udev rules use the new mount_tag attribute. */
+ kobject_uevent(&(vdev->dev.kobj), KOBJ_CHANGE);
+
return 0;

out_free_tag:
@@ -654,6 +658,7 @@ static void p9_virtio_remove(struct virtio_device *vdev)
list_del(&chan->chan_list);
mutex_unlock(&virtio_9p_lock);
sysfs_remove_file(&(vdev->dev.kobj), &dev_attr_mount_tag.attr);
+ kobject_uevent(&(vdev->dev.kobj), KOBJ_CHANGE);
kfree(chan->tag);
kfree(chan->vc_wq);
kfree(chan);
--
1.8.1.5


2013-08-11 05:11:01

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH] 9p: send uevent after adding/removing mount_tag attribute

On Sun, Aug 11, 2013 at 12:53:45AM -0400, Michael Marineau wrote:
> This driver adds an attribute to the existing virtio device so a CHANGE
> event is required in order udev rules to make use of it. The ADD event
> happens before this driver is probed and unlike a more typical driver
> like a block device there isn't a higher level device to watch for.
>
> Signed-off-by: Michael Marineau <[email protected]>
> ---
> net/9p/trans_virtio.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c
> index e1c26b1..990afab 100644
> --- a/net/9p/trans_virtio.c
> +++ b/net/9p/trans_virtio.c
> @@ -577,6 +577,10 @@ static int p9_virtio_probe(struct virtio_device *vdev)
> mutex_lock(&virtio_9p_lock);
> list_add_tail(&chan->chan_list, &virtio_chan_list);
> mutex_unlock(&virtio_9p_lock);
> +
> + /* Let udev rules use the new mount_tag attribute. */
> + kobject_uevent(&(vdev->dev.kobj), KOBJ_CHANGE);

Ick, this is due to the sysfs file being added to the device after udev
was told the device was present.

I'm working on cleaning all of this up, to keep stuff like this from
happening in the first place, by creating all of the needed files before
userspace is told about the object, but it's a long slog, and will take
a year or so to get it all right, the first pieces of this are going to
be showing up in 3.12 or .13 at the earliest.

For now, I have no objection to this patch at all, especially as it
solves the problem for you.

Acked-by: Greg Kroah-Hartman <[email protected]>