All of lore.kernel.org
 help / color / mirror / Atom feed
From: J. Bruce Fields <bfields@fieldses.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] Re: [PATCH 2/2] nfsd: only set file_lock.fl_lmops in nfsd4_lockt if a stateowner is found
Date: Thu, 22 Jan 2009 14:15:15 -0500	[thread overview]
Message-ID: <20090122191515.GE15279@fieldses.org> (raw)
In-Reply-To: <20090122140902.0cedf21b@barsoom.rdu.redhat.com>

On Thu, Jan 22, 2009 at 02:09:02PM -0500, Jeff Layton wrote:
> On Thu, 22 Jan 2009 13:59:30 -0500
> Jeff Layton <jlayton@redhat.com> wrote:
> 
> > On Thu, 22 Jan 2009 13:52:32 -0500
> > "J. Bruce Fields" <bfields@fieldses.org> wrote:
> > 
> > > On Wed, Jan 21, 2009 at 11:34:51AM -0500, Jeff Layton wrote:
> > > > nfsd4_lockt does a search for a lockstateowner when building the lock
> > > > struct to test. If one is found, it'll set fl_owner to it. Regardless of
> > > > whether that happens, it'll also set fl_lmops.
> > > > 
> > > > If a lockstateowner is not found, then we'll have fl_owner set to NULL
> > > > and fl_lmops set pointing to nfsd_posix_mng_ops. Other parts of the
> > > > NFSv4 server code assume that fl_owner will point to a valid
> > > > nfs4_stateowner if fl_lmops is set this way.
> > > > 
> > > > This behavior exposed a bug in DLM's GETLK implementation where it
> > > > wasn't clearing out the fields in the file_lock before filling in
> > > > conflicting lock info. While we were able to fix this in DLM, it
> > > > still seems pointless and dangerous to set the fl_lmops this way
> > > > when we have a NULL lockstateowner.
> > > > 
> > > > Signed-off-by: Jeff Layton <jlayton@redhat.com>
> > > > ---
> > > >  fs/nfsd/nfs4state.c |    6 ++++--
> > > >  1 files changed, 4 insertions(+), 2 deletions(-)
> > > > 
> > > > diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> > > > index 88db7d3..07d196a 100644
> > > > --- a/fs/nfsd/nfs4state.c
> > > > +++ b/fs/nfsd/nfs4state.c
> > > > @@ -2867,11 +2867,13 @@ nfsd4_lockt(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
> > > >  
> > > >  	lockt->lt_stateowner = find_lockstateowner_str(inode,
> > > >  			&lockt->lt_clientid, &lockt->lt_owner);
> > > > -	if (lockt->lt_stateowner)
> > > > +	if (lockt->lt_stateowner) {
> > > >  		file_lock.fl_owner = (fl_owner_t)lockt->lt_stateowner;
> > > > +		file_lock.fl_lmops = &nfsd_posix_mng_ops;
> > > 
> > > So I think we just shouldn't need this second assignment at all.
> > > 
> > > --b.
> > > 
> > 
> > Do we even need to worry about the lockstateowner at all then? If
> > fl_lmops isn't set then I think the fl_owner will be basically ignored
> > by nfs4_set_lock_denied anyway.
> > 
> 
> Ahh, nm. I think we do need to set fl_owner so that posix_same_owner
> does the right thing. I'll just get rid of the fl_lmops setting and I
> think that'll be done.

Right, but that does mean set_lock_denied is never going to see fl_lmops
set and hence isn't really going to use the returned fl_owner.  Which I
can live with.

--b.



WARNING: multiple messages have this Message-ID (diff)
From: "J. Bruce Fields" <bfields@fieldses.org>
To: Jeff Layton <jlayton@redhat.com>
Cc: linux-fsdevel@vger.kernel.org, cluster-devel@redhat.com,
	linux-nfs@vger.kernel.org, nfsv4@linux-nfs.org
Subject: Re: [PATCH 2/2] nfsd: only set file_lock.fl_lmops in nfsd4_lockt if a stateowner is found
Date: Thu, 22 Jan 2009 14:15:15 -0500	[thread overview]
Message-ID: <20090122191515.GE15279@fieldses.org> (raw)
In-Reply-To: <20090122140902.0cedf21b-xSBYVWDuneFaJnirhKH9O4GKTjYczspe@public.gmane.org>

On Thu, Jan 22, 2009 at 02:09:02PM -0500, Jeff Layton wrote:
> On Thu, 22 Jan 2009 13:59:30 -0500
> Jeff Layton <jlayton@redhat.com> wrote:
> 
> > On Thu, 22 Jan 2009 13:52:32 -0500
> > "J. Bruce Fields" <bfields@fieldses.org> wrote:
> > 
> > > On Wed, Jan 21, 2009 at 11:34:51AM -0500, Jeff Layton wrote:
> > > > nfsd4_lockt does a search for a lockstateowner when building the lock
> > > > struct to test. If one is found, it'll set fl_owner to it. Regardless of
> > > > whether that happens, it'll also set fl_lmops.
> > > > 
> > > > If a lockstateowner is not found, then we'll have fl_owner set to NULL
> > > > and fl_lmops set pointing to nfsd_posix_mng_ops. Other parts of the
> > > > NFSv4 server code assume that fl_owner will point to a valid
> > > > nfs4_stateowner if fl_lmops is set this way.
> > > > 
> > > > This behavior exposed a bug in DLM's GETLK implementation where it
> > > > wasn't clearing out the fields in the file_lock before filling in
> > > > conflicting lock info. While we were able to fix this in DLM, it
> > > > still seems pointless and dangerous to set the fl_lmops this way
> > > > when we have a NULL lockstateowner.
> > > > 
> > > > Signed-off-by: Jeff Layton <jlayton@redhat.com>
> > > > ---
> > > >  fs/nfsd/nfs4state.c |    6 ++++--
> > > >  1 files changed, 4 insertions(+), 2 deletions(-)
> > > > 
> > > > diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> > > > index 88db7d3..07d196a 100644
> > > > --- a/fs/nfsd/nfs4state.c
> > > > +++ b/fs/nfsd/nfs4state.c
> > > > @@ -2867,11 +2867,13 @@ nfsd4_lockt(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
> > > >  
> > > >  	lockt->lt_stateowner = find_lockstateowner_str(inode,
> > > >  			&lockt->lt_clientid, &lockt->lt_owner);
> > > > -	if (lockt->lt_stateowner)
> > > > +	if (lockt->lt_stateowner) {
> > > >  		file_lock.fl_owner = (fl_owner_t)lockt->lt_stateowner;
> > > > +		file_lock.fl_lmops = &nfsd_posix_mng_ops;
> > > 
> > > So I think we just shouldn't need this second assignment at all.
> > > 
> > > --b.
> > > 
> > 
> > Do we even need to worry about the lockstateowner at all then? If
> > fl_lmops isn't set then I think the fl_owner will be basically ignored
> > by nfs4_set_lock_denied anyway.
> > 
> 
> Ahh, nm. I think we do need to set fl_owner so that posix_same_owner
> does the right thing. I'll just get rid of the fl_lmops setting and I
> think that'll be done.

Right, but that does mean set_lock_denied is never going to see fl_lmops
set and hence isn't really going to use the returned fl_owner.  Which I
can live with.

--b.

WARNING: multiple messages have this Message-ID (diff)
From: "J. Bruce Fields" <bfields-uC3wQj2KruNg9hUCZPvPmw@public.gmane.org>
To: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: linux-fsdevel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	cluster-devel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
	linux-nfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	nfsv4-6DNke4IJHB0gsBAKwltoeQ@public.gmane.org
Subject: Re: [PATCH 2/2] nfsd: only set file_lock.fl_lmops in nfsd4_lockt if a stateowner is found
Date: Thu, 22 Jan 2009 14:15:15 -0500	[thread overview]
Message-ID: <20090122191515.GE15279@fieldses.org> (raw)
In-Reply-To: <20090122140902.0cedf21b-xSBYVWDuneFaJnirhKH9O4GKTjYczspe@public.gmane.org>

On Thu, Jan 22, 2009 at 02:09:02PM -0500, Jeff Layton wrote:
> On Thu, 22 Jan 2009 13:59:30 -0500
> Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> wrote:
> 
> > On Thu, 22 Jan 2009 13:52:32 -0500
> > "J. Bruce Fields" <bfields-uC3wQj2KruNg9hUCZPvPmw@public.gmane.org> wrote:
> > 
> > > On Wed, Jan 21, 2009 at 11:34:51AM -0500, Jeff Layton wrote:
> > > > nfsd4_lockt does a search for a lockstateowner when building the lock
> > > > struct to test. If one is found, it'll set fl_owner to it. Regardless of
> > > > whether that happens, it'll also set fl_lmops.
> > > > 
> > > > If a lockstateowner is not found, then we'll have fl_owner set to NULL
> > > > and fl_lmops set pointing to nfsd_posix_mng_ops. Other parts of the
> > > > NFSv4 server code assume that fl_owner will point to a valid
> > > > nfs4_stateowner if fl_lmops is set this way.
> > > > 
> > > > This behavior exposed a bug in DLM's GETLK implementation where it
> > > > wasn't clearing out the fields in the file_lock before filling in
> > > > conflicting lock info. While we were able to fix this in DLM, it
> > > > still seems pointless and dangerous to set the fl_lmops this way
> > > > when we have a NULL lockstateowner.
> > > > 
> > > > Signed-off-by: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> > > > ---
> > > >  fs/nfsd/nfs4state.c |    6 ++++--
> > > >  1 files changed, 4 insertions(+), 2 deletions(-)
> > > > 
> > > > diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> > > > index 88db7d3..07d196a 100644
> > > > --- a/fs/nfsd/nfs4state.c
> > > > +++ b/fs/nfsd/nfs4state.c
> > > > @@ -2867,11 +2867,13 @@ nfsd4_lockt(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
> > > >  
> > > >  	lockt->lt_stateowner = find_lockstateowner_str(inode,
> > > >  			&lockt->lt_clientid, &lockt->lt_owner);
> > > > -	if (lockt->lt_stateowner)
> > > > +	if (lockt->lt_stateowner) {
> > > >  		file_lock.fl_owner = (fl_owner_t)lockt->lt_stateowner;
> > > > +		file_lock.fl_lmops = &nfsd_posix_mng_ops;
> > > 
> > > So I think we just shouldn't need this second assignment at all.
> > > 
> > > --b.
> > > 
> > 
> > Do we even need to worry about the lockstateowner at all then? If
> > fl_lmops isn't set then I think the fl_owner will be basically ignored
> > by nfs4_set_lock_denied anyway.
> > 
> 
> Ahh, nm. I think we do need to set fl_owner so that posix_same_owner
> does the right thing. I'll just get rid of the fl_lmops setting and I
> think that'll be done.

Right, but that does mean set_lock_denied is never going to see fl_lmops
set and hence isn't really going to use the returned fl_owner.  Which I
can live with.

--b.
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2009-01-22 19:15 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-21 16:34 [Cluster-devel] [PATCH 0/2] nfsd/dlm: fix knfsd panic when NFSv4 client does GETLK call on GFS2 (regression) Jeff Layton
2009-01-21 16:34 ` Jeff Layton
2009-01-21 16:34 ` [Cluster-devel] [PATCH 1/2] dlm: initialize file_lock struct in GETLK before copying conflicting lock Jeff Layton
2009-01-21 16:34   ` Jeff Layton
2009-01-21 16:34   ` Jeff Layton
2009-01-21 23:42   ` [Cluster-devel] " J. Bruce Fields
2009-01-21 23:42     ` J. Bruce Fields
2009-01-22  2:26     ` [Cluster-devel] " Jeff Layton
2009-01-22  2:26       ` Jeff Layton
2009-01-22 18:32       ` [Cluster-devel] " J. Bruce Fields
2009-01-22 18:32         ` J. Bruce Fields
2009-01-22 18:37         ` [Cluster-devel] " Jeff Layton
2009-01-22 18:37           ` Jeff Layton
2009-01-22 18:05     ` [Cluster-devel] " David Teigland
2009-01-22 18:05       ` David Teigland
2009-01-22 18:37       ` Jeff Layton
2009-01-22 18:37         ` Jeff Layton
2009-01-22 19:03         ` David Teigland
2009-01-22 19:03           ` David Teigland
2009-01-22 19:03           ` David Teigland
2009-01-22 18:48       ` J. Bruce Fields
2009-01-22 18:48         ` J. Bruce Fields
2009-01-21 16:34 ` [Cluster-devel] [PATCH 2/2] nfsd: only set file_lock.fl_lmops in nfsd4_lockt if a stateowner is found Jeff Layton
2009-01-21 16:34   ` Jeff Layton
2009-01-22 18:52   ` [Cluster-devel] " J. Bruce Fields
2009-01-22 18:52     ` J. Bruce Fields
2009-01-22 18:58     ` [Cluster-devel] " Jeff Layton
2009-01-22 18:58       ` Jeff Layton
2009-01-22 19:12       ` [Cluster-devel] " J. Bruce Fields
2009-01-22 19:12         ` J. Bruce Fields
2009-01-22 19:12         ` J. Bruce Fields
2009-01-22 18:59     ` [Cluster-devel] " Jeff Layton
2009-01-22 18:59       ` Jeff Layton
2009-01-22 19:09       ` [Cluster-devel] " Jeff Layton
2009-01-22 19:09         ` Jeff Layton
2009-01-22 19:15         ` J. Bruce Fields [this message]
2009-01-22 19:15           ` J. Bruce Fields
2009-01-22 19:15           ` J. Bruce Fields
  -- strict thread matches above, loose matches on Subject: below --
2009-01-22 19:16 [Cluster-devel] [PATCH 0/2] nfsd/dlm: fix knfsd panic when NFSv4 client does GETLK call Jeff Layton
2009-01-22 19:16 ` [Cluster-devel] [PATCH 2/2] nfsd: only set file_lock.fl_lmops in nfsd4_lockt if a stateowner is found Jeff Layton
2009-01-27 22:33   ` [Cluster-devel] " J. Bruce Fields

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090122191515.GE15279@fieldses.org \
    --to=bfields@fieldses.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.