From: Jeff Layton <jlayton@redhat.com>
To: "J. Bruce Fields" <bfields@fieldses.org>
Cc: trond.myklebust@primarydata.com, anna.schumaker@netapp.com,
linux-nfs@vger.kernel.org
Subject: Re: [PATCH v3 2/5] nfsd: have nfsd4_lock use blocking locks for v4.1+ locks
Date: Sat, 24 Sep 2016 12:48:35 -0400 [thread overview]
Message-ID: <1474735715.23280.17.camel@redhat.com> (raw)
In-Reply-To: <20160924150211.GA19783@fieldses.org>
On Sat, 2016-09-24 at 11:02 -0400, J. Bruce Fields wrote:
> On Fri, Sep 23, 2016 at 08:43:44PM -0400, Jeff Layton wrote:
> >
> > On Fri, 2016-09-23 at 17:19 -0400, J. Bruce Fields wrote:
> > >
> > > On Fri, Sep 16, 2016 at 04:28:24PM -0400, Jeff Layton wrote:
> > > >
> > > >
> > > > Create a new per-lockowner+per-inode structure that contains a
> > > > file_lock. Have nfsd4_lock add this structure to the lockowner's list
> > > > prior to setting the lock. Then call the vfs and request a blocking lock
> > > > (by setting FL_SLEEP). If we get anything besides FILE_LOCK_DEFERRED
> > >
> > > That doesn't sound right. FILE_LOCK_DEFERRED is a special case for
> > > asynchronous locking--it means "I don't know whether there's a conflict
> > > or not, it may take a while to check", not "there's a conflict".
> > >
> > > (Ugh. I apologize for the asynchronous locking code.)
> > >
> > > --b.
> > >
> >
> > The local file locking code definitely uses this return code to mean
> > "This lock is blocked, and I'll call your lm_notify when it's
> > unblocked", which is exactly what we rely on here.
> >
> > There is a place that uses it in the way you mention though, and that is
> > when DLM and svc lockd are interacting via dlm_posix_lock(). lockd can't
> > be in play here since this is all NFSv4, so I think the code does handle
> > this correctly.
>
> Got it, my apologies! I'll read some more....
>
> The patches look fine as far as I can tell.
>
No worries. It is confusing code, especially once lockd is in the mix.
Thanks for having a look at the set.
> >
> > That said...maybe should probably think about some way to disambiguate
> > those two states in the return code. It is horribly confusing.
>
> Yes.
>
> Honestly maybe the asynchronous dlm case just shouldn't be there. I
> remember thinking multithreading lockd would accomplish the same. But
> maybe we already have that in the nfsv4 case, in which case who cares.
> (Well, except maybe the locking effectively serializes locking anyway, I
> haven't looked.)
>
Maybe, but it's hard to know who is currently relying on this, and as
far as I can tell, it's not broken. I'd hate to remove the functionality
without some way to gauge that.
What I was thinking was that we could add a new FILE_LOCK_BLOCKED error
code and use that everywhere but the DLM case. The DLM case could then
use FILE_LOCK_DEFERRED to convey the situation you mentioned before.
That said, I'd rather not do that in the context of this set. I'd need
to spend some time in the lockd code especially, to make sure that that
wouldn't break anything.
--
Jeff Layton <jlayton@redhat.com>
next prev parent reply other threads:[~2016-09-24 16:48 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-09-16 20:28 [PATCH v3 0/5] add CB_NOTIFY_LOCK support to knfsd Jeff Layton
2016-09-16 20:28 ` [PATCH v3 1/5] nfsd: plumb in a CB_NOTIFY_LOCK operation Jeff Layton
2016-09-16 20:28 ` [PATCH v3 2/5] nfsd: have nfsd4_lock use blocking locks for v4.1+ locks Jeff Layton
2016-09-23 21:19 ` J. Bruce Fields
2016-09-24 0:43 ` Jeff Layton
2016-09-24 15:02 ` J. Bruce Fields
2016-09-24 16:48 ` Jeff Layton [this message]
2016-09-16 20:28 ` [PATCH v3 3/5] nfsd: add a LRU list for blocked locks Jeff Layton
2016-09-16 20:28 ` [PATCH v3 4/5] nfs: add a new NFS4_OPEN_RESULT_MAY_NOTIFY_LOCK constant Jeff Layton
2016-09-16 20:28 ` [PATCH v3 5/5] nfsd: set the MAY_NOTIFY_LOCK flag in OPEN replies Jeff Layton
2016-09-23 21:05 ` [PATCH v3 0/5] add CB_NOTIFY_LOCK support to knfsd J. Bruce Fields
2016-09-24 0:48 ` Jeff Layton
2016-09-26 16:03 ` 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=1474735715.23280.17.camel@redhat.com \
--to=jlayton@redhat.com \
--cc=anna.schumaker@netapp.com \
--cc=bfields@fieldses.org \
--cc=linux-nfs@vger.kernel.org \
--cc=trond.myklebust@primarydata.com \
/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 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).