From: Al Viro <viro@ZenIV.linux.org.uk>
To: Jeff Layton <jlayton@poochiereds.net>
Cc: Andrey Ryabinin <a.ryabinin@samsung.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org
Subject: Re: [git pull] vfs part 2
Date: Thu, 2 Jul 2015 19:40:15 +0100 [thread overview]
Message-ID: <20150702184015.GO17109@ZenIV.linux.org.uk> (raw)
In-Reply-To: <20150702130139.35e01106@tlielax.poochiereds.net>
On Thu, Jul 02, 2015 at 01:01:39PM -0400, Jeff Layton wrote:
> So p9_idpool_create should take an argument for the "end" value, and
> then store that in a new field in p9_idpool. Then they can pass that in
> as the "end" parm in idr_alloc. Or, they could give up using the same
> function there and use a different one for tags and FIDs.
>
> In any case...allowing this thing to allocate tag values that can
> collide seems fundamentally wrong. Using idr_alloc_cyclic might also
> not hurt either, particularly given that these tag values are supposed
> to function something like an XID and you probably don't want to be
> reusing them too quickly.
All they are used for is matching response to request. Basically, you
can have up to 65535 pending requests. Reusing it right after getting
the response is fine.
Keep in mind that it's not supposed to be used on top of something like
UDP - *all* retransmits, etc., are responsibility of transport. It's
connection-oriented, reliable and order-preserving, with a shitload of state
tied to connection, starting with FIDs - unlike FHANDLE, FID meaning depends
upon connection history. Tags are even more transient.
Basically, the rules are
* request bears a 16bit tag.
* server can process pending requests in any order (with one exception)
and it must put the same tag into responses.
* client can ask to abort a pending request by issuing Tflush[old_tag];
* server must handle Tflush immediately. It must drop any pending
request matching old_tag and send Rflush confirming that. No response to
any request matching old_tag sent before Tflush should be issued after issuing
Rflush.
* if client has not issued Tflush, it must not reuse the tag until
getting a response bearing that tag.
* if client *has* issued Tflush, it must not reuse the tag until
getting Rflush, even if it does get response to the request it has tried to
abort.
BTW, failure to send Tflush means that we should leave the tag in use,
period. As it is, p9_client_rpc()/p9_client_zc_rpc() ignore such
situations - failure from p9_client_flush() is simply not noticed.
I seriously doubt that this is what we are hitting here, but it's a bug
all the same.
We also must _not_ let p9_client_cb() do anything unless req is non-NULL
and req->status is REQ_STATUS_SENT - stray tags from server shouldn't
be acted upon. As it is, the whole thing is trivial to oops - just have
server send _any_ R-message with something like 0xfff0 for tag. End of
story, p9_tag_lookup() returns NULL, p9_client_cb() oopses.
next prev parent reply other threads:[~2015-07-02 18:40 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-15 18:14 [git pull] vfs part 2 Al Viro
2015-04-23 10:16 ` Andrey Ryabinin
2015-05-25 8:30 ` Andrey Ryabinin
2015-06-21 21:12 ` Al Viro
2015-06-21 21:16 ` Linus Torvalds
2015-06-21 21:35 ` Al Viro
2015-06-22 12:02 ` Andrey Ryabinin
2015-07-01 6:27 ` Al Viro
2015-07-01 7:50 ` Andrey Ryabinin
2015-07-01 8:27 ` Al Viro
2015-07-01 8:41 ` Andrey Ryabinin
2015-07-01 8:55 ` Al Viro
2015-07-01 11:25 ` Andrey Ryabinin
2015-07-01 18:44 ` Al Viro
2015-07-02 3:20 ` Al Viro
2015-07-02 4:10 ` running out of tags in 9P (was Re: [git pull] vfs part 2) Al Viro
[not found] ` <20150702041046.GG17109-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org>
2015-07-02 7:50 ` Andrey Ryabinin
[not found] ` <CAPAsAGzZVy3-D4J1ZGsUZU4RRQ36NtprZg_Uvfi5=46=1_rpWA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-07-02 7:59 ` Al Viro
2015-07-02 8:19 ` Andrey Ryabinin
2015-07-02 8:25 ` Al Viro
[not found] ` <20150702082529.GJ17109-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org>
2015-07-02 8:42 ` Al Viro
[not found] ` <20150702084208.GK17109-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org>
2015-07-02 12:19 ` Andrey Ryabinin
[not found] ` <55952C6D.50805-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>
2015-07-02 16:43 ` Al Viro
[not found] ` <20150702164332.GL17109-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org>
2015-07-02 16:49 ` Al Viro
[not found] ` <20150702164926.GN17109-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org>
2015-07-03 8:19 ` Andrey Ryabinin
2015-07-03 9:42 ` Al Viro
[not found] ` <20150703094210.GR17109-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org>
2015-07-03 15:00 ` [PATCH] forgetting to cancel request in interrupted zero-copy 9P RPC " Al Viro
[not found] ` <20150703150000.GS17109-3bDd1+5oDREiFSDQTTA3OLVCufUGDwFn@public.gmane.org>
2015-07-03 19:56 ` Andrey Ryabinin
2015-07-02 20:26 ` running out of tags in 9P " Andrey Ryabinin
[not found] ` <5594E5EB.4030808@samsung.com>
2015-07-02 7:50 ` Al Viro
2015-07-02 12:00 ` [git pull] vfs part 2 Jeff Layton
2015-07-02 12:07 ` Jeff Layton
2015-07-02 16:45 ` Al Viro
2015-07-02 17:01 ` Jeff Layton
2015-07-02 17:56 ` Dominique Martinet
2015-07-02 18:43 ` Al Viro
2015-07-02 21:00 ` Dominique Martinet
2015-07-02 18:59 ` Jeff Layton
2015-07-02 20:36 ` Andrey Ryabinin
2015-07-02 18:40 ` Al Viro [this message]
2015-07-02 19:16 ` Linus Torvalds
2015-07-02 20:44 ` Al Viro
-- strict thread matches above, loose matches on Subject: below --
2012-03-31 5:19 Al Viro
2012-03-31 18:28 ` Linus Torvalds
2012-03-31 18:31 ` Linus Torvalds
2012-03-31 18:57 ` Al Viro
2012-03-31 19:29 ` Linus Torvalds
2012-03-31 19:39 ` Al Viro
2012-03-31 19:42 ` Al Viro
2012-03-31 19:48 ` Linus Torvalds
2012-03-31 20:08 ` Al Viro
2012-03-31 21:37 ` Linus Torvalds
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=20150702184015.GO17109@ZenIV.linux.org.uk \
--to=viro@zeniv.linux.org.uk \
--cc=a.ryabinin@samsung.com \
--cc=jlayton@poochiereds.net \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@linux-foundation.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).