* [PATCH] CIFS: unlock file across process @ 2020-02-14 4:35 Murphy Zhou 2020-02-14 5:32 ` Steve French 2020-02-14 12:26 ` Jeff Layton 0 siblings, 2 replies; 9+ messages in thread From: Murphy Zhou @ 2020-02-14 4:35 UTC (permalink / raw) To: linux-cifs Now child can't unlock the same file that has been locked by parent. Fix this by not skipping unlock if requesting from different process. Patch tested by LTP and xfstests using samba server. Signed-off-by: Murphy Zhou <jencce.kernel@gmail.com> --- fs/cifs/smb2file.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/fs/cifs/smb2file.c b/fs/cifs/smb2file.c index afe1f03aabe3..b5bca0e13d51 100644 --- a/fs/cifs/smb2file.c +++ b/fs/cifs/smb2file.c @@ -151,8 +151,6 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock, (flock->fl_start + length) < (li->offset + li->length)) continue; - if (current->tgid != li->pid) - continue; if (cinode->can_cache_brlcks) { /* * We can cache brlock requests - simply remove a lock -- 2.20.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH] CIFS: unlock file across process 2020-02-14 4:35 [PATCH] CIFS: unlock file across process Murphy Zhou @ 2020-02-14 5:32 ` Steve French 2020-02-14 12:26 ` Jeff Layton 1 sibling, 0 replies; 9+ messages in thread From: Steve French @ 2020-02-14 5:32 UTC (permalink / raw) To: Murphy Zhou; +Cc: CIFS merged into cifs-2.6.git for-next On Thu, Feb 13, 2020 at 10:35 PM Murphy Zhou <jencce.kernel@gmail.com> wrote: > > Now child can't unlock the same file that has been locked by > parent. Fix this by not skipping unlock if requesting from > different process. > > Patch tested by LTP and xfstests using samba server. > > Signed-off-by: Murphy Zhou <jencce.kernel@gmail.com> > --- > fs/cifs/smb2file.c | 2 -- > 1 file changed, 2 deletions(-) > > diff --git a/fs/cifs/smb2file.c b/fs/cifs/smb2file.c > index afe1f03aabe3..b5bca0e13d51 100644 > --- a/fs/cifs/smb2file.c > +++ b/fs/cifs/smb2file.c > @@ -151,8 +151,6 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock, > (flock->fl_start + length) < > (li->offset + li->length)) > continue; > - if (current->tgid != li->pid) > - 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] 9+ messages in thread
* Re: [PATCH] CIFS: unlock file across process 2020-02-14 4:35 [PATCH] CIFS: unlock file across process Murphy Zhou 2020-02-14 5:32 ` Steve French @ 2020-02-14 12:26 ` Jeff Layton 2020-02-14 14:28 ` Murphy Zhou 1 sibling, 1 reply; 9+ messages in thread From: Jeff Layton @ 2020-02-14 12:26 UTC (permalink / raw) To: Murphy Zhou, linux-cifs; +Cc: Steve French On Fri, 2020-02-14 at 12:35 +0800, Murphy Zhou wrote: > Now child can't unlock the same file that has been locked by > parent. Fix this by not skipping unlock if requesting from > different process. > > Patch tested by LTP and xfstests using samba server. > > Signed-off-by: Murphy Zhou <jencce.kernel@gmail.com> > --- > fs/cifs/smb2file.c | 2 -- > 1 file changed, 2 deletions(-) > > diff --git a/fs/cifs/smb2file.c b/fs/cifs/smb2file.c > index afe1f03aabe3..b5bca0e13d51 100644 > --- a/fs/cifs/smb2file.c > +++ b/fs/cifs/smb2file.c > @@ -151,8 +151,6 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock, > (flock->fl_start + length) < > (li->offset + li->length)) > continue; > - if (current->tgid != li->pid) > - continue; > if (cinode->can_cache_brlcks) { > /* > * We can cache brlock requests - simply remove a lock I'm not as familiar with this code as I once was, but... From fork(2) manpage: * The child does not inherit process-associated record locks from its parent (fcntl(2)). (On the other hand, it does inherit fcntl(2) open file description locks and flock(2) locks from its parent.) It looks like cifs_setlk calls mand_unlock_range, and that gets called from both fcntl and flock codepaths. So, I'm not sure about just removing this. It seems like the pid check is probably correct for traditional posix locks, but probably not for OFD and flock locks? What ensures that completely unrelated tasks can't unlock your locks? -- Jeff Layton <jlayton@kernel.org> ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] CIFS: unlock file across process 2020-02-14 12:26 ` Jeff Layton @ 2020-02-14 14:28 ` Murphy Zhou 2020-02-14 19:03 ` Pavel Shilovsky 0 siblings, 1 reply; 9+ messages in thread From: Murphy Zhou @ 2020-02-14 14:28 UTC (permalink / raw) To: Jeff Layton; +Cc: Murphy Zhou, linux-cifs, Steve French On Fri, Feb 14, 2020 at 07:26:46AM -0500, Jeff Layton wrote: > On Fri, 2020-02-14 at 12:35 +0800, Murphy Zhou wrote: > > Now child can't unlock the same file that has been locked by > > parent. Fix this by not skipping unlock if requesting from > > different process. > > > > Patch tested by LTP and xfstests using samba server. > > > > Signed-off-by: Murphy Zhou <jencce.kernel@gmail.com> > > --- > > fs/cifs/smb2file.c | 2 -- > > 1 file changed, 2 deletions(-) > > > > diff --git a/fs/cifs/smb2file.c b/fs/cifs/smb2file.c > > index afe1f03aabe3..b5bca0e13d51 100644 > > --- a/fs/cifs/smb2file.c > > +++ b/fs/cifs/smb2file.c > > @@ -151,8 +151,6 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock, > > (flock->fl_start + length) < > > (li->offset + li->length)) > > continue; > > - if (current->tgid != li->pid) > > - continue; > > if (cinode->can_cache_brlcks) { > > /* > > * We can cache brlock requests - simply remove a lock > > I'm not as familiar with this code as I once was, but... > > From fork(2) manpage: > > * The child does not inherit process-associated record locks from its > parent (fcntl(2)). (On the other hand, it does inherit fcntl(2) > open file description locks and flock(2) locks from its parent.) > > It looks like cifs_setlk calls mand_unlock_range, and that gets called > from both fcntl and flock codepaths. > > So, I'm not sure about just removing this. It seems like the pid check > is probably correct for traditional posix locks, but probably not for > OFD and flock locks? What ensures that completely unrelated tasks can't > unlock your locks? You are right Jeff. Just removing this is not right. We need to handle at least 3 types of locks: posix, OFD and flock. Thanks very much for reviewing! I'll try to sort this out. > -- > Jeff Layton <jlayton@kernel.org> > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] CIFS: unlock file across process 2020-02-14 14:28 ` Murphy Zhou @ 2020-02-14 19:03 ` Pavel Shilovsky 2020-02-19 2:10 ` Murphy Zhou 0 siblings, 1 reply; 9+ messages in thread From: Pavel Shilovsky @ 2020-02-14 19:03 UTC (permalink / raw) To: Murphy Zhou; +Cc: Jeff Layton, linux-cifs, Steve French Also, please make sure that resulting patch works against Windows file share since the locking semantics may be different there. Depending on a kind of lease we have on a file, locks may be cached or not. We probably don't want to have different behavior for cached and non-cached locks. Especially given the fact that a lease may be broken in the middle of app execution and the different behavior will be applied immediately. -- Best regards, Pavel Shilovsky пт, 14 февр. 2020 г. в 06:30, Murphy Zhou <jencce.kernel@gmail.com>: > > On Fri, Feb 14, 2020 at 07:26:46AM -0500, Jeff Layton wrote: > > On Fri, 2020-02-14 at 12:35 +0800, Murphy Zhou wrote: > > > Now child can't unlock the same file that has been locked by > > > parent. Fix this by not skipping unlock if requesting from > > > different process. > > > > > > Patch tested by LTP and xfstests using samba server. > > > > > > Signed-off-by: Murphy Zhou <jencce.kernel@gmail.com> > > > --- > > > fs/cifs/smb2file.c | 2 -- > > > 1 file changed, 2 deletions(-) > > > > > > diff --git a/fs/cifs/smb2file.c b/fs/cifs/smb2file.c > > > index afe1f03aabe3..b5bca0e13d51 100644 > > > --- a/fs/cifs/smb2file.c > > > +++ b/fs/cifs/smb2file.c > > > @@ -151,8 +151,6 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock, > > > (flock->fl_start + length) < > > > (li->offset + li->length)) > > > continue; > > > - if (current->tgid != li->pid) > > > - continue; > > > if (cinode->can_cache_brlcks) { > > > /* > > > * We can cache brlock requests - simply remove a lock > > > > I'm not as familiar with this code as I once was, but... > > > > From fork(2) manpage: > > > > * The child does not inherit process-associated record locks from its > > parent (fcntl(2)). (On the other hand, it does inherit fcntl(2) > > open file description locks and flock(2) locks from its parent.) > > > > It looks like cifs_setlk calls mand_unlock_range, and that gets called > > from both fcntl and flock codepaths. > > > > So, I'm not sure about just removing this. It seems like the pid check > > is probably correct for traditional posix locks, but probably not for > > OFD and flock locks? What ensures that completely unrelated tasks can't > > unlock your locks? > > You are right Jeff. Just removing this is not right. We need to handle > at least 3 types of locks: posix, OFD and flock. > > Thanks very much for reviewing! I'll try to sort this out. > > -- > > Jeff Layton <jlayton@kernel.org> > > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] CIFS: unlock file across process 2020-02-14 19:03 ` Pavel Shilovsky @ 2020-02-19 2:10 ` Murphy Zhou 2020-02-24 19:39 ` Pavel Shilovsky 0 siblings, 1 reply; 9+ messages in thread From: Murphy Zhou @ 2020-02-19 2:10 UTC (permalink / raw) To: Pavel Shilovsky; +Cc: Murphy Zhou, Jeff Layton, linux-cifs, Steve French On Fri, Feb 14, 2020 at 11:03:00AM -0800, Pavel Shilovsky wrote: > Also, please make sure that resulting patch works against Windows file > share since the locking semantics may be different there. OK. > > Depending on a kind of lease we have on a file, locks may be cached or > not. We probably don't want to have different behavior for cached and > non-cached locks. Especially given the fact that a lease may be broken > in the middle of app execution and the different behavior will be > applied immediately. Testing new patch with and without cache=none option, both samba and Win2019 server. Thanks very much for reviewing! Murphy > > -- > Best regards, > Pavel Shilovsky > > пт, 14 февр. 2020 г. в 06:30, Murphy Zhou <jencce.kernel@gmail.com>: > > > > On Fri, Feb 14, 2020 at 07:26:46AM -0500, Jeff Layton wrote: > > > On Fri, 2020-02-14 at 12:35 +0800, Murphy Zhou wrote: > > > > Now child can't unlock the same file that has been locked by > > > > parent. Fix this by not skipping unlock if requesting from > > > > different process. > > > > > > > > Patch tested by LTP and xfstests using samba server. > > > > > > > > Signed-off-by: Murphy Zhou <jencce.kernel@gmail.com> > > > > --- > > > > fs/cifs/smb2file.c | 2 -- > > > > 1 file changed, 2 deletions(-) > > > > > > > > diff --git a/fs/cifs/smb2file.c b/fs/cifs/smb2file.c > > > > index afe1f03aabe3..b5bca0e13d51 100644 > > > > --- a/fs/cifs/smb2file.c > > > > +++ b/fs/cifs/smb2file.c > > > > @@ -151,8 +151,6 @@ smb2_unlock_range(struct cifsFileInfo *cfile, struct file_lock *flock, > > > > (flock->fl_start + length) < > > > > (li->offset + li->length)) > > > > continue; > > > > - if (current->tgid != li->pid) > > > > - continue; > > > > if (cinode->can_cache_brlcks) { > > > > /* > > > > * We can cache brlock requests - simply remove a lock > > > > > > I'm not as familiar with this code as I once was, but... > > > > > > From fork(2) manpage: > > > > > > * The child does not inherit process-associated record locks from its > > > parent (fcntl(2)). (On the other hand, it does inherit fcntl(2) > > > open file description locks and flock(2) locks from its parent.) > > > > > > It looks like cifs_setlk calls mand_unlock_range, and that gets called > > > from both fcntl and flock codepaths. > > > > > > So, I'm not sure about just removing this. It seems like the pid check > > > is probably correct for traditional posix locks, but probably not for > > > OFD and flock locks? What ensures that completely unrelated tasks can't > > > unlock your locks? > > > > You are right Jeff. Just removing this is not right. We need to handle > > at least 3 types of locks: posix, OFD and flock. > > > > Thanks very much for reviewing! I'll try to sort this out. > > > -- > > > Jeff Layton <jlayton@kernel.org> > > > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] CIFS: unlock file across process 2020-02-19 2:10 ` Murphy Zhou @ 2020-02-24 19:39 ` Pavel Shilovsky 2020-02-25 5:15 ` Murphy Zhou 0 siblings, 1 reply; 9+ messages in thread From: Pavel Shilovsky @ 2020-02-24 19:39 UTC (permalink / raw) To: Murphy Zhou; +Cc: Jeff Layton, linux-cifs, Steve French вт, 18 февр. 2020 г. в 18:10, Murphy Zhou <jencce.kernel@gmail.com>: > > On Fri, Feb 14, 2020 at 11:03:00AM -0800, Pavel Shilovsky wrote: > > Also, please make sure that resulting patch works against Windows file > > share since the locking semantics may be different there. > > OK. > > > > > Depending on a kind of lease we have on a file, locks may be cached or > > not. We probably don't want to have different behavior for cached and > > non-cached locks. Especially given the fact that a lease may be broken > > in the middle of app execution and the different behavior will be > > applied immediately. > > Testing new patch with and without cache=none option, both samba > and Win2019 server. > > Thanks very much for reviewing! > cache=none only affects IO and doesn't change the client behavior regarding locks. "nolease" mount option can be used to turn off leases and make all locks go to the server. -- Best regards, Pavel Shilovsky ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] CIFS: unlock file across process 2020-02-24 19:39 ` Pavel Shilovsky @ 2020-02-25 5:15 ` Murphy Zhou 2020-02-25 19:21 ` Pavel Shilovsky 0 siblings, 1 reply; 9+ messages in thread From: Murphy Zhou @ 2020-02-25 5:15 UTC (permalink / raw) To: Pavel Shilovsky; +Cc: Murphy Zhou, Jeff Layton, linux-cifs, Steve French On Mon, Feb 24, 2020 at 11:39:27AM -0800, Pavel Shilovsky wrote: > вт, 18 февр. 2020 г. в 18:10, Murphy Zhou <jencce.kernel@gmail.com>: > > > > On Fri, Feb 14, 2020 at 11:03:00AM -0800, Pavel Shilovsky wrote: > > > Also, please make sure that resulting patch works against Windows file > > > share since the locking semantics may be different there. > > > > OK. > > > > > > > > Depending on a kind of lease we have on a file, locks may be cached or > > > not. We probably don't want to have different behavior for cached and > > > non-cached locks. Especially given the fact that a lease may be broken > > > in the middle of app execution and the different behavior will be > > > applied immediately. > > > > Testing new patch with and without cache=none option, both samba > > and Win2019 server. > > > > Thanks very much for reviewing! > > > > cache=none only affects IO and doesn't change the client behavior > regarding locks. "nolease" mount option can be used to turn off leases > and make all locks go to the server. Great to know! I can't find it in any man page. Doing more tests. Thanks! > > -- > Best regards, > Pavel Shilovsky ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] CIFS: unlock file across process 2020-02-25 5:15 ` Murphy Zhou @ 2020-02-25 19:21 ` Pavel Shilovsky 0 siblings, 0 replies; 9+ messages in thread From: Pavel Shilovsky @ 2020-02-25 19:21 UTC (permalink / raw) To: Murphy Zhou; +Cc: Jeff Layton, linux-cifs, Steve French пн, 24 февр. 2020 г. в 21:16, Murphy Zhou <jencce.kernel@gmail.com>: > > On Mon, Feb 24, 2020 at 11:39:27AM -0800, Pavel Shilovsky wrote: > > вт, 18 февр. 2020 г. в 18:10, Murphy Zhou <jencce.kernel@gmail.com>: > > > > > > On Fri, Feb 14, 2020 at 11:03:00AM -0800, Pavel Shilovsky wrote: > > > > Also, please make sure that resulting patch works against Windows file > > > > share since the locking semantics may be different there. > > > > > > OK. > > > > > > > > > > > Depending on a kind of lease we have on a file, locks may be cached or > > > > not. We probably don't want to have different behavior for cached and > > > > non-cached locks. Especially given the fact that a lease may be broken > > > > in the middle of app execution and the different behavior will be > > > > applied immediately. > > > > > > Testing new patch with and without cache=none option, both samba > > > and Win2019 server. > > > > > > Thanks very much for reviewing! > > > > > > > cache=none only affects IO and doesn't change the client behavior > > regarding locks. "nolease" mount option can be used to turn off leases > > and make all locks go to the server. > > Great to know! I can't find it in any man page. Doing more tests. > Good catch, it is missing in the man pages. Now added: https://github.com/piastry/cifs-utils/commit/4b8b2e2680e7e4aa9cc8bd4278d04e5fe07d885e Thanks! -- Best regards, Pavel Shilovsky ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2020-02-25 19:21 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-02-14 4:35 [PATCH] CIFS: unlock file across process Murphy Zhou 2020-02-14 5:32 ` Steve French 2020-02-14 12:26 ` Jeff Layton 2020-02-14 14:28 ` Murphy Zhou 2020-02-14 19:03 ` Pavel Shilovsky 2020-02-19 2:10 ` Murphy Zhou 2020-02-24 19:39 ` Pavel Shilovsky 2020-02-25 5:15 ` Murphy Zhou 2020-02-25 19:21 ` Pavel Shilovsky
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).