Commit c4ba0294 authored by Jacek Kalwas's avatar Jacek Kalwas Committed by Tomasz Zawadzki
Browse files

sock/posix: fix flush error handling



Upper layer may rely on errno (e.g. EAGAIN) and it could be overriden
with _sock_check_zcopy invoked.

Change-Id: I8b6cd5c470f95df0448e3976185b1f0ac409bb29
Signed-off-by: default avatarJacek Kalwas <jacek.kalwas@nutanix.com>
Reviewed-on: https://review.spdk.io/c/spdk/spdk/+/25956


Reviewed-by: default avatarBen Walker <ben@nvidia.com>
Community-CI: Mellanox Build Bot
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Reviewed-by: default avatarMaciej Szulik <maciej.szulik@intel.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz@tzawadzki.com>
Reviewed-by: default avatarJim Harris <jim.harris@nvidia.com>
Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
parent 2020e4a1
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -1322,13 +1322,17 @@ posix_sock_flush(struct spdk_sock *sock)
{
#ifdef SPDK_ZEROCOPY
	struct spdk_posix_sock *psock = __posix_sock(sock);
	int rc;
	int rc, _errno;

	rc = _sock_flush(sock);
	_errno = errno;

	if (psock->zcopy && !TAILQ_EMPTY(&sock->pending_reqs)) {
		_sock_check_zcopy(sock);
	}

	/* Restore errno to prevent potential change when executing zcopy check. */
	errno = _errno;
	return rc;
#else
	return _sock_flush(sock);