On Thu, Jun 18, 2020 at 6:44 PM Amir Goldstein <amir73il@xxxxxxxxx> wrote: > > The check if user has changed the overlay file was wrong, causing unneeded > call to ovl_change_flags() including taking f_lock on every file access. > > Fixes: d989903058a8 ("ovl: do not generate duplicate fsnotify events...") > Cc: <stable@xxxxxxxxxxxxxxx> # v4.19+ > Signed-off-by: Amir Goldstein <amir73il@xxxxxxxxx> > --- > fs/overlayfs/file.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c > index 01820e654a21..0d940e29d62b 100644 > --- a/fs/overlayfs/file.c > +++ b/fs/overlayfs/file.c > @@ -33,13 +33,16 @@ static char ovl_whatisit(struct inode *inode, struct inode *realinode) > return 'm'; > } > > +/* No atime modificaton nor notify on underlying */ > +#define OVL_OPEN_FLAGS (O_NOATIME | FMODE_NONOTIFY) > + > static struct file *ovl_open_realfile(const struct file *file, > struct inode *realinode) > { > struct inode *inode = file_inode(file); > struct file *realfile; > const struct cred *old_cred; > - int flags = file->f_flags | O_NOATIME | FMODE_NONOTIFY; > + int flags = file->f_flags | OVL_OPEN_FLAGS; > int acc_mode = ACC_MODE(flags); > int err; > > @@ -72,8 +75,7 @@ static int ovl_change_flags(struct file *file, unsigned int flags) > struct inode *inode = file_inode(file); > int err; > > - /* No atime modificaton on underlying */ > - flags |= O_NOATIME | FMODE_NONOTIFY; > + flags |= OVL_OPEN_FLAGS; > > /* If some flag changed that cannot be changed then something's amiss */ > if (WARN_ON((file->f_flags ^ flags) & ~OVL_SETFL_MASK)) > @@ -126,7 +128,7 @@ static int ovl_real_fdget_meta(const struct file *file, struct fd *real, > } > > /* Did the flags change since open? */ > - if (unlikely((file->f_flags ^ real->file->f_flags) & ~O_NOATIME)) > + if (unlikely((file->f_flags ^ real->file->f_flags) & ~OVL_OPEN_FLAGS)) > return ovl_change_flags(real->file, file->f_flags); > > return 0; > -- > 2.17.1 > Miklos, Was this patch left out intentionally? Thanks, Amir.