From: "J. Bruce Fields" <bfields@fieldses.org>
To: Jeff Layton <jlayton@primarydata.com>
Cc: linux-nfs@vger.kernel.org, hch@infradead.org
Subject: Re: [PATCH v6 2/9] nfsd: fully unhash delegations when revoking them
Date: Tue, 29 Jul 2014 10:53:31 -0400 [thread overview]
Message-ID: <20140729145331.GB19210@fieldses.org> (raw)
In-Reply-To: <1406288067-20663-3-git-send-email-jlayton@primarydata.com>
On Fri, Jul 25, 2014 at 07:34:20AM -0400, Jeff Layton wrote:
> @@ -698,11 +699,10 @@ static void revoke_delegation(struct nfs4_delegation *dp)
> struct nfs4_client *clp = dp->dl_stid.sc_client;
>
> if (clp->cl_minorversion == 0)
> - destroy_delegation(dp);
> + destroy_revoked_delegation(dp);
I don't understand this one--in the NFSv4.0 case, when is the delegation
unhashed?
(And, apologies if that's a repeat question. I remember wondering about
this before but can't find mail in the archives....)
--b.
> else {
> - unhash_delegation(dp);
> dp->dl_stid.sc_type = NFS4_REVOKED_DELEG_STID;
> - list_add(&dp->dl_recall_lru, &clp->cl_revoked);
> + list_move(&dp->dl_recall_lru, &clp->cl_revoked);
> }
> }
>
> @@ -1458,15 +1458,14 @@ destroy_client(struct nfs4_client *clp)
> spin_lock(&state_lock);
> while (!list_empty(&clp->cl_delegations)) {
> dp = list_entry(clp->cl_delegations.next, struct nfs4_delegation, dl_perclnt);
> - list_del_init(&dp->dl_perclnt);
> - /* Ensure that deleg break won't try to requeue it */
> - ++dp->dl_time;
> - list_move(&dp->dl_recall_lru, &reaplist);
> + unhash_delegation_locked(dp);
> + list_add(&dp->dl_recall_lru, &reaplist);
> }
> spin_unlock(&state_lock);
> while (!list_empty(&reaplist)) {
> dp = list_entry(reaplist.next, struct nfs4_delegation, dl_recall_lru);
> - destroy_delegation(dp);
> + list_del_init(&dp->dl_recall_lru);
> + nfs4_put_delegation(dp);
> }
> list_splice_init(&clp->cl_revoked, &reaplist);
> while (!list_empty(&reaplist)) {
> @@ -3662,7 +3661,7 @@ nfs4_open_delegation(struct net *net, struct svc_fh *fh,
> open->op_delegate_type = NFS4_OPEN_DELEGATE_READ;
> return;
> out_free:
> - destroy_delegation(dp);
> + nfs4_put_delegation(dp);
> out_no_deleg:
> open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE;
> if (open->op_claim_type == NFS4_OPEN_CLAIM_PREVIOUS &&
> @@ -3900,7 +3899,8 @@ nfs4_laundromat(struct nfsd_net *nn)
> new_timeo = min(new_timeo, t);
> break;
> }
> - list_move(&dp->dl_recall_lru, &reaplist);
> + unhash_delegation_locked(dp);
> + list_add(&dp->dl_recall_lru, &reaplist);
> }
> spin_unlock(&state_lock);
> list_for_each_safe(pos, next, &reaplist) {
> @@ -5382,12 +5382,8 @@ static u64 nfsd_find_all_delegations(struct nfs4_client *clp, u64 max,
> if (dp->dl_time != 0)
> continue;
>
> - /*
> - * Increment dl_time to ensure that delegation breaks
> - * don't monkey with it now that we are.
> - */
> - ++dp->dl_time;
> - list_move(&dp->dl_recall_lru, victims);
> + unhash_delegation_locked(dp);
> + list_add(&dp->dl_recall_lru, victims);
> }
> if (++count == max)
> break;
> @@ -5642,12 +5638,14 @@ nfs4_state_shutdown_net(struct net *net)
> spin_lock(&state_lock);
> list_for_each_safe(pos, next, &nn->del_recall_lru) {
> dp = list_entry (pos, struct nfs4_delegation, dl_recall_lru);
> - list_move(&dp->dl_recall_lru, &reaplist);
> + unhash_delegation_locked(dp);
> + list_add(&dp->dl_recall_lru, &reaplist);
> }
> spin_unlock(&state_lock);
> list_for_each_safe(pos, next, &reaplist) {
> dp = list_entry (pos, struct nfs4_delegation, dl_recall_lru);
> - destroy_delegation(dp);
> + list_del_init(&dp->dl_recall_lru);
> + nfs4_put_delegation(dp);
> }
>
> nfsd4_client_tracking_exit(net);
> --
> 1.9.3
>
next prev parent reply other threads:[~2014-07-29 14:53 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-25 11:34 [PATCH v6 0/9] nfsd: more delegation fixes to prepare for client_mutex removal Jeff Layton
2014-07-25 11:34 ` [PATCH v6 1/9] nfsd: simplify stateid allocation and file handling Jeff Layton
2014-07-25 11:34 ` [PATCH v6 2/9] nfsd: fully unhash delegations when revoking them Jeff Layton
2014-07-29 14:53 ` J. Bruce Fields [this message]
2014-07-29 16:41 ` Jeff Layton
2014-07-29 17:53 ` J. Bruce Fields
2014-07-25 11:34 ` [PATCH v6 3/9] nfsd: ensure that clp->cl_revoked list is protected by clp->cl_lock Jeff Layton
2014-07-25 11:34 ` [PATCH v6 4/9] nfsd: Convert delegation counter to an atomic_long_t type Jeff Layton
2014-07-25 11:34 ` [PATCH v6 5/9] nfsd: drop unused stp arg to alloc_init_deleg Jeff Layton
2014-07-25 11:34 ` [PATCH v6 6/9] nfsd: clean up arguments to nfs4_open_delegation Jeff Layton
2014-07-25 11:34 ` [PATCH v6 7/9] nfsd: clean up nfs4_set_delegation Jeff Layton
2014-07-25 11:34 ` [PATCH v6 8/9] nfsd: give block_delegation and delegation_blocked its own spinlock Jeff Layton
2014-07-25 11:34 ` [PATCH v6 9/9] nfsd: remove dl_fh field from struct nfs4_delegation Jeff Layton
2014-07-29 18:59 ` [PATCH v6 0/9] nfsd: more delegation fixes to prepare for client_mutex removal 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=20140729145331.GB19210@fieldses.org \
--to=bfields@fieldses.org \
--cc=hch@infradead.org \
--cc=jlayton@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 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.