Re: [PATCH v3 02/10] NFS: Move the flock open mode check into nfs_flock()

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

 



On Mon, 28 Dec 2015, Jeff Layton wrote:

> On Mon, 28 Dec 2015 11:27:58 -0500
> Benjamin Coddington <bcodding@xxxxxxxxxx> wrote:
>
> > We only need to check lock exclusive/shared types against open mode when
> > flock() is used on NFS, so move it into the flock-specific path instead of
> > checking it for all locks.
> >
> > Signed-off-by: Benjamin Coddington <bcodding@xxxxxxxxxx>
> > ---
> >  fs/nfs/file.c     |   16 ++++++++++++++++
> >  fs/nfs/nfs4proc.c |   13 -------------
> >  2 files changed, 16 insertions(+), 13 deletions(-)
> >
> > diff --git a/fs/nfs/file.c b/fs/nfs/file.c
> > index 93e2364..1e4804b 100644
> > --- a/fs/nfs/file.c
> > +++ b/fs/nfs/file.c
> > @@ -893,6 +893,22 @@ int nfs_flock(struct file *filp, int cmd, struct file_lock *fl)
> >  	/* We're simulating flock() locks using posix locks on the server */
> >  	if (fl->fl_type == F_UNLCK)
> >  		return do_unlk(filp, cmd, fl, is_local);
> > +
>
> nit: maybe make the above and below part of the same switch?

Ok, I will do that in a v4.

Ben

> > +	/*
> > +	 * VFS doesn't require the open mode to match a flock() lock's type.
> > +	 * NFS, however, may simulate flock() locking with posix locking which
> > +	 * requires the open mode to match the lock type.
> > +	 */
> > +	switch (fl->fl_type) {
> > +	case F_RDLCK:
> > +		if (!(filp->f_mode & FMODE_READ))
> > +			return -EBADF;
> > +		break;
> > +	case F_WRLCK:
> > +		if (!(filp->f_mode & FMODE_WRITE))
> > +			return -EBADF;
> > +	}
> > +
> >  	return do_setlk(filp, cmd, fl, is_local);
> >  }
> >  EXPORT_SYMBOL_GPL(nfs_flock);
> > diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
> > index 2231d7d..05ea1e1 100644
> > --- a/fs/nfs/nfs4proc.c
> > +++ b/fs/nfs/nfs4proc.c
> > @@ -6125,19 +6125,6 @@ nfs4_proc_lock(struct file *filp, int cmd, struct file_lock *request)
> >
> >  	if (state == NULL)
> >  		return -ENOLCK;
> > -	/*
> > -	 * Don't rely on the VFS having checked the file open mode,
> > -	 * since it won't do this for flock() locks.
> > -	 */
> > -	switch (request->fl_type) {
> > -	case F_RDLCK:
> > -		if (!(filp->f_mode & FMODE_READ))
> > -			return -EBADF;
> > -		break;
> > -	case F_WRLCK:
> > -		if (!(filp->f_mode & FMODE_WRITE))
> > -			return -EBADF;
> > -	}
> >
> >  	do {
> >  		status = nfs4_proc_setlk(state, cmd, request);
>
> Looks correct other than the nit above:
>
> Reviewed-by: Jeff Layton <jeff.layton@xxxxxxxxxxxxxxx>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux