linux/net/sunrpc
Tom Tucker bd7ea31b9e RPCRDMA: Fix to XDR page base interpretation in marshalling logic.
The RPCRDMA marshalling logic assumed that xdr->page_base was an
offset into the first page of xdr->page_list. It is in fact an
offset into the xdr->page_list itself, that is, it selects the
first page in the page_list and the offset into that page.

The symptom depended in part on the rpc_memreg_strategy, if it was
FRMR, or some other one-shot mapping mode, the connection would get
torn down on a base and bounds error. When the badly marshalled RPC
was retransmitted it would reconnect, get the error, and tear down the
connection again in a loop forever. This resulted in a hung-mount. For
the other modes, it would result in silent data corruption. This bug is
most easily reproduced by writing more data than the filesystem
has space for.

This fix corrects the page_base assumption and otherwise simplifies
the iov mapping logic.

Signed-off-by: Tom Tucker <tom@ogc.us>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2011-03-11 15:39:27 -05:00
..
auth_gss Merge branch 'for-2.6.38' of git://linux-nfs.org/~bfields/linux 2011-01-14 13:17:26 -08:00
xprtrdma RPCRDMA: Fix to XDR page base interpretation in marshalling logic. 2011-03-11 15:39:27 -05:00
addr.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
auth_generic.c sunrpc: fix up rpcauth_remove_module section mismatch 2010-09-29 12:27:37 -04:00
auth_null.c SUNRPC: Move the bound cred to struct rpc_rqst 2010-08-04 08:54:09 -04:00
auth_unix.c SUNRPC: Move the bound cred to struct rpc_rqst 2010-08-04 08:54:09 -04:00
auth.c SUNRPC: New xdr_streams XDR decoder API 2010-12-16 12:37:25 -05:00
backchannel_rqst.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
bc_svc.c SUNRPC fix bc_send print 2011-01-06 14:46:23 -05:00
cache.c svcrpc: ensure cache_check caller sees updated entry 2011-01-04 16:49:25 -05:00
clnt.c NFSv4.1: filelayout async error handler 2011-03-11 15:38:43 -05:00
Kconfig nfsd4: remove spkm3 2010-10-01 18:09:55 -04:00
Makefile
netns.h sunrpc: Make the ip_map_cache be per-net 2010-09-27 10:16:12 -04:00
rpc_pipe.c Merge branch 'nfs-for-2.6.38' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6 2011-01-11 15:11:56 -08:00
rpcb_clnt.c SUNRPC: New xdr_streams XDR decoder API 2010-12-16 12:37:25 -05:00
sched.c RPC: clarify rpc_run_task error handling 2011-03-11 15:38:40 -05:00
socklib.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
stats.c SUNRPC: Simplify rpc_alloc_iostats by removing pointless local variable 2010-11-16 11:58:51 -05:00
sunrpc_syms.c sunrpc: Make the ip_map_cache be per-net 2010-09-27 10:16:12 -04:00
sunrpc.h
svc_xprt.c rpc: keep backchannel xprt as long as server connection 2011-01-11 15:04:10 -05:00
svc.c Merge branch 'for-2.6.38' of git://linux-nfs.org/~bfields/linux 2011-01-14 13:17:26 -08:00
svcauth_unix.c SUNRPC: Remove more code when NFSD_DEPRECATED is not configured 2011-01-04 16:48:02 -05:00
svcauth.c net: sunrpc: kill unused macros 2010-12-17 15:48:21 -05:00
svcsock.c NFS do not find client in NFSv4 pg_authenticate 2011-01-25 15:26:51 -05:00
sysctl.c sysctl: Drop & in front of every proc_handler. 2009-11-18 08:37:40 -08:00
timer.c
xdr.c NFS: Don't use vm_map_ram() in readdir 2011-01-10 14:45:01 -05:00
xprt.c rpc: allow xprt_class->setup to return a preexisting xprt 2011-01-11 15:04:10 -05:00
xprtsock.c sunrpc: Propagate errors from xs_bind() through xs_create_sock() 2011-03-10 15:04:58 -05:00