Messages in this thread | | | Date | Mon, 1 Jun 2015 16:22:40 +0200 | Subject | Re: Can ovl_drop_write() be called earlier in ovl_dentry_open() | From | Miklos Szeredi <> |
| |
On Mon, Jun 1, 2015 at 3:52 PM, David Howells <dhowells@redhat.com> wrote: > In ovl_dentry_open(), ovl_drop_write() is called after vfs_open() - but is > this actually necessary? Can't we just drop it post-copyup? After all, > that's all we wanted the write lock for, right?
Hmm, that could result in a race where remount r/o of upper fs comes in between copy-up and vfs_open() so copy-up succeeds but the actual open fails. It's harmless, though, and not very likely. So I guess your patch is OK.
Thanks, Miklos
> > David > --- > --- a/fs/overlayfs/inode.c > +++ b/fs/overlayfs/inode.c > @@ -356,16 +356,14 @@ static int ovl_dentry_open(struct dentry *dentry, struct inode *inode, > err = ovl_copy_up_last(dentry, NULL, true); > else > err = ovl_copy_up(dentry); > + ovl_drop_write(dentry); > if (err) > - goto out_drop_write; > + goto out; > > ovl_path_upper(dentry, &realpath); > } > > err = vfs_open(&realpath, d_backing_inode(realpath.dentry), file, cred); > -out_drop_write: > - if (want_write) > - ovl_drop_write(dentry); > out: > return err; > }
| |