From: "J. Bruce Fields" <bfields@fieldses.org>
To: Trond Myklebust <Trond.Myklebust@netapp.com>
Cc: aglo@citi.umich.edu, kwc@citi.umich.edu, linux-nfs@vger.kernel.org
Subject: Re: [PATCH 5/9] rpc: call release_pipe only on last close
Date: Mon, 10 Nov 2008 15:26:40 -0500 [thread overview]
Message-ID: <20081110202640.GG19053@fieldses.org> (raw)
In-Reply-To: <1226348515.7599.52.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
On Mon, Nov 10, 2008 at 03:21:55PM -0500, Trond Myklebust wrote:
> On Mon, 2008-11-10 at 15:17 -0500, J. Bruce Fields wrote:
> > On Mon, Nov 10, 2008 at 03:11:38PM -0500, Trond Myklebust wrote:
> > > On Mon, 2008-11-10 at 15:07 -0500, J. Bruce Fields wrote:
> > >
> > > > Again, I'm dealing with that case by calling release_pipe() from
> > > > rpc_close_pipes(), just as the current code does--the only change being
> > > > to do that only when there are still opens:
> > > >
> > > > last_close = rpci->nreaders != 0 || rpci->nwriters != 0;
> > > > rpci->nreaders = 0;
> > > > ...
> > > > rpci->nwriters = 0;
> > > > if (last_close && ops->release_pipe)
> > > > ops->release_pipe(inode);
> > >
> > > Which means that if the kernel calls rpc_close_pipes() before gssd has
> > > managed to close, then you _NEVER_ call ops->release_pipe()...
> >
> > So, I take "before gssd has managed to close" to mean that gssd is still
> > holding the file open. Thus the statement
> >
> > last_close = rpci->nreaders != 0 || rpci->nwriters != 0;
> >
> > evaluates to true; either nreaders or nwriters must be nonzero.
> >
> > (And note the open and close code that modifes nreaders and nwriters is
> > all serialized with this code by the i_mutex.)
> >
> > --b.
>
> Exactly... That is a very common situation that happens pretty much
> every time you unmount. The kernel closes the pipe on its side, and
> removes the dentry; it doesn't wait for gssd to close the pipe.
Yep. And when we're in that situation, last_close is true, so
if (last_close && ops->release_pipe)
ops->release_pipe(inode)
does ensure that calls to the ->open_pipe() and ->release_pipe() methods
balance, as originally claimed.
Maybe it'd be clearer to call that variable "still_open", or something?
still_open = rpci->nreaders != 0 || rpci->nwriters != 0;
...
if (still_open && ops->release_pipe)
ops->release_pipe(inode)
??
--b.
next prev parent reply other threads:[~2008-11-10 20:26 UTC|newest]
Thread overview: 54+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-13 22:50 [RFC] new client gssd upcall J. Bruce Fields
2008-06-13 22:50 ` [PATCH 1/5] rpc: remove unnecessary assignment J. Bruce Fields
2008-06-13 22:50 ` [PATCH 2/5] rpc: Use separate spinlock for cred locking in auth_gss.c J. Bruce Fields
2008-06-13 22:50 ` [PATCH 3/5] rpc: move in_downcall list to gss code J. Bruce Fields
2008-06-13 22:50 ` [PATCH 4/5] rpc: add an rpc_pipe_open method J. Bruce Fields
2008-06-13 22:50 ` [PATCH 5/5] rpc: add new gssd upcall pipe J. Bruce Fields
2008-06-14 16:07 ` Trond Myklebust
2008-06-14 17:36 ` J. Bruce Fields
2008-11-09 20:46 ` J. Bruce Fields
2008-06-14 16:01 ` [PATCH 3/5] rpc: move in_downcall list to gss code Trond Myklebust
2008-06-14 15:58 ` [PATCH 2/5] rpc: Use separate spinlock for cred locking in auth_gss.c Trond Myklebust
2008-06-14 17:45 ` J. Bruce Fields
2008-06-14 18:16 ` Trond Myklebust
2008-06-17 20:51 ` J. Bruce Fields
2008-06-17 21:34 ` Trond Myklebust
2008-06-17 22:06 ` J. Bruce Fields
2008-11-09 20:46 ` J. Bruce Fields
2008-11-09 21:04 ` text-based gss upcall J. Bruce Fields
2008-11-09 21:04 ` [PATCH 1/9] rpc: remove unnecessary assignment J. Bruce Fields
2008-11-09 21:04 ` [PATCH 2/9] rpc: factor out warning code from gss_pipe_destroy_msg J. Bruce Fields
2008-11-09 21:04 ` [PATCH 3/9] rpc: minor gss_alloc_msg cleanup J. Bruce Fields
2008-11-09 21:04 ` [PATCH 4/9] rpc: add an rpc_pipe_open method J. Bruce Fields
2008-11-09 21:04 ` [PATCH 5/9] rpc: call release_pipe only on last close J. Bruce Fields
2008-11-09 21:04 ` [PATCH 6/9] rpc: track number of users of the gss upcall pipe J. Bruce Fields
2008-11-09 21:04 ` [PATCH 7/9] rpc: use count of pipe openers to wait for first open J. Bruce Fields
2008-11-09 21:04 ` [PATCH 8/9] rpc: store pointer to pipe inode in gss upcall message J. Bruce Fields
2008-11-09 21:04 ` [PATCH 9/9] rpc: implement new upcall J. Bruce Fields
2008-11-10 19:11 ` [PATCH 5/9] rpc: call release_pipe only on last close Trond Myklebust
[not found] ` <1226344297.7599.41.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2008-11-10 19:49 ` J. Bruce Fields
2008-11-10 20:01 ` Trond Myklebust
[not found] ` <1226347279.7599.47.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2008-11-10 20:07 ` J. Bruce Fields
2008-11-10 20:11 ` Trond Myklebust
[not found] ` <1226347898.7599.49.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2008-11-10 20:17 ` J. Bruce Fields
2008-11-10 20:21 ` Trond Myklebust
[not found] ` <1226348515.7599.52.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2008-11-10 20:26 ` J. Bruce Fields [this message]
2008-11-10 20:37 ` J. Bruce Fields
2008-11-10 21:18 ` Trond Myklebust
[not found] ` <1226351883.7599.103.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2008-11-10 21:27 ` J. Bruce Fields
2008-11-10 20:35 ` [PATCH 4/9] rpc: add an rpc_pipe_open method Trond Myklebust
[not found] ` <1226349322.7599.59.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2008-11-10 20:37 ` J. Bruce Fields
2008-11-10 21:18 ` J. Bruce Fields
2008-11-10 21:48 ` Trond Myklebust
[not found] ` <1226353722.7599.105.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2008-11-10 21:56 ` J. Bruce Fields
2008-06-16 14:28 ` [RFC] new client gssd upcall Jeff Layton
[not found] ` <20080616102859.66fa6a34-RtJpwOs3+0O+kQycOl6kW4xkIHaj4LzF@public.gmane.org>
2008-06-17 21:36 ` J. Bruce Fields
2008-06-17 21:59 ` Trond Myklebust
2008-06-17 22:09 ` J. Bruce Fields
2008-06-18 11:51 ` Jeff Layton
2008-06-19 15:37 ` Olga Kornievskaia
2008-06-19 15:49 ` Jeff Layton
[not found] ` <20080619114929.5c211ec9-RtJpwOs3+0O+kQycOl6kW4xkIHaj4LzF@public.gmane.org>
2008-06-19 17:06 ` Trond Myklebust
2008-06-19 17:27 ` Jeff Layton
[not found] ` <20080619132720.6bce2bb9-RtJpwOs3+0O+kQycOl6kW4xkIHaj4LzF@public.gmane.org>
2008-06-19 18:13 ` Trond Myklebust
2008-06-19 19:11 ` 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=20081110202640.GG19053@fieldses.org \
--to=bfields@fieldses.org \
--cc=Trond.Myklebust@netapp.com \
--cc=aglo@citi.umich.edu \
--cc=kwc@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 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.