On Thu, Feb 08, 2024 at 02:32:11PM -0500, Stefan Hajnoczi wrote: > Alyssa Ross <hi@xxxxxxxxx> requested that virtiofs notifies userspace > when filesytems become available. This can be used to detect when a > filesystem with a given tag is hotplugged, for example. uevents allow > userspace to detect changes without resorting to polling. > > The tag is included as a uevent property so it's easy for userspace to > identify the filesystem in question even when the sysfs directory goes > away during removal. > > Here are example uevents: > > # udevadm monitor -k -p > > KERNEL[111.113221] add /fs/virtiofs/2 (virtiofs) > ACTION=add > DEVPATH=/fs/virtiofs/2 > SUBSYSTEM=virtiofs > TAG=test > > KERNEL[165.527167] remove /fs/virtiofs/2 (virtiofs) > ACTION=remove > DEVPATH=/fs/virtiofs/2 > SUBSYSTEM=virtiofs > TAG=test > > Signed-off-by: Stefan Hajnoczi <stefanha@xxxxxxxxxx> > --- > fs/fuse/virtio_fs.c | 15 +++++++++++++++ > 1 file changed, 15 insertions(+) > > diff --git a/fs/fuse/virtio_fs.c b/fs/fuse/virtio_fs.c > index 28e96b7cde00..18a8f531e5d4 100644 > --- a/fs/fuse/virtio_fs.c > +++ b/fs/fuse/virtio_fs.c > @@ -270,6 +270,17 @@ static void virtio_fs_start_all_queues(struct virtio_fs *fs) > } > } > > +static void virtio_fs_uevent(struct virtio_fs *fs, enum kobject_action action) > +{ > + char tag_str[sizeof("TAG=") + > + sizeof_field(struct virtio_fs_config, tag) + 1]; > + char *envp[] = {tag_str, NULL}; > + > + snprintf(tag_str, sizeof(tag_str), "TAG=%s", fs->tag); > + > + kobject_uevent_env(&fs->kobj, action, envp); > +} > + > /* Add a new instance to the list or return -EEXIST if tag name exists*/ > static int virtio_fs_add_instance(struct virtio_device *vdev, > struct virtio_fs *fs) > @@ -309,6 +320,8 @@ static int virtio_fs_add_instance(struct virtio_device *vdev, > > mutex_unlock(&virtio_fs_mutex); > > + virtio_fs_uevent(fs, KOBJ_ADD); Why do you have to explicitly ask for the event? Doesn't sysfs trigger this for you automatically? Set the kset uevent callback for this, right? thanks, greg k-h