From: NeilBrown <neilb@suse.de>
To: "J. Bruce Fields" <bfields@fieldses.org>
Cc: Jeff Layton <jeff.layton@primarydata.com>,
hch@infradead.org, linux-nfs@vger.kernel.org
Subject: Re: [PATCH v4 10/10] nfsd: give block_delegation and delegation_blocked its own spinlock
Date: Tue, 22 Jul 2014 08:50:25 +1000 [thread overview]
Message-ID: <20140722085025.00ca48cb@notabene.brown> (raw)
In-Reply-To: <20140721211757.GL8438@fieldses.org>
[-- Attachment #1: Type: text/plain, Size: 2855 bytes --]
On Mon, 21 Jul 2014 17:17:57 -0400 "J. Bruce Fields" <bfields@fieldses.org>
wrote:
> On Tue, Jul 22, 2014 at 06:40:49AM +1000, NeilBrown wrote:
> > On Mon, 21 Jul 2014 07:44:12 -0400 Jeff Layton <jeff.layton@primarydata.com>
> > wrote:
> >
> > > On Mon, 21 Jul 2014 17:02:54 +1000
> > > NeilBrown <neilb@suse.de> wrote:
> >
> > > > > hash = arch_fast_hash(&fh->fh_base, fh->fh_size, 0);
> > > > >
> > > > > __set_bit(hash&255, bd->set[bd->new]);
> > > > > __set_bit((hash>>8)&255, bd->set[bd->new]);
> > > > > __set_bit((hash>>16)&255, bd->set[bd->new]);
> > > > > + spin_lock(&blocked_delegations_lock);
> > > >
> > > > __set_bit isn't atomic. The spin_lock should be taken *before* these
> > > > __set_bit() calls.
> > > >
> > > > Otherwise, looks fine.
> > > >
> > > > Thanks,
> > > > NeilBrown
> > > >
> > > >
> > >
> > > Ok. I guess the worry is that we could end up setting bits in the
> > > middle of swapping the two fields? Makes sense -- fixed in my repo.
> >
> > It is more subtle than that.
> > __set_bit() will:
> > read a value from memory to a register
> > set a bit in the register
> > write the register back out to memory
> >
> > If two threads both run __set_bit on the same word of memory at the same
> > time, one of the updates can get lost.
> > set_bit() (no underscore) performs an atomic RMW to avoid this, but is more
> > expensive.
> > spin_lock() obviously ensures the required exclusion and as we are going to
> > take the lock anyway we may as well take it before setting bits so we can use
> > the non-atomic (cheaper) __set_bit function.
> >
> > > I'll send out the updated set later today (it also includes a few nits
> > > that HCH pointed out last week).
> > >
> > > As a side note...I wonder how much we'll get in the way of false
> > > positives with this scheme?
> >
> > If a future version of NFSv4 could allow delegations to be granted while a
> > file is open (oh, it seems you are the only client using this file at the
> > moment, you can treat this "open" as a delegation if you like) a few false
> > positives would be a complete non-issue.
>
> For what it's worth, I think 4.1 provides what you're asking for here;
> see
>
> http://tools.ietf.org/html/rfc5661#section-20.7
>
> and the discussion of the various WANT_ flags in
>
> http://tools.ietf.org/html/rfc5661#section-18.16.3
>
> As far as I know none of that is implemented yet.
>
> --b.
I guess I should really read the 4.1 (and 4.2) spec some day....
Though the 20.7 section seems to be about saying "resources in general are
available" rather than "this specific file that you wanted a delegation for
but didn't get one is how up for delegation"....
But I only had a quick read so I might have missed something.
Thanks,
NeilBrown
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 828 bytes --]
next prev parent reply other threads:[~2014-07-21 22:50 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-18 15:13 [PATCH v4 00/10] nfsd: more delegation fixes to prepare for client_mutex removal Jeff Layton
2014-07-18 15:13 ` [PATCH v4 01/10] nfsd: Protect the nfs4_file delegation fields using the fi_lock Jeff Layton
2014-07-18 15:54 ` Christoph Hellwig
2014-07-18 18:46 ` Jeff Layton
2014-07-18 16:28 ` J. Bruce Fields
2014-07-18 17:31 ` Jeff Layton
2014-07-18 17:49 ` J. Bruce Fields
2014-07-18 19:04 ` Jeff Layton
2014-07-18 19:21 ` J. Bruce Fields
2014-07-18 19:32 ` Jeff Layton
2014-07-18 19:35 ` J. Bruce Fields
2014-07-21 21:05 ` J. Bruce Fields
2014-07-21 21:12 ` Jeff Layton
2014-07-18 15:13 ` [PATCH v4 02/10] nfsd: Move the delegation reference counter into the struct nfs4_stid Jeff Layton
2014-07-18 15:13 ` [PATCH v4 03/10] nfsd: simplify stateid allocation and file handling Jeff Layton
2014-07-18 15:55 ` Christoph Hellwig
2014-07-18 15:13 ` [PATCH v4 04/10] nfsd: Fix delegation revocation Jeff Layton
2014-07-18 16:44 ` J. Bruce Fields
2014-07-18 17:24 ` Jeff Layton
2014-07-18 15:13 ` [PATCH v4 05/10] nfsd: ensure that clp->cl_revoked list is protected by clp->cl_lock Jeff Layton
2014-07-18 15:57 ` Christoph Hellwig
2014-07-18 15:13 ` [PATCH v4 06/10] nfsd: Convert delegation counter to an atomic_long_t type Jeff Layton
2014-07-18 15:13 ` [PATCH v4 07/10] nfsd: drop unused stp arg to alloc_init_deleg Jeff Layton
2014-07-18 15:57 ` Christoph Hellwig
2014-07-18 15:13 ` [PATCH v4 08/10] nfsd: clean up arguments to nfs4_open_delegation Jeff Layton
2014-07-18 15:57 ` Christoph Hellwig
2014-07-18 15:13 ` [PATCH v4 09/10] nfsd: clean up nfs4_set_delegation Jeff Layton
2014-07-18 17:19 ` Christoph Hellwig
2014-07-18 17:23 ` Jeff Layton
2014-07-18 15:13 ` [PATCH v4 10/10] nfsd: give block_delegation and delegation_blocked its own spinlock Jeff Layton
2014-07-18 17:24 ` Christoph Hellwig
2014-07-21 7:02 ` NeilBrown
2014-07-21 11:44 ` Jeff Layton
2014-07-21 13:11 ` J. Bruce Fields
2014-07-21 13:23 ` Jeff Layton
2014-07-21 20:40 ` NeilBrown
2014-07-21 21:17 ` J. Bruce Fields
2014-07-21 22:50 ` NeilBrown [this message]
2014-07-22 15:00 ` 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=20140722085025.00ca48cb@notabene.brown \
--to=neilb@suse.de \
--cc=bfields@fieldses.org \
--cc=hch@infradead.org \
--cc=jeff.layton@primarydata.com \
--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;
as well as URLs for NNTP newsgroup(s).