watch_mount(), watch_sb(), and fsinfo() (again)
watch_mount(), watch_sb(), and fsinfo() (again)
Posted Feb 25, 2020 4:32 UTC (Tue) by anguslees (subscriber, #7131)Parent article: watch_mount(), watch_sb(), and fsinfo() (again)
Posted Feb 25, 2020 7:00 UTC (Tue)
by smurf (subscriber, #17840)
[Link] (8 responses)
Posted Feb 25, 2020 10:11 UTC (Tue)
by Cyberax (✭ supporter ✭, #52523)
[Link] (1 responses)
Posted Feb 25, 2020 14:38 UTC (Tue)
by alison (subscriber, #63752)
[Link]
The author of "man fanotify" appears to have the same question:
The fanotify API provides notification and interception of filesystem events.
Posted Feb 25, 2020 22:36 UTC (Tue)
by neilbrown (subscriber, #359)
[Link] (3 responses)
Posted Feb 26, 2020 7:24 UTC (Wed)
by maxfragg (guest, #122266)
[Link] (2 responses)
Posted Feb 26, 2020 14:25 UTC (Wed)
by Paf (subscriber, #91811)
[Link]
I mean maybe netlink would be superior, but this seems nicely trivial. It’s not like they’re knocking up a netlink competitor, just using a trivial interface where they can.
Posted Feb 28, 2020 14:43 UTC (Fri)
by dhowells (guest, #55933)
[Link]
As has been mentioned, there are existing solutions:
Pipes have disadvantages too: no message loss reporting (I'm having to add it); pipe ring buffer metadata elements generally larger than common messages (might be able to optimise in future to store small data in the ring). Note that I didn't want to use pipes either: I was originally using a mappable chardev ring buffer but Linus said I had to use pipes instead.
Posted Feb 27, 2020 14:47 UTC (Thu)
by kugel (subscriber, #70540)
[Link] (1 responses)
A pipe seems really awkward for one-way event notifications.
Posted Feb 28, 2020 14:15 UTC (Fri)
by dhowells (guest, #55933)
[Link]
watch_mount(), watch_sb(), and fsinfo() (again)
watch_mount(), watch_sb(), and fsinfo() (again)
watch_mount(), watch_sb(), and fsinfo() (again)
Use cases include virus scanning and hierarchical storage management. **Cur‐
rently, only a limited set of events is supported.**
watch_mount(), watch_sb(), and fsinfo() (again)
watch_mount(), watch_sb(), and fsinfo() (again)
But I have to agree, having one encouraged interface (probably netlink, or maybe even epoll here?) to be used for any new interface of this type would be a good idea
watch_mount(), watch_sb(), and fsinfo() (again)
watch_mount(), watch_sb(), and fsinfo() (again)
- messages can be longer than 8 bytes (say up to 128 bytes);
- message queueing requires no on-the-spot allocation and can be done from softirq/irq context or inside spinlocks;
- messages can come from a variety of sources (e.g. mount(2), add_key(2), keyctl(2), sb errors, usb notifications, ...);
- messages from different sources can be in the same queue;
- messages may need copying into multiple queues;
- filters can be easily employed;
- message loss reporting.
- Netlink:
- would make the core VFS dependent on the networking code.
- would require GFP_ATOMIC message allocation at the point of generation (at least sometimes).
- doesn't seem to make it easy to do message loss reporting.
- epoll is for dealing with file descriptors - but we're not dealing with fd events.
- Not all sources I need notifications for can be addressed with fanotify.
- eventfd() has 8-byte messages.
watch_mount(), watch_sb(), and fsinfo() (again)
watch_mount(), watch_sb(), and fsinfo() (again)