selftests: mptcp: make sendfile selftest work
commit df9e03aec3b14970df05b72d54f8ac9da3ab29e1 upstream. When the selftest got added, sendfile() on mptcp sockets returned -EOPNOTSUPP, so running 'mptcp_connect.sh -m sendfile' failed immediately. This is no longer the case, but the script fails anyway due to timeout. Let the receiver know once the sender has sent all data, just like with '-m mmap' mode. v2: need to respect cfg_wait too, as pm_userspace.sh relied on -m sendfile to keep the connection open (Mat Martineau) Fixes: 048d19d444be ("mptcp: add basic kselftest for mptcp") Reported-by: Xiumei Mu <xmu@redhat.com> Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com> Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
8caf5c15b5
commit
401d71c9cf
@ -553,6 +553,18 @@ static void set_nonblock(int fd, bool nonblock)
|
||||
fcntl(fd, F_SETFL, flags & ~O_NONBLOCK);
|
||||
}
|
||||
|
||||
static void shut_wr(int fd)
|
||||
{
|
||||
/* Close our write side, ev. give some time
|
||||
* for address notification and/or checking
|
||||
* the current status
|
||||
*/
|
||||
if (cfg_wait)
|
||||
usleep(cfg_wait);
|
||||
|
||||
shutdown(fd, SHUT_WR);
|
||||
}
|
||||
|
||||
static int copyfd_io_poll(int infd, int peerfd, int outfd, bool *in_closed_after_out)
|
||||
{
|
||||
struct pollfd fds = {
|
||||
@ -630,14 +642,7 @@ static int copyfd_io_poll(int infd, int peerfd, int outfd, bool *in_closed_after
|
||||
/* ... and peer also closed already */
|
||||
break;
|
||||
|
||||
/* ... but we still receive.
|
||||
* Close our write side, ev. give some time
|
||||
* for address notification and/or checking
|
||||
* the current status
|
||||
*/
|
||||
if (cfg_wait)
|
||||
usleep(cfg_wait);
|
||||
shutdown(peerfd, SHUT_WR);
|
||||
shut_wr(peerfd);
|
||||
} else {
|
||||
if (errno == EINTR)
|
||||
continue;
|
||||
@ -767,7 +772,7 @@ static int copyfd_io_mmap(int infd, int peerfd, int outfd,
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
shutdown(peerfd, SHUT_WR);
|
||||
shut_wr(peerfd);
|
||||
|
||||
err = do_recvfile(peerfd, outfd);
|
||||
*in_closed_after_out = true;
|
||||
@ -791,6 +796,9 @@ static int copyfd_io_sendfile(int infd, int peerfd, int outfd,
|
||||
err = do_sendfile(infd, peerfd, size);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
shut_wr(peerfd);
|
||||
|
||||
err = do_recvfile(peerfd, outfd);
|
||||
*in_closed_after_out = true;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user