Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8040ddfb authored by Al Viro's avatar Al Viro Committed by Greg Kroah-Hartman
Browse files

staging: lustre: ksocknal_lib_recv_iov(): recvmsg doesn't bugger iovec anymore...

parent 72e62b6c
Loading
Loading
Loading
Loading
+5 −17
Original line number Diff line number Diff line
@@ -201,14 +201,7 @@ ksocknal_lib_eager_ack(struct ksock_conn *conn)
int
ksocknal_lib_recv_iov(struct ksock_conn *conn)
{
#if SOCKNAL_SINGLE_FRAG_RX
	struct kvec scratch;
	struct kvec *scratchiov = &scratch;
	unsigned int niov = 1;
#else
	struct kvec *scratchiov = conn->ksnc_scheduler->kss_scratch_iov;
	unsigned int niov = conn->ksnc_rx_niov;
#endif
	struct kvec *iov = conn->ksnc_rx_iov;
	struct msghdr msg = {
		.msg_flags = 0
@@ -220,20 +213,15 @@ ksocknal_lib_recv_iov(struct ksock_conn *conn)
	int sum;
	__u32 saved_csum;

	/*
	 * NB we can't trust socket ops to either consume our iovs
	 * or leave them alone.
	 */
	LASSERT(niov > 0);

	for (nob = i = 0; i < niov; i++) {
		scratchiov[i] = iov[i];
		nob += scratchiov[i].iov_len;
	}
	for (nob = i = 0; i < niov; i++)
		nob += iov[i].iov_len;

	LASSERT(nob <= conn->ksnc_rx_nob_wanted);

	rc = kernel_recvmsg(conn->ksnc_sock, &msg, scratchiov, niov, nob,
			    MSG_DONTWAIT);
	iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, iov, niov, nob);
	rc = sock_recvmsg(conn->ksnc_sock, &msg, MSG_DONTWAIT);

	saved_csum = 0;
	if (conn->ksnc_proto == &ksocknal_protocol_v2x) {