Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests/net: revert the zerocopy Rx path for PF_RDS

In preparation for optimized reception of zerocopy completion,
revert the Rx side changes introduced by Commit dfb8434b0a94
("selftests/net: add zerocopy support for PF_RDS test case")

Signed-off-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
Acked-by: Willem de Bruijn <willemb@google.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Sowmini Varadhan and committed by
David S. Miller
67490e34 c1de13bb

-67
-67
tools/testing/selftests/net/msg_zerocopy.c
··· 344 344 return fd; 345 345 } 346 346 347 - static int do_process_zerocopy_cookies(struct sock_extended_err *serr, 348 - uint32_t *ckbuf, size_t nbytes) 349 - { 350 - int ncookies, i; 351 - 352 - if (serr->ee_errno != 0) 353 - error(1, 0, "serr: wrong error code: %u", serr->ee_errno); 354 - ncookies = serr->ee_data; 355 - if (ncookies > SO_EE_ORIGIN_MAX_ZCOOKIES) 356 - error(1, 0, "Returned %d cookies, max expected %d\n", 357 - ncookies, SO_EE_ORIGIN_MAX_ZCOOKIES); 358 - if (nbytes != ncookies * sizeof(uint32_t)) 359 - error(1, 0, "Expected %d cookies, got %ld\n", 360 - ncookies, nbytes/sizeof(uint32_t)); 361 - for (i = 0; i < ncookies; i++) 362 - if (cfg_verbose >= 2) 363 - fprintf(stderr, "%d\n", ckbuf[i]); 364 - return ncookies; 365 - } 366 - 367 347 static bool do_recv_completion(int fd) 368 348 { 369 349 struct sock_extended_err *serr; ··· 352 372 uint32_t hi, lo, range; 353 373 int ret, zerocopy; 354 374 char control[100]; 355 - uint32_t ckbuf[SO_EE_ORIGIN_MAX_ZCOOKIES]; 356 - struct iovec iov; 357 375 358 376 msg.msg_control = control; 359 377 msg.msg_controllen = sizeof(control); 360 - 361 - iov.iov_base = ckbuf; 362 - iov.iov_len = (SO_EE_ORIGIN_MAX_ZCOOKIES * sizeof(ckbuf[0])); 363 - msg.msg_iov = &iov; 364 - msg.msg_iovlen = 1; 365 378 366 379 ret = recvmsg(fd, &msg, MSG_ERRQUEUE); 367 380 if (ret == -1 && errno == EAGAIN) ··· 375 402 376 403 serr = (void *) CMSG_DATA(cm); 377 404 378 - if (serr->ee_origin == SO_EE_ORIGIN_ZCOOKIE) { 379 - completions += do_process_zerocopy_cookies(serr, ckbuf, ret); 380 - return true; 381 - } 382 405 if (serr->ee_origin != SO_EE_ORIGIN_ZEROCOPY) 383 406 error(1, 0, "serr: wrong origin: %u", serr->ee_origin); 384 407 if (serr->ee_errno != 0) ··· 600 631 bytes += cfg_payload_len; 601 632 } 602 633 603 - 604 - static void do_recvmsg(int fd) 605 - { 606 - int ret, off = 0; 607 - char *buf; 608 - struct iovec iov; 609 - struct msghdr msg; 610 - struct sockaddr_storage din; 611 - 612 - buf = calloc(cfg_payload_len, sizeof(char)); 613 - iov.iov_base = buf; 614 - iov.iov_len = cfg_payload_len; 615 - 616 - memset(&msg, 0, sizeof(msg)); 617 - msg.msg_name = &din; 618 - msg.msg_namelen = sizeof(din); 619 - msg.msg_iov = &iov; 620 - msg.msg_iovlen = 1; 621 - 622 - ret = recvmsg(fd, &msg, MSG_TRUNC); 623 - 624 - if (ret == -1) 625 - error(1, errno, "recv"); 626 - if (ret != cfg_payload_len) 627 - error(1, 0, "recv: ret=%u != %u", ret, cfg_payload_len); 628 - 629 - if (memcmp(buf + off, payload, ret)) 630 - error(1, 0, "recv: data mismatch"); 631 - 632 - free(buf); 633 - packets++; 634 - bytes += cfg_payload_len; 635 - } 636 - 637 634 static void do_rx(int domain, int type, int protocol) 638 635 { 639 636 uint64_t tstop; ··· 611 676 do { 612 677 if (type == SOCK_STREAM) 613 678 do_flush_tcp(fd); 614 - else if (domain == PF_RDS) 615 - do_recvmsg(fd); 616 679 else 617 680 do_flush_datagram(fd, type); 618 681