Commit 4324879d authored by Andy Grover's avatar Andy Grover

RDS: Inline rdma_prepare into cmsg_rdma_args

cmsg_rdma_args just calls rdma_prepare and does a little
arg checking -- not quite enough to justify its existence.
Plus, it is the only caller of rdma_prepare().
Signed-off-by: default avatarAndy Grover <andy.grover@oracle.com>
parent 241eef3e
...@@ -497,12 +497,13 @@ int rds_rdma_extra_size(struct rds_rdma_args *args) ...@@ -497,12 +497,13 @@ int rds_rdma_extra_size(struct rds_rdma_args *args)
} }
/* /*
* args is a pointer to an in-kernel copy in the sendmsg cmsg. * The application asks for a RDMA transfer.
* Extract all arguments and set up the rdma_op
*/ */
static int rds_rdma_prepare(struct rds_message *rm, int rds_cmsg_rdma_args(struct rds_sock *rs, struct rds_message *rm,
struct rds_sock *rs, struct cmsghdr *cmsg)
struct rds_rdma_args *args)
{ {
struct rds_rdma_args *args;
struct rds_iovec vec; struct rds_iovec vec;
struct rds_rdma_op *op = &rm->rdma.m_rdma_op; struct rds_rdma_op *op = &rm->rdma.m_rdma_op;
unsigned int nr_pages; unsigned int nr_pages;
...@@ -513,6 +514,11 @@ static int rds_rdma_prepare(struct rds_message *rm, ...@@ -513,6 +514,11 @@ static int rds_rdma_prepare(struct rds_message *rm,
unsigned int i, j; unsigned int i, j;
int ret = 0; int ret = 0;
if (cmsg->cmsg_len < CMSG_LEN(sizeof(struct rds_rdma_args))
|| rm->rdma.m_rdma_op.r_active)
return -EINVAL;
args = CMSG_DATA(cmsg);
if (rs->rs_bound_addr == 0) { if (rs->rs_bound_addr == 0) {
ret = -ENOTCONN; /* XXX not a great errno */ ret = -ENOTCONN; /* XXX not a great errno */
...@@ -623,7 +629,6 @@ static int rds_rdma_prepare(struct rds_message *rm, ...@@ -623,7 +629,6 @@ static int rds_rdma_prepare(struct rds_message *rm,
op->r_nents += nr; op->r_nents += nr;
} }
if (nr_bytes > args->remote_vec.bytes) { if (nr_bytes > args->remote_vec.bytes) {
rdsdebug("RDS nr_bytes %u remote_bytes %u do not match\n", rdsdebug("RDS nr_bytes %u remote_bytes %u do not match\n",
nr_bytes, nr_bytes,
...@@ -639,28 +644,9 @@ static int rds_rdma_prepare(struct rds_message *rm, ...@@ -639,28 +644,9 @@ static int rds_rdma_prepare(struct rds_message *rm,
if (ret) if (ret)
rds_rdma_free_op(op); rds_rdma_free_op(op);
return ret; rds_stats_inc(s_send_rdma);
}
/*
* The application asks for a RDMA transfer.
* Extract all arguments and set up the rdma_op
*/
int rds_cmsg_rdma_args(struct rds_sock *rs, struct rds_message *rm,
struct cmsghdr *cmsg)
{
int ret;
if (cmsg->cmsg_len < CMSG_LEN(sizeof(struct rds_rdma_args)) ||
rm->rdma.m_rdma_op.r_active)
return -EINVAL;
ret = rds_rdma_prepare(rm, rs, CMSG_DATA(cmsg));
if (ret)
return ret; return ret;
rds_stats_inc(s_send_rdma);
return 0;
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment