From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: passt.top; dmarc=none (p=none dis=none) header.from=gibson.dropbear.id.au Authentication-Results: passt.top; dkim=pass (2048-bit key; secure) header.d=gibson.dropbear.id.au header.i=@gibson.dropbear.id.au header.a=rsa-sha256 header.s=202502 header.b=haKj+ee9; dkim-atps=neutral Received: from mail.ozlabs.org (mail.ozlabs.org [IPv6:2404:9400:2221:ea00::3]) by passt.top (Postfix) with ESMTPS id A6F545A0274 for ; Thu, 06 Feb 2025 06:49:59 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gibson.dropbear.id.au; s=202502; t=1738820984; bh=+oLTQNQqhVyFsFhb4nRht/mnO9TnJT1IzqwwYmRL1B4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=haKj+ee9tXJRFdcvAgP7zv6Pdl0jeuo3Bjt6+ajIYHs6+y37/o8Q6vdTBbmpK+Uig kYiAd1ve6JY+1MaYvIYZC/8o9L+HwfNi2i1eVm4LmINtqEWM/tj7fQqn2NcLiZGutT EJBqlxeSZ2LbvUHc52eHqFNDx23lWGpHZVpyU+5f9Lc00d+o/4yWWWwQ7f32YxYH8a vmDCgMyasUtbbXzboNdWoYUVkUujAcKZijBIhv9Slv08Sr4Rf3zb2iP0K3QCiuFoai +ZbTW8oNTOMtkL0YfcPUz7wQBjp2F6yL7rt8QN5efoVEPeEUGJ7E3T4IEoAF3yqxLn Xb95lsmHMa+9g== Received: by gandalf.ozlabs.org (Postfix, from userid 1007) id 4YpR5443XSz4x0L; Thu, 6 Feb 2025 16:49:44 +1100 (AEDT) From: David Gibson To: Stefano Brivio , passt-dev@passt.top Subject: [PATCH v10 06/10] vhost_user: Make source quit after reporting migration state Date: Thu, 6 Feb 2025 16:49:47 +1100 Message-ID: <20250206054951.1041610-7-david@gibson.dropbear.id.au> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250206054951.1041610-1-david@gibson.dropbear.id.au> References: <20250206054951.1041610-1-david@gibson.dropbear.id.au> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-ID-Hash: YKHR4CFNPG6IW3BH2MM4C4INTL2UIMGI X-Message-ID-Hash: YKHR4CFNPG6IW3BH2MM4C4INTL2UIMGI X-MailFrom: dgibson@gandalf.ozlabs.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: David Gibson X-Mailman-Version: 3.3.8 Precedence: list List-Id: Development discussion and patches for passt Archived-At: Archived-At: List-Archive: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Stefano Brivio On migration, the source process asks passt-helper to set TCP sockets in repair mode, dumps the information we need to migrate connections, and closes them. At this point, we can't pass them back to passt-helper using SCM_RIGHTS, because they are closed, from that perspective, and sendmsg() will give us EBADF. But if we don't clear repair mode, the port they are bound to will not be available for binding in the target. Terminate once we're done with the migration and we reported the state. This is equivalent to clearing repair mode on the sockets we just closed. Signed-off-by: Stefano Brivio Message-ID: <20250205003904.2797491-6-sbrivio@redhat.com> Message-ID: <20250205230919.205302-4-sbrivio@redhat.com> Signed-off-by: David Gibson --- vhost_user.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/vhost_user.c b/vhost_user.c index 256c8ab6..9870a4f4 100644 --- a/vhost_user.c +++ b/vhost_user.c @@ -998,6 +998,8 @@ static bool vu_send_rarp_exec(struct vu_dev *vdev, return false; } +static bool quit_on_device_state = false; + /** * vu_set_device_state_fd_exec() - Set the device state migration channel * @vdev: vhost-user device @@ -1025,6 +1027,9 @@ static bool vu_set_device_state_fd_exec(struct vu_dev *vdev, migrate_request(vdev->context, msg->fds[0], direction == VHOST_USER_TRANSFER_STATE_DIRECTION_LOAD); + if (direction == VHOST_USER_TRANSFER_STATE_DIRECTION_SAVE) + quit_on_device_state = true; + /* We don't provide a new fd for the data transfer */ vmsg_set_reply_u64(msg, VHOST_USER_VRING_NOFD_MASK); @@ -1203,4 +1208,10 @@ void vu_control_handler(struct vu_dev *vdev, int fd, uint32_t events) if (reply_requested) vu_send_reply(fd, &msg); + + if (quit_on_device_state && + msg.hdr.request == VHOST_USER_CHECK_DEVICE_STATE) { + info("Migration complete, exiting"); + exit(EXIT_SUCCESS); + } } -- 2.48.1