|
@@ -970,11 +970,14 @@ int rds_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg,
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
- rm->data.op_sg = rds_message_alloc_sgs(rm, ceil(payload_len, PAGE_SIZE));
|
|
|
- /* XXX fix this to not allocate memory */
|
|
|
- ret = rds_message_copy_from_user(rm, msg->msg_iov, payload_len);
|
|
|
- if (ret)
|
|
|
- goto out;
|
|
|
+ /* Attach data to the rm */
|
|
|
+ if (payload_len) {
|
|
|
+ rm->data.op_sg = rds_message_alloc_sgs(rm, ceil(payload_len, PAGE_SIZE));
|
|
|
+ ret = rds_message_copy_from_user(rm, msg->msg_iov, payload_len);
|
|
|
+ if (ret)
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+ rm->data.op_active = 1;
|
|
|
|
|
|
rm->m_daddr = daddr;
|
|
|
|