aboutsummaryrefslogtreecommitdiffstats
path: root/net/rds/send.c
diff options
context:
space:
mode:
authorAndy Grover <andy.grover@oracle.com>2010-02-03 22:40:32 -0500
committerAndy Grover <andy.grover@oracle.com>2010-09-08 21:12:02 -0400
commit372cd7dedfd1ea93a9ae8d9c282e910dc1b76773 (patch)
tree248c672e0fd7fdb8015c51d02a0e74df8d9feef9 /net/rds/send.c
parent5b2366bd2835919e2e6a836e837eab4a9274bd46 (diff)
RDS: Do not set op_active in r_m_copy_from_user().
Do not allocate sgs for data for 0-length datagrams Set data.op_active in rds_sendmsg() instead of rds_message_copy_from_user(). Signed-off-by: Andy Grover <andy.grover@oracle.com>
Diffstat (limited to 'net/rds/send.c')
-rw-r--r--net/rds/send.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/net/rds/send.c b/net/rds/send.c
index 66dc6b045261..ad89a63c4304 100644
--- a/net/rds/send.c
+++ b/net/rds/send.c
@@ -970,11 +970,14 @@ int rds_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,
970 goto out; 970 goto out;
971 } 971 }
972 972
973 rm->data.op_sg = rds_message_alloc_sgs(rm, ceil(payload_len, PAGE_SIZE)); 973 /* Attach data to the rm */
974 /* XXX fix this to not allocate memory */ 974 if (payload_len) {
975 ret = rds_message_copy_from_user(rm, msg->msg_iov, payload_len); 975 rm->data.op_sg = rds_message_alloc_sgs(rm, ceil(payload_len, PAGE_SIZE));
976 if (ret) 976 ret = rds_message_copy_from_user(rm, msg->msg_iov, payload_len);
977 goto out; 977 if (ret)
978 goto out;
979 }
980 rm->data.op_active = 1;
978 981
979 rm->m_daddr = daddr; 982 rm->m_daddr = daddr;
980 983