|
@@ -334,9 +334,8 @@ void usbip_dump_header(struct usbip_header *pdu)
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(usbip_dump_header);
|
|
|
|
|
|
-/* Send/receive messages over TCP/IP. I refer drivers/block/nbd.c */
|
|
|
-int usbip_xmit(int send, struct socket *sock, char *buf, int size,
|
|
|
- int msg_flags)
|
|
|
+/* Receive data over TCP/IP. */
|
|
|
+int usbip_recv(struct socket *sock, void *buf, int size)
|
|
|
{
|
|
|
int result;
|
|
|
struct msghdr msg;
|
|
@@ -355,19 +354,6 @@ int usbip_xmit(int send, struct socket *sock, char *buf, int size,
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
- if (usbip_dbg_flag_xmit) {
|
|
|
- if (send) {
|
|
|
- if (!in_interrupt())
|
|
|
- pr_debug("%-10s:", current->comm);
|
|
|
- else
|
|
|
- pr_debug("interrupt :");
|
|
|
-
|
|
|
- pr_debug("sending... , sock %p, buf %p, size %d, "
|
|
|
- "msg_flags %d\n", sock, buf, size, msg_flags);
|
|
|
- usbip_dump_buffer(buf, size);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
do {
|
|
|
sock->sk->sk_allocation = GFP_NOIO;
|
|
|
iov.iov_base = buf;
|
|
@@ -377,42 +363,30 @@ int usbip_xmit(int send, struct socket *sock, char *buf, int size,
|
|
|
msg.msg_control = NULL;
|
|
|
msg.msg_controllen = 0;
|
|
|
msg.msg_namelen = 0;
|
|
|
- msg.msg_flags = msg_flags | MSG_NOSIGNAL;
|
|
|
-
|
|
|
- if (send)
|
|
|
- result = kernel_sendmsg(sock, &msg, &iov, 1, size);
|
|
|
- else
|
|
|
- result = kernel_recvmsg(sock, &msg, &iov, 1, size,
|
|
|
- MSG_WAITALL);
|
|
|
+ msg.msg_flags = MSG_NOSIGNAL;
|
|
|
|
|
|
+ result = kernel_recvmsg(sock, &msg, &iov, 1, size, MSG_WAITALL);
|
|
|
if (result <= 0) {
|
|
|
- pr_debug("%s sock %p buf %p size %u ret %d total %d\n",
|
|
|
- send ? "send" : "receive", sock, buf, size,
|
|
|
- result, total);
|
|
|
+ pr_debug("receive sock %p buf %p size %u ret %d total %d\n",
|
|
|
+ sock, buf, size, result, total);
|
|
|
goto err;
|
|
|
}
|
|
|
|
|
|
size -= result;
|
|
|
buf += result;
|
|
|
total += result;
|
|
|
-
|
|
|
} while (size > 0);
|
|
|
|
|
|
if (usbip_dbg_flag_xmit) {
|
|
|
- if (!send) {
|
|
|
- if (!in_interrupt())
|
|
|
- pr_debug("%-10s:", current->comm);
|
|
|
- else
|
|
|
- pr_debug("interrupt :");
|
|
|
-
|
|
|
- pr_debug("receiving....\n");
|
|
|
- usbip_dump_buffer(bp, osize);
|
|
|
- pr_debug("received, osize %d ret %d size %d total %d\n",
|
|
|
- osize, result, size, total);
|
|
|
- }
|
|
|
+ if (!in_interrupt())
|
|
|
+ pr_debug("%-10s:", current->comm);
|
|
|
+ else
|
|
|
+ pr_debug("interrupt :");
|
|
|
|
|
|
- if (send)
|
|
|
- pr_debug("send, total %d\n", total);
|
|
|
+ pr_debug("receiving....\n");
|
|
|
+ usbip_dump_buffer(bp, osize);
|
|
|
+ pr_debug("received, osize %d ret %d size %d total %d\n",
|
|
|
+ osize, result, size, total);
|
|
|
}
|
|
|
|
|
|
return total;
|
|
@@ -420,7 +394,7 @@ int usbip_xmit(int send, struct socket *sock, char *buf, int size,
|
|
|
err:
|
|
|
return result;
|
|
|
}
|
|
|
-EXPORT_SYMBOL_GPL(usbip_xmit);
|
|
|
+EXPORT_SYMBOL_GPL(usbip_recv);
|
|
|
|
|
|
struct socket *sockfd_to_socket(unsigned int sockfd)
|
|
|
{
|
|
@@ -712,7 +686,7 @@ int usbip_recv_iso(struct usbip_device *ud, struct urb *urb)
|
|
|
if (!buff)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
- ret = usbip_xmit(0, ud->tcp_socket, buff, size, 0);
|
|
|
+ ret = usbip_recv(ud->tcp_socket, buff, size);
|
|
|
if (ret != size) {
|
|
|
dev_err(&urb->dev->dev, "recv iso_frame_descriptor, %d\n",
|
|
|
ret);
|
|
@@ -823,8 +797,7 @@ int usbip_recv_xbuff(struct usbip_device *ud, struct urb *urb)
|
|
|
if (!(size > 0))
|
|
|
return 0;
|
|
|
|
|
|
- ret = usbip_xmit(0, ud->tcp_socket, (char *)urb->transfer_buffer,
|
|
|
- size, 0);
|
|
|
+ ret = usbip_recv(ud->tcp_socket, urb->transfer_buffer, size);
|
|
|
if (ret != size) {
|
|
|
dev_err(&urb->dev->dev, "recv xbuf, %d\n", ret);
|
|
|
if (ud->side == USBIP_STUB) {
|