On Tue, Dec 06, 2011 at 09:23:25AM +0800, boyd yang wrote: > fanotify: to differ file access event from different threads > When fanotify is monitoring the whole mount point "/", and multiple > threads iterate the same direcotry, some thread will hang. > This patch let fanotify to differ access events from different > threads, prevent fanotify from merging access events from different > threads. I could reproduce the problem you described. Actually it may occur each time when more than one thread of a process is waiting in fanotify_get_response() at the same time. This is since we are not prepared to wake up more than one waiter: We do wait_event(group->fanotify_data.access_waitq, event->response || atomic_read(&group->fanotify_data.bypass_perm)); and after that event->response = 0; which is the reason that even if we woke up other waiters on the same waitqueue they may see event->response being already 0, go back to sleep and then possibly hang forever. > It also hide overflow events to reach user space. This is not part of this patch and also should not be, since overflow events are supposted to reach user space. > - if (event->mask & FAN_ALL_PERM_EVENTS) { > - /* if we merged we need to wait on the new event */ > - if (notify_event) > - event = notify_event; > - ret = fanotify_get_response_from_access(group, event); > + /*if overflow, do not wait for response*/ > + if (event->mask&FS_Q_OVERFLOW) { > + pr_debug("fanotify overflow!\n"); > + } else { > + if (event->mask & FAN_ALL_PERM_EVENTS) { > + /* if we merged we need to wait on the new event */ > + if (notify_event) > + event = notify_event; > + ret = fanotify_get_response_from_access(group, event); > + } > } What is this for? All you do is introduce a debug message for no real reason. However your fix (avoid merging of events from the same process) seems to work. Regards, Lino -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html