Re: [PATCH] fsnotify: fix ignore mask logic in fsnotify()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat 01-09-18 09:40:01, Amir Goldstein wrote:
> 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@xxxxxxxxx>

Great, thanks. Added to my tree.

								Honza

> ---
> 
> Jan,
> 
> Posting this fix independent from the super block mark series,
> so you can send it in this cycle if you wish.
> 
> New LTP test fanotify10 from [1] demonstrates the problem and
> the fix. Note that the test verifies the expected behavior as
> agreed in this discussion [2].
> 
> Thanks,
> Amir.
> 
> [1] https://github.com/amir73il/ltp/commits/fanotify_sb
> [2] https://marc.info/?l=linux-fsdevel&m=152284295703053&w=2
> 
>  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 775e731d3016..2971803d151c 100644
> --- a/fs/notify/fsnotify.c
> +++ b/fs/notify/fsnotify.c
> @@ -357,16 +357,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.marks[FSNOTIFY_OBJ_TYPE_INODE] =
> -			fsnotify_first_mark(&to_tell->i_fsnotify_marks);
> -	}
> -
> -	if (mnt && ((mask & FS_MODIFY) ||
> -		    (test_mask & mnt->mnt_fsnotify_mask))) {
> -		iter_info.marks[FSNOTIFY_OBJ_TYPE_INODE] =
> -			fsnotify_first_mark(&to_tell->i_fsnotify_marks);
> +	iter_info.marks[FSNOTIFY_OBJ_TYPE_INODE] =
> +		fsnotify_first_mark(&to_tell->i_fsnotify_marks);
> +	if (mnt) {
>  		iter_info.marks[FSNOTIFY_OBJ_TYPE_VFSMOUNT] =
>  			fsnotify_first_mark(&mnt->mnt_fsnotify_marks);
>  	}
> -- 
> 2.17.1
> 
-- 
Jan Kara <jack@xxxxxxxx>
SUSE Labs, CR



[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]

  Powered by Linux