--- /dev/null
+Index: samba-3.6.6/source3/smbd/notify_inotify.c
+===================================================================
+--- samba-3.6.6.orig/source3/smbd/notify_inotify.c
++++ samba-3.6.6/source3/smbd/notify_inotify.c
+@@ -77,6 +77,7 @@ struct inotify_private {
+ struct sys_notify_context *ctx;
+ int fd;
+ struct inotify_watch_context *watches;
++ bool broken_inotify; /* Late stop for broken system */
+ };
+
+ struct inotify_watch_context {
+@@ -241,8 +242,15 @@ static void inotify_handler(struct event
+ filenames, and thus can't know how much to allocate
+ otherwise
+ */
+- if (ioctl(in->fd, FIONREAD, &bufsize) != 0 ||
+- bufsize == 0) {
++ if ((ioctl(in->fd, FIONREAD, &bufsize) != 0) && (errno == EACCES)) {
++ /*
++ * Workaround for broken system (SELinux policy bug fixed since long but it is always better not to loop on EACCES)
++ */
++ TALLOC_FREE(fde);
++ in->broken_inotify = True;
++ return;
++ }
++ if (bufsize == 0) {
+ DEBUG(0,("No data on inotify fd?!\n"));
+ TALLOC_FREE(fde);
+ return;
+@@ -300,6 +308,7 @@ static NTSTATUS inotify_setup(struct sys
+ }
+ in->ctx = ctx;
+ in->watches = NULL;
++ in->broken_inotify = False;
+
+ ctx->private_data = in;
+ talloc_set_destructor(in, inotify_destructor);
+@@ -394,6 +403,10 @@ NTSTATUS inotify_watch(struct sys_notify
+
+ in = talloc_get_type(ctx->private_data, struct inotify_private);
+
++ if (in->broken_inotify) {
++ return NT_STATUS_OK;
++ }
++
+ mask = inotify_map(e);
+ if (mask == 0) {
+ /* this filter can't be handled by inotify */