--- /dev/null
+From e1b4bdb78692dc0f09859dc114fbedc66f24c486 Mon Sep 17 00:00:00 2001
+From: Amir Goldstein <amir73il@gmail.com>
+Date: Sat, 1 Sep 2018 09:40:01 +0300
+Subject: fsnotify: fix ignore mask logic in fsnotify()
+
+[ Upstream commit 9bdda4e9cf2dcecb60a0683b10ffb8cd7e5f2f45 ]
+
+Commit 92183a42898d ("fsnotify: fix ignore mask logic in
+send_to_group()") acknoledges the use case of ignoring an event on
+an inode mark, because of an ignore mask on a mount mark of the same
+group (i.e. I want to get all events on this file, except for the events
+that came from that mount).
+
+This change depends on correctly merging the inode marks and mount marks
+group lists, so that the mount mark ignore mask would be tested in
+send_to_group(). Alas, the merging of the lists did not take into
+account the case where event in question is not in the mask of any of
+the mount marks.
+
+To fix this, completely remove the tests for inode and mount event masks
+from the lists merging code.
+
+Fixes: 92183a42898d ("fsnotify: fix ignore mask logic in send_to_group")
+Signed-off-by: Amir Goldstein <amir73il@gmail.com>
+Signed-off-by: Jan Kara <jack@suse.cz>
+[amir: backport to v4.14.y]
+Signed-off-by: Amir Goldstein <amir73il@gmail.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ fs/notify/fsnotify.c | 14 +++++---------
+ 1 file changed, 5 insertions(+), 9 deletions(-)
+
+diff --git a/fs/notify/fsnotify.c b/fs/notify/fsnotify.c
+index d76c81323dc1..2bc61e7543dd 100644
+--- a/fs/notify/fsnotify.c
++++ b/fs/notify/fsnotify.c
+@@ -286,17 +286,13 @@ int fsnotify(struct inode *to_tell, __u32 mask, const void *data, int data_is,
+
+ iter_info.srcu_idx = srcu_read_lock(&fsnotify_mark_srcu);
+
+- if ((mask & FS_MODIFY) ||
+- (test_mask & to_tell->i_fsnotify_mask)) {
+- inode_conn = srcu_dereference(to_tell->i_fsnotify_marks,
++ inode_conn = srcu_dereference(to_tell->i_fsnotify_marks,
++ &fsnotify_mark_srcu);
++ if (inode_conn)
++ inode_node = srcu_dereference(inode_conn->list.first,
+ &fsnotify_mark_srcu);
+- if (inode_conn)
+- inode_node = srcu_dereference(inode_conn->list.first,
+- &fsnotify_mark_srcu);
+- }
+
+- if (mnt && ((mask & FS_MODIFY) ||
+- (test_mask & mnt->mnt_fsnotify_mask))) {
++ if (mnt) {
+ inode_conn = srcu_dereference(to_tell->i_fsnotify_marks,
+ &fsnotify_mark_srcu);
+ if (inode_conn)
+--
+2.17.1
+