Skip to content

Commit

Permalink
fanotify: allow userspace to override max queue depth
Browse files Browse the repository at this point in the history
fanotify has a defualt max queue depth.  This patch allows processes which
explicitly request it to have an 'unlimited' queue depth.  These processes
need to be very careful to make sure they cannot fall far enough behind
that they OOM the box.  Thus this flag is gated on CAP_SYS_ADMIN.

Signed-off-by: Eric Paris <eparis@redhat.com>
  • Loading branch information
Eric Paris committed Oct 28, 2010
1 parent 2529a0d commit 5dd03f5
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 3 deletions.
9 changes: 8 additions & 1 deletion fs/notify/fanotify/fanotify_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -691,7 +691,14 @@ SYSCALL_DEFINE2(fanotify_init, unsigned int, flags, unsigned int, event_f_flags)
goto out_put_group;
}

group->max_events = FANOTIFY_DEFAULT_MAX_EVENTS;
if (flags & FAN_UNLIMITED_QUEUE) {
fd = -EPERM;
if (!capable(CAP_SYS_ADMIN))
goto out_put_group;
group->max_events = UINT_MAX;
} else {
group->max_events = FANOTIFY_DEFAULT_MAX_EVENTS;
}

fd = anon_inode_getfd("[fanotify]", &fanotify_fops, group, f_flags);
if (fd < 0)
Expand Down
5 changes: 3 additions & 2 deletions include/linux/fanotify.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,13 @@
#define FAN_CLASS_NOTIF 0x00000000
#define FAN_CLASS_CONTENT 0x00000004
#define FAN_CLASS_PRE_CONTENT 0x00000008

#define FAN_ALL_CLASS_BITS (FAN_CLASS_NOTIF | FAN_CLASS_CONTENT | \
FAN_CLASS_PRE_CONTENT)

#define FAN_UNLIMITED_QUEUE 0x00000010

#define FAN_ALL_INIT_FLAGS (FAN_CLOEXEC | FAN_NONBLOCK | \
FAN_ALL_CLASS_BITS)
FAN_ALL_CLASS_BITS | FAN_UNLIMITED_QUEUE)

/* flags used for fanotify_modify_mark() */
#define FAN_MARK_ADD 0x00000001
Expand Down

0 comments on commit 5dd03f5

Please sign in to comment.