APPLIED: [Bionic][SRU][PATCH 1/1] fsnotify: fix ignore mask logic in fsnotify()
Kleber Souza
kleber.souza at canonical.com
Wed Jan 9 15:09:29 UTC 2019
On 11/22/18 12:31 PM, Po-Hsu Lin wrote:
> From: Amir Goldstein <amir73il at gmail.com>
>
> BugLink: https://bugs.launchpad.net/bugs/1802454
>
> 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 at gmail.com>
> Signed-off-by: Jan Kara <jack at suse.cz>
> (backported from commit 9bdda4e9cf2dcecb60a0683b10ffb8cd7e5f2f45)
> Signed-off-by: Po-Hsu Lin <po-hsu.lin at canonical.com>
> ---
> fs/notify/fsnotify.c | 13 +++----------
> 1 file changed, 3 insertions(+), 10 deletions(-)
>
> diff --git a/fs/notify/fsnotify.c b/fs/notify/fsnotify.c
> index 613ec7e..6a862aa 100644
> --- a/fs/notify/fsnotify.c
> +++ b/fs/notify/fsnotify.c
> @@ -305,16 +305,9 @@ 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)) {
> - iter_info.inode_mark =
> - fsnotify_first_mark(&to_tell->i_fsnotify_marks);
> - }
> -
> - if (mnt && ((mask & FS_MODIFY) ||
> - (test_mask & mnt->mnt_fsnotify_mask))) {
> - iter_info.inode_mark =
> - fsnotify_first_mark(&to_tell->i_fsnotify_marks);
> + iter_info.inode_mark =
> + fsnotify_first_mark(&to_tell->i_fsnotify_marks);
> + if (mnt) {
> iter_info.vfsmount_mark =
> fsnotify_first_mark(&mnt->mnt_fsnotify_marks);
> }
Applied to bionic/master-next branch.
Thanks,
Kleber
More information about the kernel-team
mailing list