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 13:52:32 -0500 [thread overview]
Message-ID: <20090122185232.GC15279@fieldses.org> (raw)
In-Reply-To: <1232555691-29859-3-git-send-email-jlayton@redhat.com>
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.
> + }
> +
> file_lock.fl_pid = current->tgid;
> file_lock.fl_flags = FL_POSIX;
> - file_lock.fl_lmops = &nfsd_posix_mng_ops;
>
> file_lock.fl_start = lockt->lt_offset;
> file_lock.fl_end = last_byte_offset(lockt->lt_offset, lockt->lt_length);
> --
> 1.5.5.6
>
> _______________________________________________
> NFSv4 mailing list
> NFSv4 at linux-nfs.org
> http://linux-nfs.org/cgi-bin/mailman/listinfo/nfsv4
WARNING: multiple messages have this Message-ID (diff)
From: "J. Bruce Fields" <bfields@fieldses.org>
To: Jeff Layton <jlayton@redhat.com>
Cc: lkml@vger.kernel.org, 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 13:52:32 -0500 [thread overview]
Message-ID: <20090122185232.GC15279@fieldses.org> (raw)
In-Reply-To: <1232555691-29859-3-git-send-email-jlayton@redhat.com>
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.
> + }
> +
> file_lock.fl_pid = current->tgid;
> file_lock.fl_flags = FL_POSIX;
> - file_lock.fl_lmops = &nfsd_posix_mng_ops;
>
> file_lock.fl_start = lockt->lt_offset;
> file_lock.fl_end = last_byte_offset(lockt->lt_offset, lockt->lt_length);
> --
> 1.5.5.6
>
> _______________________________________________
> NFSv4 mailing list
> NFSv4@linux-nfs.org
> http://linux-nfs.org/cgi-bin/mailman/listinfo/nfsv4
next prev parent reply other threads:[~2009-01-22 18:52 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 ` J. Bruce Fields [this message]
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 ` [Cluster-devel] " J. Bruce Fields
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=20090122185232.GC15279@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.