On Fri, Feb 09, 2024 at 10:39:04AM +0000, Greg KH wrote: > 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? I haven't found a way to get an implicit KOBJ_ADD uevent. device_add() and other kset_uevent_ops users emit KOBJ_ADD manually too. Grepping for KOBJ_ADD in fs/sysfs/ and lib/ doesn't produce any useful results either. It is possible to eliminate the explicit KOBJ_REMOVE though because kobject_del() already calls it. I will fix that and switch to kset_uevent_ops->uevent(). Thanks, Stefan
Attachment:
signature.asc
Description: PGP signature