These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / fs / notify / fsnotify.c
index dd3fb0b..db39de2 100644 (file)
@@ -26,7 +26,6 @@
 
 #include <linux/fsnotify_backend.h>
 #include "fsnotify.h"
-#include "../mount.h"
 
 /*
  * Clear all of the marks on an inode when it is being evicted from core
@@ -204,6 +203,16 @@ int fsnotify(struct inode *to_tell, __u32 mask, void *data, int data_is,
        else
                mnt = NULL;
 
+       /*
+        * Optimization: srcu_read_lock() has a memory barrier which can
+        * be expensive.  It protects walking the *_fsnotify_marks lists.
+        * However, if we do not walk the lists, we do not have to do
+        * SRCU because we have no references to any objects and do not
+        * need SRCU to keep them "alive".
+        */
+       if (hlist_empty(&to_tell->i_fsnotify_marks) &&
+           (!mnt || hlist_empty(&mnt->mnt_fsnotify_marks)))
+               return 0;
        /*
         * if this is a modify event we may need to clear the ignored masks
         * otherwise return if neither the inode nor the vfsmount care about