Asser Femø wrote: > According to the fcntl manual you can cancel a notification by doing > fcntl(fd, F_NOTIFY, 0) (ie. sending 0 as the notification mask), but > looking in the kernel code fcntl_dirnotify() immediately calls > dnotify_flush() with neither telling the vfs module about it. Is there a > reason for this? Otherwise I'd propose calling > filp->f_op->dir_notify(filp, 0) at some point in this scenario. > > Regarding inotify, inotify_add_watch doesn't seem to pass on the request > either, which works fine for local filesystem operations as they call > fsnotify_* functions every time, but that isn't really feasible for > filesystems like cifs because we'd have to request change notification > on everything. Is there plans for implementing a mechanism to let vfs > modules get watch requests too?
On a related note: dnotify and inotify on local filesystems appear to be synchronous, in the following rather useful sense: If you have previously registered for inotify/dnotify events that will catch a change to a file, and called stat() on the file, then the following operation: <receive some request>... stat_info = stat(file) may be replaced in userspace code with: <receive some request>... if (any_dnotify_or_inotify_events_pending) { read_dnotify_or_inotify_events(); if (any_events_related_to(file)) { store_in_userspace_stat_cache(file, stat(file)); } } stat_info = lookup_userspace_stat_cache(file); Now that's a silly way to save one system call in the fast path by itself. But when the stat_info is a prerequisite for validating cached data -- such as the contents of a file parsed into a data structure -- it can save a lot of system calls and logical work. For example, an Apache-style path walk which checks for .htaccess, or a Samba-style path walk which is checking for unsafe symbolic links, can be reduced from say 20 system calls to zero using this method. Pre-compiled or pre-parsed programs/scripts/templates/config-files where all the source files used are prerequisites for invalidating a cached compiled form, reduces from say 40 system calls to stat() all the source files, to zero.... that's quite a saving. It's not just reducing system calls. The logical tests in userspace are also skipped, if coded properly, facilitating very quick decisions about things that depend on files which mostly don't change. (Cascading structured cache prerequisites...mmm). Remote dnotify/inotify doesn't _necessarily_ have this synchronous property. It may do in some cases, depending on the implementation (this is subtle...). So, it would be nice if there was a way to query this... rather than the tedious method of testing the filesystem type and having a table of "known local filesystem types" where it's safe to depend on this property. Alternatively, a way to specify at dnotify/inotify creation type that synchronous notifications are required, and have the request rejected if those can't be provided. -- Jamie - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/