summaryrefslogtreecommitdiffstats
path: root/include/asm-generic/fcntl.h
diff options
context:
space:
mode:
authorEric Paris <eparis@redhat.com>2009-12-18 03:24:25 +0100
committerEric Paris <eparis@redhat.com>2010-07-28 15:58:54 +0200
commitecf081d1a73b077916f514f2ec744ded32b88ca1 (patch)
treef1a9892131a297d0f67cb0fd9189e3aac83e2219 /include/asm-generic/fcntl.h
parentfsnotify: take inode->i_lock inside fsnotify_find_mark_entry() (diff)
downloadlinux-ecf081d1a73b077916f514f2ec744ded32b88ca1.tar.xz
linux-ecf081d1a73b077916f514f2ec744ded32b88ca1.zip
vfs: introduce FMODE_NONOTIFY
This is a new f_mode which can only be set by the kernel. It indicates that the fd was opened by fanotify and should not cause future fanotify events. This is needed to prevent fanotify livelock. An example of obvious livelock is from fanotify close events. Process A closes file1 This creates a close event for file1. fanotify opens file1 for Listener X Listener X deals with the event and closes its fd for file1. This creates a close event for file1. fanotify opens file1 for Listener X Listener X deals with the event and closes its fd for file1. This creates a close event for file1. fanotify opens file1 for Listener X Listener X deals with the event and closes its fd for file1. notice a pattern? The fix is to add the FMODE_NONOTIFY bit to the open filp done by the kernel for fanotify. Thus when that file is used it will not generate future events. This patch simply defines the bit. Signed-off-by: Eric Paris <eparis@redhat.com>
Diffstat (limited to 'include/asm-generic/fcntl.h')
-rw-r--r--include/asm-generic/fcntl.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/include/asm-generic/fcntl.h b/include/asm-generic/fcntl.h
index fcd268ce0674..009bd6149d99 100644
--- a/include/asm-generic/fcntl.h
+++ b/include/asm-generic/fcntl.h
@@ -3,6 +3,14 @@
#include <linux/types.h>
+/*
+ * FMODE_EXEC is 0x20
+ * FMODE_NONOTIFY is 0x800000
+ * These cannot be used by userspace O_* until internal and external open
+ * flags are split.
+ * -Eric Paris
+ */
+
#define O_ACCMODE 00000003
#define O_RDONLY 00000000
#define O_WRONLY 00000001