The Samba guys want dnotify-like oneshot/multishot support.

That is not hard to add, so the following patch adds "oneshot" support
to inotify.  If IN_ONESHOT is set on a watch, the watch is automatically
removed after the first event.  Default behavior remains "multishot."

Best,

        Robert Love


Signed-off-by: Robert Love <[EMAIL PROTECTED]>

 fs/inotify.c            |    2 ++
 include/linux/inotify.h |    7 ++++---
 2 files changed, 6 insertions(+), 3 deletions(-)

diff -urN linux-2.6.12-rc3-inotify/fs/inotify.c linux/fs/inotify.c
--- linux-2.6.12-rc3-inotify/fs/inotify.c       2005-04-21 19:40:44.000000000 
-0400
+++ linux/fs/inotify.c  2005-04-21 19:37:24.000000000 -0400
@@ -509,6 +509,8 @@
                        struct inotify_device *dev = watch->dev;
                        down(&dev->sem);
                        inotify_dev_queue_event(dev, watch, mask, cookie, name);
+                       if (watch->mask & IN_ONESHOT)
+                               remove_watch_no_event(watch, dev);
                        up(&dev->sem);
                }
        }
diff -urN linux-2.6.12-rc3-inotify/include/linux/inotify.h 
linux/include/linux/inotify.h
--- linux-2.6.12-rc3-inotify/include/linux/inotify.h    2005-04-21 
19:40:44.000000000 -0400
+++ linux/include/linux/inotify.h       2005-04-21 19:37:25.000000000 -0400
@@ -49,11 +49,12 @@
 #define IN_DELETE_SELF         0x00001000      /* Self was deleted */
 #define IN_UNMOUNT             0x00002000      /* Backing fs was unmounted */
 #define IN_Q_OVERFLOW          0x00004000      /* Event queued overflowed */
-#define IN_IGNORED             0x00008000      /* File was ignored */
 
 /* special flags */
-#define IN_ALL_EVENTS          0xffffffff      /* All the events */
-#define IN_CLOSE               (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
+#define IN_IGNORED             0x00008000      /* File was ignored */
+#define IN_ONESHOT             0x80000000      /* only send event once */
+#define IN_ALL_EVENTS          (0xffffffff & ~IN_ONESHOT) /* All the events */
+#define IN_CLOSE               (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* close */
 
 #define INOTIFY_IOCTL_MAGIC    'Q'
 #define INOTIFY_IOCTL_MAXNR    2


-
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/

Reply via email to