All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] cifs: allow unlock flock and OFD lock across fork
@ 2020-02-21  2:30 Murphy Zhou
  2020-02-26 15:39 ` Murphy Zhou
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Murphy Zhou @ 2020-02-21  2:30 UTC (permalink / raw)
  To: linux-cifs; +Cc: Jeff Layton, Steve French, Pavel Shilovsky

Since commit d0677992d2af ("cifs: add support for flock") added
support for flock, LTP/flock03[1] testcase started to fail.

This testcase is testing flock lock and unlock across fork.
The parent locks file and starts the child process, in which
it unlock the same fd and lock the same file with another fd
again. All the lock and unlock operation should succeed.

Now the child process does not actually unlock the file, so
the following lock fails. Fix this by allowing flock and OFD
lock go through the unlock routine, not skipping if the unlock
request comes from another process.

Patch has been tested by LTP/xfstests on samba and Windows
server, v3.11, with or without cache=none mount option.

[1] https://github.com/linux-test-project/ltp/blob/master/testcases/kernel/syscalls/flock/flock03.c
Signed-off-by: Murphy Zhou <jencce.kernel@gmail.com>
---
 fs/cifs/smb2file.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/fs/cifs/smb2file.c b/fs/cifs/smb2file.c
index afe1f03aabe3..eebfbf3a8c80 100644
--- a/fs/cifs/smb2file.c
+++ b/fs/cifs/smb2file.c
@@ -152,7 +152,12 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
 		    (li->offset + li->length))
 			continue;
 		if (current->tgid != li->pid)
-			continue;
+			/*
+			 * flock and OFD lock are associated with an open
+			 * file description, not the process.
+			 */
+			if (!(flock->fl_flags & (FL_FLOCK | FL_OFDLCK)))
+				continue;
 		if (cinode->can_cache_brlcks) {
 			/*
 			 * We can cache brlock requests - simply remove a lock
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] cifs: allow unlock flock and OFD lock across fork
  2020-02-21  2:30 [PATCH v2] cifs: allow unlock flock and OFD lock across fork Murphy Zhou
@ 2020-02-26 15:39 ` Murphy Zhou
  2020-02-26 18:41   ` Pavel Shilovsky
  2020-03-04  2:33   ` Murphy Zhou
  2020-03-04  4:42 ` Pavel Shilovsky
  2020-03-04  6:18 ` Steve French
  2 siblings, 2 replies; 6+ messages in thread
From: Murphy Zhou @ 2020-02-26 15:39 UTC (permalink / raw)
  To: linux-cifs; +Cc: Jeff Layton, Steve French, Pavel Shilovsky, Murphy Zhou

On Fri, Feb 21, 2020 at 10:30:01AM +0800, Murphy Zhou wrote:
> Since commit d0677992d2af ("cifs: add support for flock") added
> support for flock, LTP/flock03[1] testcase started to fail.
> 
> This testcase is testing flock lock and unlock across fork.
> The parent locks file and starts the child process, in which
> it unlock the same fd and lock the same file with another fd
> again. All the lock and unlock operation should succeed.
> 
> Now the child process does not actually unlock the file, so
> the following lock fails. Fix this by allowing flock and OFD
> lock go through the unlock routine, not skipping if the unlock
> request comes from another process.
> 
> Patch has been tested by LTP/xfstests on samba and Windows
> server, v3.11, with or without cache=none mount option.

Also tested with or without "nolease" mount option. No new
issue shows.

Thanks!
> 
> [1] https://github.com/linux-test-project/ltp/blob/master/testcases/kernel/syscalls/flock/flock03.c
> Signed-off-by: Murphy Zhou <jencce.kernel@gmail.com>
> ---
>  fs/cifs/smb2file.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/cifs/smb2file.c b/fs/cifs/smb2file.c
> index afe1f03aabe3..eebfbf3a8c80 100644
> --- a/fs/cifs/smb2file.c
> +++ b/fs/cifs/smb2file.c
> @@ -152,7 +152,12 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
>  		    (li->offset + li->length))
>  			continue;
>  		if (current->tgid != li->pid)
> -			continue;
> +			/*
> +			 * flock and OFD lock are associated with an open
> +			 * file description, not the process.
> +			 */
> +			if (!(flock->fl_flags & (FL_FLOCK | FL_OFDLCK)))
> +				continue;
>  		if (cinode->can_cache_brlcks) {
>  			/*
>  			 * We can cache brlock requests - simply remove a lock
> -- 
> 2.20.1
> 
> 

-- 
Murphy

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] cifs: allow unlock flock and OFD lock across fork
  2020-02-26 15:39 ` Murphy Zhou
@ 2020-02-26 18:41   ` Pavel Shilovsky
  2020-03-04  2:33   ` Murphy Zhou
  1 sibling, 0 replies; 6+ messages in thread
From: Pavel Shilovsky @ 2020-02-26 18:41 UTC (permalink / raw)
  To: Murphy Zhou; +Cc: linux-cifs, Jeff Layton, Steve French

ср, 26 февр. 2020 г. в 07:39, Murphy Zhou <jencce.kernel@gmail.com>:
>
> On Fri, Feb 21, 2020 at 10:30:01AM +0800, Murphy Zhou wrote:
> > Since commit d0677992d2af ("cifs: add support for flock") added
> > support for flock, LTP/flock03[1] testcase started to fail.
> >
> > This testcase is testing flock lock and unlock across fork.
> > The parent locks file and starts the child process, in which
> > it unlock the same fd and lock the same file with another fd
> > again. All the lock and unlock operation should succeed.
> >
> > Now the child process does not actually unlock the file, so
> > the following lock fails. Fix this by allowing flock and OFD
> > lock go through the unlock routine, not skipping if the unlock
> > request comes from another process.
> >
> > Patch has been tested by LTP/xfstests on samba and Windows
> > server, v3.11, with or without cache=none mount option.
>
> Also tested with or without "nolease" mount option. No new
> issue shows.
>

Great, thanks!
--
Best regards,
Pavel Shilovsky

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] cifs: allow unlock flock and OFD lock across fork
  2020-02-26 15:39 ` Murphy Zhou
  2020-02-26 18:41   ` Pavel Shilovsky
@ 2020-03-04  2:33   ` Murphy Zhou
  1 sibling, 0 replies; 6+ messages in thread
From: Murphy Zhou @ 2020-03-04  2:33 UTC (permalink / raw)
  To: linux-cifs; +Cc: Jeff Layton, Steve French, Murphy Zhou, Pavel Shilovsky

On Wed, Feb 26, 2020 at 11:39:41PM +0800, Murphy Zhou wrote:
> On Fri, Feb 21, 2020 at 10:30:01AM +0800, Murphy Zhou wrote:
> > Since commit d0677992d2af ("cifs: add support for flock") added
> > support for flock, LTP/flock03[1] testcase started to fail.

Ping on this one?

> > 
> > This testcase is testing flock lock and unlock across fork.
> > The parent locks file and starts the child process, in which
> > it unlock the same fd and lock the same file with another fd
> > again. All the lock and unlock operation should succeed.
> > 
> > Now the child process does not actually unlock the file, so
> > the following lock fails. Fix this by allowing flock and OFD
> > lock go through the unlock routine, not skipping if the unlock
> > request comes from another process.
> > 
> > Patch has been tested by LTP/xfstests on samba and Windows
> > server, v3.11, with or without cache=none mount option.
> 
> Also tested with or without "nolease" mount option. No new
> issue shows.
> 
> Thanks!
> > 
> > [1] https://github.com/linux-test-project/ltp/blob/master/testcases/kernel/syscalls/flock/flock03.c
> > Signed-off-by: Murphy Zhou <jencce.kernel@gmail.com>
> > ---
> >  fs/cifs/smb2file.c | 7 ++++++-
> >  1 file changed, 6 insertions(+), 1 deletion(-)
> > 
> > diff --git a/fs/cifs/smb2file.c b/fs/cifs/smb2file.c
> > index afe1f03aabe3..eebfbf3a8c80 100644
> > --- a/fs/cifs/smb2file.c
> > +++ b/fs/cifs/smb2file.c
> > @@ -152,7 +152,12 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
> >  		    (li->offset + li->length))
> >  			continue;
> >  		if (current->tgid != li->pid)
> > -			continue;
> > +			/*
> > +			 * flock and OFD lock are associated with an open
> > +			 * file description, not the process.
> > +			 */
> > +			if (!(flock->fl_flags & (FL_FLOCK | FL_OFDLCK)))
> > +				continue;
> >  		if (cinode->can_cache_brlcks) {
> >  			/*
> >  			 * We can cache brlock requests - simply remove a lock
> > -- 
> > 2.20.1
> > 
> > 
> 
> -- 
> Murphy

-- 
Murphy

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] cifs: allow unlock flock and OFD lock across fork
  2020-02-21  2:30 [PATCH v2] cifs: allow unlock flock and OFD lock across fork Murphy Zhou
  2020-02-26 15:39 ` Murphy Zhou
@ 2020-03-04  4:42 ` Pavel Shilovsky
  2020-03-04  6:18 ` Steve French
  2 siblings, 0 replies; 6+ messages in thread
From: Pavel Shilovsky @ 2020-03-04  4:42 UTC (permalink / raw)
  To: Murphy Zhou; +Cc: linux-cifs, Jeff Layton, Steve French

It looks that I forgot to ack the patch:

Acked-by: Pavel Shilovsky <pshilov@microsoft.com>

--
Best regards,
Pavel Shilovsky

чт, 20 февр. 2020 г. в 18:30, Murphy Zhou <jencce.kernel@gmail.com>:
>
> Since commit d0677992d2af ("cifs: add support for flock") added
> support for flock, LTP/flock03[1] testcase started to fail.
>
> This testcase is testing flock lock and unlock across fork.
> The parent locks file and starts the child process, in which
> it unlock the same fd and lock the same file with another fd
> again. All the lock and unlock operation should succeed.
>
> Now the child process does not actually unlock the file, so
> the following lock fails. Fix this by allowing flock and OFD
> lock go through the unlock routine, not skipping if the unlock
> request comes from another process.
>
> Patch has been tested by LTP/xfstests on samba and Windows
> server, v3.11, with or without cache=none mount option.
>
> [1] https://github.com/linux-test-project/ltp/blob/master/testcases/kernel/syscalls/flock/flock03.c
> Signed-off-by: Murphy Zhou <jencce.kernel@gmail.com>
> ---
>  fs/cifs/smb2file.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/fs/cifs/smb2file.c b/fs/cifs/smb2file.c
> index afe1f03aabe3..eebfbf3a8c80 100644
> --- a/fs/cifs/smb2file.c
> +++ b/fs/cifs/smb2file.c
> @@ -152,7 +152,12 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
>                     (li->offset + li->length))
>                         continue;
>                 if (current->tgid != li->pid)
> -                       continue;
> +                       /*
> +                        * flock and OFD lock are associated with an open
> +                        * file description, not the process.
> +                        */
> +                       if (!(flock->fl_flags & (FL_FLOCK | FL_OFDLCK)))
> +                               continue;
>                 if (cinode->can_cache_brlcks) {
>                         /*
>                          * We can cache brlock requests - simply remove a lock
> --
> 2.20.1
>
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v2] cifs: allow unlock flock and OFD lock across fork
  2020-02-21  2:30 [PATCH v2] cifs: allow unlock flock and OFD lock across fork Murphy Zhou
  2020-02-26 15:39 ` Murphy Zhou
  2020-03-04  4:42 ` Pavel Shilovsky
@ 2020-03-04  6:18 ` Steve French
  2 siblings, 0 replies; 6+ messages in thread
From: Steve French @ 2020-03-04  6:18 UTC (permalink / raw)
  To: Murphy Zhou; +Cc: CIFS, Jeff Layton, Pavel Shilovsky

tentatively merged into cifs-2.6.git for-next pending more testing

On Thu, Feb 20, 2020 at 8:30 PM Murphy Zhou <jencce.kernel@gmail.com> wrote:
>
> Since commit d0677992d2af ("cifs: add support for flock") added
> support for flock, LTP/flock03[1] testcase started to fail.
>
> This testcase is testing flock lock and unlock across fork.
> The parent locks file and starts the child process, in which
> it unlock the same fd and lock the same file with another fd
> again. All the lock and unlock operation should succeed.
>
> Now the child process does not actually unlock the file, so
> the following lock fails. Fix this by allowing flock and OFD
> lock go through the unlock routine, not skipping if the unlock
> request comes from another process.
>
> Patch has been tested by LTP/xfstests on samba and Windows
> server, v3.11, with or without cache=none mount option.
>
> [1] https://github.com/linux-test-project/ltp/blob/master/testcases/kernel/syscalls/flock/flock03.c
> Signed-off-by: Murphy Zhou <jencce.kernel@gmail.com>
> ---
>  fs/cifs/smb2file.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/fs/cifs/smb2file.c b/fs/cifs/smb2file.c
> index afe1f03aabe3..eebfbf3a8c80 100644
> --- a/fs/cifs/smb2file.c
> +++ b/fs/cifs/smb2file.c
> @@ -152,7 +152,12 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock,
>                     (li->offset + li->length))
>                         continue;
>                 if (current->tgid != li->pid)
> -                       continue;
> +                       /*
> +                        * flock and OFD lock are associated with an open
> +                        * file description, not the process.
> +                        */
> +                       if (!(flock->fl_flags & (FL_FLOCK | FL_OFDLCK)))
> +                               continue;
>                 if (cinode->can_cache_brlcks) {
>                         /*
>                          * We can cache brlock requests - simply remove a lock
> --
> 2.20.1
>
>


-- 
Thanks,

Steve

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-03-04  6:18 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-21  2:30 [PATCH v2] cifs: allow unlock flock and OFD lock across fork Murphy Zhou
2020-02-26 15:39 ` Murphy Zhou
2020-02-26 18:41   ` Pavel Shilovsky
2020-03-04  2:33   ` Murphy Zhou
2020-03-04  4:42 ` Pavel Shilovsky
2020-03-04  6:18 ` Steve French

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.