Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 223359
b: refs/heads/master
c: 09e5f14
h: refs/heads/master
i:
  223357: 3b164fa
  223355: c8e8b81
  223351: 6629be4
  223343: 271acbf
  223327: a2a8884
  223295: 2c23e17
  223231: 3ba73eb
v: v3
  • Loading branch information
Lino Sanfilippo authored and Eric Paris committed Dec 7, 2010
1 parent 002bd7b commit 02f68c9
Show file tree
Hide file tree
Showing 4 changed files with 10 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 1734dee4e3a296cb72b4819fc2e7ef2440737dff
refs/heads/master: 09e5f14e57c70f9d357862bb56e57026c51092a1
6 changes: 5 additions & 1 deletion trunk/fs/notify/fanotify/fanotify.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,11 @@ static int fanotify_get_response_from_access(struct fsnotify_group *group,

pr_debug("%s: group=%p event=%p\n", __func__, group, event);

wait_event(group->fanotify_data.access_waitq, event->response);
wait_event(group->fanotify_data.access_waitq, event->response ||
atomic_read(&group->fanotify_data.bypass_perm));

if (!event->response) /* bypass_perm set */
return 0;

/* userspace responded, convert to something usable */
spin_lock(&event->lock);
Expand Down
5 changes: 3 additions & 2 deletions trunk/fs/notify/fanotify/fanotify_user.c
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ static int prepare_for_access_response(struct fsnotify_group *group,

mutex_lock(&group->fanotify_data.access_mutex);

if (group->fanotify_data.bypass_perm) {
if (atomic_read(&group->fanotify_data.bypass_perm)) {
mutex_unlock(&group->fanotify_data.access_mutex);
kmem_cache_free(fanotify_response_event_cache, re);
event->response = FAN_ALLOW;
Expand Down Expand Up @@ -390,7 +390,7 @@ static int fanotify_release(struct inode *ignored, struct file *file)

mutex_lock(&group->fanotify_data.access_mutex);

group->fanotify_data.bypass_perm = true;
atomic_inc(&group->fanotify_data.bypass_perm);

list_for_each_entry_safe(re, lre, &group->fanotify_data.access_list, list) {
pr_debug("%s: found group=%p re=%p event=%p\n", __func__, group,
Expand Down Expand Up @@ -703,6 +703,7 @@ SYSCALL_DEFINE2(fanotify_init, unsigned int, flags, unsigned int, event_f_flags)
mutex_init(&group->fanotify_data.access_mutex);
init_waitqueue_head(&group->fanotify_data.access_waitq);
INIT_LIST_HEAD(&group->fanotify_data.access_list);
atomic_set(&group->fanotify_data.bypass_perm, 0);
#endif
switch (flags & FAN_ALL_CLASS_BITS) {
case FAN_CLASS_NOTIF:
Expand Down
2 changes: 1 addition & 1 deletion trunk/include/linux/fsnotify_backend.h
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ struct fsnotify_group {
struct mutex access_mutex;
struct list_head access_list;
wait_queue_head_t access_waitq;
bool bypass_perm; /* protected by access_mutex */
atomic_t bypass_perm;
#endif /* CONFIG_FANOTIFY_ACCESS_PERMISSIONS */
int f_flags;
unsigned int max_marks;
Expand Down

0 comments on commit 02f68c9

Please sign in to comment.