From: Benny Halevy <bhalevy@panasas.com>
To: "J. Bruce Fields" <bfields@citi.umich.edu>
Cc: linux-nfs@vger.kernel.org
Subject: Re: [PATCH 1/2] nfsd4: complete enforcement of 4.1 op ordering
Date: Tue, 27 Apr 2010 18:44:51 +0300 [thread overview]
Message-ID: <4BD70673.6040102@panasas.com> (raw)
In-Reply-To: <20100427150103.GC30729@fieldses.org>
On Apr. 27, 2010, 18:01 +0300, "J. Bruce Fields" <bfields@citi.umich.edu> wrote:
> On Tue, Apr 27, 2010 at 05:40:53PM +0300, Benny Halevy wrote:
>> Bruce, Oddly enough I didn't receive the patch you're commenting on into
>> my inbox. It already happened before on this list and I've no idea what
>> could have went wrong. (I also have a gmail account subscribed on this list
>> and I can't find it there, even in the spam folder :-/)
>
> Huh. I see it in various archives, so I'll assume the problem's on your
> end.
>
>> comments below...
>>
>> On Apr. 24, 2010, 0:24 +0300, "J. Bruce Fields" <bfields@citi.umich.edu> wrote:
>>> Benny--I coded up a simple (possibly incorrect) implementation of this,
>>> and then remembered that this was more or less what your
>>> state-lock-reduction-prep patch series did. Do you have a more recent
>>> version of those patches?
>>
>> Yup. though untested with latest bits.
>> I'll resend it as a reply to this message.
>
> I think what we actually want is a mechanism with semantics like yours,
> but with multiple RENEW values so we can track how many users there are
> and have only the last one do the renew.
>
> One possibility:
>
> - add a cl_users field, with:
> cl_user>0 meaning: somebody's using this client right
> now, don't expire it. (Your RENEW state.)
> cl_user<0 meaning: this client is already being expired,
> don't try to use it (or any sessionid or other
> state associated with it). (Your EXPIRED state.)
> cl_user==0: fair game to either use or (if expiry time
> has passed) to expire. (Your NORMAL state.)
>
> - add a cl_renewme boolean, meaning: last user of this client
> (user to decrement to 0) should renew the client (reset the
> expiry time and move it to the back of the lru).
>
> So:
>
> - in laundromat:
> - atomically check whether cl_users is 0, and, if so,
> decrement to -1. (If positive, skip expiring this
> client.)
>
> - on looking up a sessionid (or, eventually, any state object
> associated with a client), call get_client(), which:
> - atomically checks whether cl_users is >=0, and, if so,
> increments it. If <0, fail to find the object and
> return an appropriate error (STALE?).
> - on renew:
> - BUG_ON(cl_user<=0)
> - set cl_renewme
> - on dropping reference to a sessionid (or, eventually, any
> state object associated with a client), call put_client(),
> which:
> - atomically decrements cl_users, checks whether it hits
> zero, and (if so, and if cl_renewme set), renews the
> client.
>
> One possible implementation: make cl_users atomic, add a per-client
> spinlock, make the put_client() do an atomic_dec_and_lock(), etc.
>
> --b.
Sounds good. I'll take a stab at it right away.
(Funny that my original implementation uses a counter but IIRC
I decided at the time it was too complicated but I agree it's much better)
Benny
next prev parent reply other threads:[~2010-04-27 15:44 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-22 14:32 [PATCH 1/2] nfsd4: complete enforcement of 4.1 op ordering J. Bruce Fields
2010-04-22 14:32 ` [PATCH 2/2] nfsd4: implement reclaim_complete J. Bruce Fields
2010-04-22 14:48 ` [PATCH 1/2] nfsd4: complete enforcement of 4.1 op ordering J. Bruce Fields
2010-04-22 15:03 ` J. Bruce Fields
2010-04-23 21:24 ` J. Bruce Fields
2010-04-23 23:13 ` J. Bruce Fields
2010-04-24 0:10 ` J. Bruce Fields
2010-04-27 15:03 ` Benny Halevy
2010-04-27 14:40 ` Benny Halevy
2010-04-27 15:01 ` J. Bruce Fields
2010-04-27 15:44 ` Benny Halevy [this message]
2010-04-27 16:36 ` J. Bruce Fields
2010-04-27 15:46 ` Benny Halevy
2010-04-27 16:12 ` J. Bruce Fields
2010-04-27 16:22 ` Benny Halevy
2010-04-27 16:34 ` J. Bruce Fields
2010-04-27 16:44 ` Benny Halevy
2010-04-27 18:10 ` 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=4BD70673.6040102@panasas.com \
--to=bhalevy@panasas.com \
--cc=bfields@citi.umich.edu \
--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