Linux NFS development
 help / color / mirror / Atom feed
From: Jeff Layton <jeff.layton@primarydata.com>
To: Christoph Hellwig <hch@infradead.org>
Cc: Jeff Layton <jeff.layton@primarydata.com>,
	bfields@fieldses.org, linux-nfs@vger.kernel.org
Subject: Re: [PATCH v2 06/10] nfsd: Protect the nfs4_file delegation fields using the fi_lock
Date: Thu, 17 Jul 2014 11:31:17 -0400	[thread overview]
Message-ID: <20140717113117.7f8ca2a9@tlielax.poochiereds.net> (raw)
In-Reply-To: <20140717145534.GA21127@infradead.org>

On Thu, 17 Jul 2014 07:55:34 -0700
Christoph Hellwig <hch@infradead.org> wrote:

> On Wed, Jul 16, 2014 at 03:04:01PM -0400, Jeff Layton wrote:
> > Hmm...maybe. It's a very unlikely race though, and I think the same
> > sort of race exists today. In fact, it's worse today since we don't do
> > any checking of the validity of the lease after acquiring it now.
> > 
> > The flag sounds like a good idea, but the code is structured completely
> > wrong for it currently. The delegation is only hashed after we get a
> > lease, so the lease break wouldn't find anything to set a flag on.
> > 
> > Quite frankly, I _really_ do not want to have to rework the locking in
> > the delegation code yet again. I think this scheme is an improvement
> > over what we have now, even if it's not 100% perfect.
> > 
> > Once we get the scalability set done, I'd like to go back and overhaul
> > the delegation code. There are a lot of ugly warts here, but fixing
> > them is really a separate project in its own right.
> 
> But in the old code we had the client lock over all of this, right?
> 

Yes, but it's still possible for the lease to get broken after setting
it but before the delegation is hashed in the existing code. You're
correct though that another nfsd wouldn't be able to set a lease on the
same file though.

One possibility to ensure that can't happen is to check whether
fp->fi_had_conflict became true after vfs_setlease returns. That would
also obviate the need for file_has_lease. I'm still trying to figure
out whether there are potential races there with that approach though.

> Anyway, if Bruce and you are fine with this I'm not going to block it,
> although it seems a little incomplete to me.

Thanks, and I agree. I think we're going to need to revisit this area,
but I suspect we need to do some surgery to the generic lease handling
code too.

For one thing, it's a little disturbing to me that vfs_setlease returns
a pointer to the file_lock that's sitting on the i_flock list. I'm not
sure that it's a problem today, but it seems like a caller could end up
trying to use that pointer after time_out_leases has been called, or
after the lease has been otherwise deleted.

-- 
Jeff Layton <jlayton@primarydata.com>

  reply	other threads:[~2014-07-17 15:31 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-16 14:31 [PATCH v2 0/8] nfsd: more delegation fixes to prepare for client_mutex removal Jeff Layton
2014-07-16 14:31 ` [PATCH v2 01/10] nfsd: eliminate nfsd4_init_callback Jeff Layton
2014-07-16 14:31 ` [PATCH v2 02/10] nfsd: Avoid taking state_lock while holding inode lock in nfsd_break_one_deleg Jeff Layton
2014-07-17  1:34   ` J. Bruce Fields
2014-07-17 10:57     ` Jeff Layton
2014-07-16 14:31 ` [PATCH v2 03/10] nfsd: nfs4_alloc_init_lease should take a nfs4_file arg Jeff Layton
2014-07-16 14:31 ` [PATCH v2 04/10] nfsd: Ensure stateids remain unique until they are freed Jeff Layton
2014-07-17 18:44   ` J. Bruce Fields
2014-07-17 18:46     ` Jeff Layton
2014-07-16 14:32 ` [PATCH v2 05/10] locks: add file_has_lease to prevent delegation break races Jeff Layton
2014-07-16 14:32 ` [PATCH v2 06/10] nfsd: Protect the nfs4_file delegation fields using the fi_lock Jeff Layton
2014-07-16 18:09   ` Christoph Hellwig
2014-07-16 19:04     ` Jeff Layton
2014-07-17 14:55       ` Christoph Hellwig
2014-07-17 15:31         ` Jeff Layton [this message]
2014-07-16 14:32 ` [PATCH v2 07/10] nfsd: Move the delegation reference counter into the struct nfs4_stid Jeff Layton
2014-07-16 14:32 ` [PATCH v2 08/10] nfsd: Simplify stateid management Jeff Layton
2014-07-16 18:10   ` Christoph Hellwig
2014-07-16 14:32 ` [PATCH v2 09/10] nfsd: Fix delegation revocation Jeff Layton
2014-07-16 18:30   ` Christoph Hellwig
2014-07-16 19:16     ` Jeff Layton
2014-07-17  9:22       ` Christoph Hellwig
2014-07-16 14:32 ` [PATCH v2 10/10] nfsd: Convert delegation counter to an atomic_long_t type Jeff Layton
2014-07-16 18:11   ` Christoph Hellwig
2014-07-16 14:33 ` [PATCH v2 0/8] nfsd: more delegation fixes to prepare for client_mutex removal Jeff Layton

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=20140717113117.7f8ca2a9@tlielax.poochiereds.net \
    --to=jeff.layton@primarydata.com \
    --cc=bfields@fieldses.org \
    --cc=hch@infradead.org \
    --cc=linux-nfs@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox