aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2017-09-20 20:01:11 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2017-12-02 20:38:05 -0500
commit985832267da5698c2a3b90f6cc920ac49fe7cf1e (patch)
tree98c5d21a22724ec700f7d0090347e47a30626089
parente749d4facf24190ab1549886f69ab16880f5d234 (diff)
lustre lnet_sock_read(): switch to sock_recvmsg()
... and don't bother reinitializing msg.msg_iter Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r--drivers/staging/lustre/lnet/lnet/lib-socket.c24
1 files changed, 11 insertions, 13 deletions
diff --git a/drivers/staging/lustre/lnet/lnet/lib-socket.c b/drivers/staging/lustre/lnet/lnet/lib-socket.c
index 539a26444f31..984d76843b19 100644
--- a/drivers/staging/lustre/lnet/lnet/lib-socket.c
+++ b/drivers/staging/lustre/lnet/lnet/lib-socket.c
@@ -318,19 +318,20 @@ lnet_sock_read(struct socket *sock, void *buffer, int nob, int timeout)
318 long jiffies_left = timeout * msecs_to_jiffies(MSEC_PER_SEC); 318 long jiffies_left = timeout * msecs_to_jiffies(MSEC_PER_SEC);
319 unsigned long then; 319 unsigned long then;
320 struct timeval tv; 320 struct timeval tv;
321 struct kvec iov = {
322 .iov_base = buffer,
323 .iov_len = nob
324 };
325 struct msghdr msg = {
326 .msg_flags = 0
327 };
321 328
322 LASSERT(nob > 0); 329 LASSERT(nob > 0);
323 LASSERT(jiffies_left > 0); 330 LASSERT(jiffies_left > 0);
324 331
325 for (;;) { 332 iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, &iov, 1, nob);
326 struct kvec iov = {
327 .iov_base = buffer,
328 .iov_len = nob
329 };
330 struct msghdr msg = {
331 .msg_flags = 0
332 };
333 333
334 for (;;) {
334 /* Set receive timeout to remaining time */ 335 /* Set receive timeout to remaining time */
335 jiffies_to_timeval(jiffies_left, &tv); 336 jiffies_to_timeval(jiffies_left, &tv);
336 rc = kernel_setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, 337 rc = kernel_setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO,
@@ -342,7 +343,7 @@ lnet_sock_read(struct socket *sock, void *buffer, int nob, int timeout)
342 } 343 }
343 344
344 then = jiffies; 345 then = jiffies;
345 rc = kernel_recvmsg(sock, &msg, &iov, 1, nob, 0); 346 rc = sock_recvmsg(sock, &msg, 0);
346 jiffies_left -= jiffies - then; 347 jiffies_left -= jiffies - then;
347 348
348 if (rc < 0) 349 if (rc < 0)
@@ -351,10 +352,7 @@ lnet_sock_read(struct socket *sock, void *buffer, int nob, int timeout)
351 if (!rc) 352 if (!rc)
352 return -ECONNRESET; 353 return -ECONNRESET;
353 354
354 buffer = ((char *)buffer) + rc; 355 if (!msg_data_left(&msg))
355 nob -= rc;
356
357 if (!nob)
358 return 0; 356 return 0;
359 357
360 if (jiffies_left <= 0) 358 if (jiffies_left <= 0)