RDS: Copy rds_iovecs into kernel memory instead of rereading from userspace
authorAndy Grover <andy.grover@oracle.com>
Thu, 28 Oct 2010 15:40:58 +0000 (15:40 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sat, 30 Oct 2010 23:34:17 +0000 (16:34 -0700)
commitfc8162e3c034af743d8def435fda6396603d321f
treeb003a652740eb0de1fe71c634618b6666e9bae3c
parentf4a3fc03c1d73753879fb655b8cd628b29f6706b
RDS: Copy rds_iovecs into kernel memory instead of rereading from userspace

Change rds_rdma_pages to take a passed-in rds_iovec array instead
of doing copy_from_user itself.

Change rds_cmsg_rdma_args to copy rds_iovec array once only. This
eliminates the possibility of userspace changing it after our
sanity checks.

Implement stack-based storage for small numbers of iovecs, based
on net/socket.c, to save an alloc in the extremely common case.

Although this patch reduces iovec copies in cmsg_rdma_args to 1,
we still do another one in rds_rdma_extra_size. Getting rid of
that one will be trickier, so it'll be a separate patch.

Signed-off-by: Andy Grover <andy.grover@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/rds/rdma.c