On Wed 17-03-21 11:26:36, Amir Goldstein wrote: > On Tue, Mar 16, 2021 at 5:18 PM Jan Kara <jack@xxxxxxx> wrote: > > > > On Thu 04-03-21 12:48:24, Amir Goldstein wrote: > > > Improve the merge key hash by mixing more values relevant for merge. > > > > > > For example, all FAN_CREATE name events in the same dir used to have the > > > same merge key based on the dir inode. With this change the created > > > file name is mixed into the merge key. > > > > > > The object id that was used as merge key is redundant to the event info > > > so it is no longer mixed into the hash. > > > > > > Permission events are not hashed, so no need to hash their info. > > > > > > Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx> > > > > ... > > > > > @@ -530,6 +568,8 @@ static struct fanotify_event *fanotify_alloc_event(struct fsnotify_group *group, > > > struct inode *child = NULL; > > > bool name_event = false; > > > unsigned int hash = 0; > > > + unsigned long ondir = (mask & FAN_ONDIR) ? 1UL : 0; > > > + struct pid *pid; > > > > I've made a tiny change here and changed 'ondir' to bool since I don't see > > a strong reason to play games like this. Otherwise I took the patch as is. > > > > OK, so you kept this arithmetics with a bool: > > (unsigned long)pid | ondir > > I suppose there's no harm. Yes. Bool is guaranteed to be typed to int (and then subsequently lifted to unsigned long) in this expression with 'false' translated to 0 and 'true' translated to 1. So everything works as expected. Honza -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR