linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* nfsd4 xdr encoding fixes v2
@ 2014-05-11 20:52 J. Bruce Fields
  2014-05-11 20:52 ` [PATCH 01/43] nfsd4: embed xdr_stream in nfsd4_compoundres J. Bruce Fields
                   ` (43 more replies)
  0 siblings, 44 replies; 70+ messages in thread
From: J. Bruce Fields @ 2014-05-11 20:52 UTC (permalink / raw)
  To: linux-nfs; +Cc: Christoph Hellwig

Since the previous posting I've delayed a change in error return (see
fc208d026be0c7d60db9118583fc62f6ca97743d 'Revert "nfsd4: fix
nfs4err_resource in 4.1 case"' for discussion) and beefed up some
changelogs and comments based on Christoph's review.  I've also rebased;
this series applies on top of

	git://linux-nfs.org/~bfields/linux.git for-3.16

which already includes a few more uncontroversial-looking patches from
the previous posting of this series.

Original introduction follows:

This is a collection of fixes for the NFS server's encoding of NFSv4
compounds, along with a few tangentially related cleanups and bugfixes I
noticed along the way.

The basic problem is that we've always assumed an rpc reply is either

	- "small" (much less than a page), or
	- looks like a read (a bunch of data with a little bit at the
	  beginning and the end).

That assumption has allowed us to cover the most important cases without
having to deal with some annoying details like how to encode arbitrary
data across a page boundary, but: 

	- The inability to encode attributes of more than a page annoys
	  some people who would like to get and set extraordinarily long
	  ACLs.

	- The inability to encode attributes that cross page boundaries
	  also means we can't return more than a page of readdir data at
	  a time, limiting readdir performance on large directories.

	- The NFSv4 protocol doesn't really allow us to place these
	  sorts of arbitrary limits on the types of compounds we handle.
	  (Well, 4.0 is a bit fuzzy on this point, but 4.1 I think
	  definitely considers it a bug if a server won't handle, e.g.,
	  multiple read ops in a compound.)  This hasn't been an issue
	  because most of these exotic compounds aren't really useful to
	  clients.  But maybe future clients will find a use for some of
	  them--in which case we'd prefer not to make the work around a
	  server that doesn't meet the spec.

So, the main goal is to fix those limitations.  We also get to share a
little more code with the client.

Further work may include:

	- writing more pynfs tests for exotic compounds and odd corner
	  cases,
	- auditing the annoying nfsd4_*_rsize() functions, which we now
	  depend on for more things,
	- improving our (currently very sloppy) estimate of how much
	  space we need for krb5i/krb5p to checksum/encrypt the result.
	- sharing some of this with the v2/v3 code (especially in the
	  read and readdir cases),
	- allow rpc's whose call and reply are both very large (our one
	  remaining dubious limit on compounds, though again something
	  clients seem unlikely to notice for now),
	- on the decode side, eliminating the existing macros and
	  sharing more helpers with the client.

--b.

^ permalink raw reply	[flat|nested] 70+ messages in thread

end of thread, other threads:[~2014-05-22 19:18 UTC | newest]

Thread overview: 70+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-11 20:52 nfsd4 xdr encoding fixes v2 J. Bruce Fields
2014-05-11 20:52 ` [PATCH 01/43] nfsd4: embed xdr_stream in nfsd4_compoundres J. Bruce Fields
2014-05-12  5:34   ` Christoph Hellwig
2014-05-16  9:58   ` Kinglong Mee
2014-05-22 15:13     ` J. Bruce Fields
2014-05-11 20:52 ` [PATCH 02/43] nfsd4: tweak nfsd4_encode_getattr to take xdr_stream J. Bruce Fields
2014-05-12  5:35   ` Christoph Hellwig
2014-05-12 16:06     ` J. Bruce Fields
2014-05-11 20:52 ` [PATCH 03/43] nfsd4: move proc_compound xdr encode init to helper J. Bruce Fields
2014-05-12  5:36   ` Christoph Hellwig
2014-05-11 20:52 ` [PATCH 04/43] nfsd4: reserve head space for krb5 integ/priv info J. Bruce Fields
2014-05-12  5:37   ` Christoph Hellwig
2014-05-12 21:45     ` J. Bruce Fields
2014-05-13  5:05       ` Christoph Hellwig
2014-05-13 14:47         ` J. Bruce Fields
2014-05-11 20:52 ` [PATCH 05/43] nfsd4: move nfsd4_operation to xdr4.h J. Bruce Fields
2014-05-12  5:41   ` Christoph Hellwig
2014-05-22 15:56     ` J. Bruce Fields
2014-05-11 20:52 ` [PATCH 06/43] nfsd4: fix encoding of out-of-space replies J. Bruce Fields
2014-05-12  8:18   ` Christoph Hellwig
2014-05-12 21:47     ` J. Bruce Fields
2014-05-11 20:52 ` [PATCH 07/43] nfsd4: allow space for final error return J. Bruce Fields
2014-05-12  8:18   ` Christoph Hellwig
2014-05-12 14:06     ` J. Bruce Fields
2014-05-11 20:52 ` [PATCH 08/43] nfsd4: use xdr_reserve_space in attribute encoding J. Bruce Fields
2014-05-11 20:52 ` [PATCH 09/43] nfsd4: use xdr_stream throughout compound encoding J. Bruce Fields
2014-05-11 20:52 ` [PATCH 10/43] nfsd4: remove ADJUST_ARGS J. Bruce Fields
2014-05-11 20:52 ` [PATCH 11/43] nfsd4: no need for encode_compoundres to adjust lengths J. Bruce Fields
2014-05-11 20:52 ` [PATCH 12/43] nfsd4: keep xdr buf length updated J. Bruce Fields
2014-05-11 20:52 ` [PATCH 13/43] rpc: xdr_truncate_encode J. Bruce Fields
2014-05-11 20:52 ` [PATCH 14/43] nfsd4: use xdr_truncate_encode J. Bruce Fields
2014-05-11 20:52 ` [PATCH 15/43] nfsd4: "backfill" using write_bytes_to_xdr_buf J. Bruce Fields
2014-05-11 20:52 ` [PATCH 16/43] nfsd4: teach encoders to handle reserve_space failures J. Bruce Fields
2014-05-11 20:52 ` [PATCH 17/43] nfsd4: reserve space before inlining 0-copy pages J. Bruce Fields
2014-05-11 20:52 ` [PATCH 18/43] nfsd4: nfsd4_check_resp_size needn't recalculate length J. Bruce Fields
2014-05-11 20:52 ` [PATCH 19/43] nfsd4: remove redundant encode buffer size checking J. Bruce Fields
2014-05-11 20:52 ` [PATCH 20/43] nfsd4: size-checking cleanup J. Bruce Fields
2014-05-11 20:52 ` [PATCH 21/43] nfsd4: allow encoding across page boundaries J. Bruce Fields
2014-05-11 20:52 ` [PATCH 22/43] nfsd4: convert 4.1 replay encoding J. Bruce Fields
2014-05-11 20:52 ` [PATCH 23/43] nfsd4: don't try to encode conflicting owner if low on space J. Bruce Fields
2014-05-11 20:52 ` [PATCH 24/43] nfsd4: more precise nfsd4_max_reply J. Bruce Fields
2014-05-11 20:52 ` [PATCH 25/43] nfsd4: minor encode_read cleanup J. Bruce Fields
2014-05-11 20:52 ` [PATCH 26/43] nfsd4: nfsd4_check_resp_size should check against whole buffer J. Bruce Fields
2014-05-11 20:52 ` [PATCH 27/43] rpc: define xdr_restrict_buflen J. Bruce Fields
2014-05-11 20:52 ` [PATCH 28/43] nfsd4: adjust buflen to session channel limit J. Bruce Fields
2014-05-11 20:52 ` [PATCH 29/43] nfsd4: use session limits to release send buffer reservation J. Bruce Fields
2014-05-11 20:52 ` [PATCH 30/43] nfsd4: allow large readdirs J. Bruce Fields
2014-05-11 20:52 ` [PATCH 31/43] nfsd4: enforce rd_dircount J. Bruce Fields
2014-05-11 20:52 ` [PATCH 32/43] nfsd4: don't treat readlink like a zero-copy operation J. Bruce Fields
2014-05-11 20:52 ` [PATCH 33/43] nfsd4: better estimate of getattr response size J. Bruce Fields
2014-05-11 20:52 ` [PATCH 34/43] nfsd4: estimate sequence " J. Bruce Fields
2014-05-11 20:52 ` [PATCH 35/43] nfsd4: turn off zero-copy-read in exotic cases J. Bruce Fields
2014-05-11 20:52 ` [PATCH 36/43] nfsd4: nfsd_vfs_read doesn't use file handle parameter J. Bruce Fields
2014-05-11 20:52 ` [PATCH 37/43] nfsd4: separate splice and readv cases J. Bruce Fields
2014-05-11 20:52 ` [PATCH 38/43] nfsd4: allow exotic read compounds J. Bruce Fields
2014-05-11 20:52 ` [PATCH 39/43] nfsd4: really fix nfs4err_resource in 4.1 case J. Bruce Fields
2014-05-12  5:33   ` Christoph Hellwig
2014-05-12 14:18     ` J. Bruce Fields
2014-05-11 20:52 ` [PATCH 40/43] nfsd4: kill WRITE32 J. Bruce Fields
2014-05-11 20:52 ` [PATCH 41/43] nfsd4: kill WRITE64 J. Bruce Fields
2014-05-11 20:52 ` [PATCH 42/43] nfsd4: kill WRITEMEM J. Bruce Fields
2014-05-11 20:52 ` [PATCH 43/43] nfsd4: kill write32, write64 J. Bruce Fields
2014-05-12  8:20 ` nfsd4 xdr encoding fixes v2 Christoph Hellwig
2014-05-12 16:07   ` J. Bruce Fields
2014-05-12 16:11     ` Christoph Hellwig
2014-05-13 11:09       ` Christoph Hellwig
2014-05-13 14:48         ` J. Bruce Fields
2014-05-13 21:18           ` J. Bruce Fields
2014-05-13 21:33             ` J. Bruce Fields
2014-05-22 19:17               ` J. Bruce Fields

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).