From mboxrd@z Thu Jan 1 00:00:00 1970 Delivery-date: Wed, 26 Aug 2026 11:34:39 +0200 Received: from mx1.white.stw.pengutronix.de ([2a0a:edc0:0:b01:1d::107]) by lore.white.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wzA1m-007NzN-1P for lore@lore.pengutronix.de; Wed, 26 Aug 2026 11:34:39 +0200 Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) by mx1.white.stw.pengutronix.de (Postfix) with ESMTPS id 080C320205A for ; Wed, 26 Aug 2026 11:34:39 +0200 (CEST) Authentication-Results: mx1.white.stw.pengutronix.de; dkim=pass header.d=lists.infradead.org header.s=bombadil.20210309 header.b=FTQKjg10; dmarc=none; spf=pass (mx1.white.stw.pengutronix.de: domain of "barebox-bounces+lore=pengutronix.de@lists.infradead.org" designates 2607:7c80:54:3::133 as permitted sender) smtp.mailfrom="barebox-bounces+lore=pengutronix.de@lists.infradead.org" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=nCgHExB5XZ4Vuo8vm+tXml/to45wPL71PJoqrBW8Qjs=; b=FTQKjg10AkSQMtVPnfXKn29Zzq Exu7crFS0KVrH0W15gxeWlEOVNFyl2laOle91Sn6bE2FemItSjWTwwsqmBQAh3ci4u4kk/vivEGOe UmGiKUHW5xaBA05t1XaERA0jsBeuG8g1TiUzTFfFjvUeluk61W6++y4Y63Nz6BowP7FnXSREPvIvu MgPaOylCQIYnYPhMV6EVUulsQ+KNjLGCNpsTp/dcVl7U6xo5zaL9mgKgmTrIXfD99zU6YTVV5DwJD 5E5N+ALfrx2aVgnX3w0ZT8r/A8rjszA+rM7HQlxOBxygyvqmJx5JwMeLXD+2cWMOJnOS4t/hVyl1z w/G8gGhw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wzA0k-00000002Cq7-0ylO; Wed, 26 Aug 2026 09:33:34 +0000 Received: from mx1.white.stw.pengutronix.de ([2a0a:edc0:0:b01:1d::107]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wzA0g-00000002CpR-2hOQ for barebox@lists.infradead.org; Wed, 26 Aug 2026 09:33:32 +0000 Received: from drehscheibe.grey.stw.pengutronix.de (drehscheibe.grey.stw.pengutronix.de [IPv6:2a0a:edc0:0:c01:1d::a2]) (Authenticated sender: relay-from-drehscheibe.grey.stw.pengutronix.de) by mx1.white.stw.pengutronix.de (Postfix) with ESMTPSA id C2F902020FE; Wed, 26 Aug 2026 11:33:28 +0200 (CEST) Received: from dude05.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::54]) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wzA0e-003PuE-2K; Wed, 26 Aug 2026 11:33:28 +0200 Received: from [::1] (helo=dude05.red.stw.pengutronix.de) by dude05.red.stw.pengutronix.de with esmtp (Exim 4.98.2) (envelope-from ) id 1wzA0e-0000000A4qp-2aia; Wed, 26 Aug 2026 11:33:28 +0200 From: Ahmad Fatoum To: barebox@lists.infradead.org Cc: Ahmad Fatoum Subject: [PATCH] virtio_blk: write back the block cache before resetting the device Date: Wed, 26 Aug 2026 11:33:26 +0200 Message-ID: <20260826093327.2400414-1-a.fatoum@pengutronix.de> X-Mailer: git-send-email 2.47.3 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260826_023331_012460_D1D24329 X-CRM114-Status: GOOD ( 11.42 ) X-Spam-Score: -1.9 (-) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: virtio_blk_remove() resets the virtio device first and unregisters the block device afterwards, but that second step is what writes barebox' block cache back: blockdevice_unregister() calls writebuffe [...] Content analysis details: (-1.9 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] 0.0 DMARC_MISSING Missing DMARC policy X-BeenThere: barebox@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "barebox" X-Spamd-Result: default: False [-56.21 / 15.00]; RECEIVED_AUTHENTICATED_BY_MX1(-50.00)[]; BAYES_HAM(-3.00)[99.99%]; DWL_DNSWL_MED(-2.00)[infradead.org:dkim]; MID_CONTAINS_FROM(1.00)[]; KNOWN_LIST_ID(-1.00)[barebox.lists.infradead.org]; RCVD_DKIM_ARC_DNSWL_MED(-0.50)[]; R_MISSING_CHARSET(0.50)[]; RCVD_IN_DNSWL_MED(-0.40)[2a0a:edc0:0:1101:1d::54:received,2607:7c80:54:3::133:from]; MAILLIST(-0.20)[mailman]; R_SPF_ALLOW(-0.20)[+mx:c]; R_DKIM_ALLOW(-0.20)[lists.infradead.org:s=bombadil.20210309]; RCVD_IN_DNSWL_LOW(-0.10)[2a0a:edc0:0:c01:1d::a2:received]; MIME_GOOD(-0.10)[text/plain]; HAS_LIST_UNSUB(-0.01)[]; RCPT_COUNT_TWO(0.00)[2]; TO_DN_SOME(0.00)[]; MIME_TRACE(0.00)[0:+]; ARC_NA(0.00)[]; RECEIVED_HELO_LOCALHOST(0.00)[]; DMARC_NA(0.00)[pengutronix.de]; DKIM_TRACE(0.00)[lists.infradead.org:+]; TAGGED_FROM(0.00)[lore=pengutronix.de]; FROM_NEQ_ENVFROM(0.00)[a.fatoum@pengutronix.de,barebox-bounces@lists.infradead.org]; FROM_HAS_DN(0.00)[]; RCVD_TLS_LAST(0.00)[]; RCVD_COUNT_FIVE(0.00)[5]; RCVD_VIA_SMTP_AUTH(0.00)[]; NEURAL_HAM(-0.00)[-1.000]; ASN(0.00)[asn:7247, ipnet:2607:7c80:54::/48, country:US]; FORGED_SENDER_MAILLIST(0.00)[] X-Rspamd-Action: no action X-Rspamd-Server: mx1 X-Stat-Signature: 5sq54iaupbwebd5q36utdobmzspp14ey X-Rspamd-Queue-Id: 080C320205A virtio_blk_remove() resets the virtio device first and unregisters the block device afterwards, but that second step is what writes barebox' block cache back: blockdevice_unregister() calls writebuffer_flush(), which issues ->write() for every dirty chunk and then ->flush(). Both go to a device that no longer has a driver-owned virtqueue, so nothing answers them. Booting an OS makes this visible, as ExitBootServices() shuts the devices down: EFI stub: Exiting boot services... ERROR: virtio_blk virtio0: I/O error: type 4 sector 0 count 0 status 1 ret Connection timed out Here it is only the flush that is lost, but a dirty chunk - a variable file written just before booting, say - would be dropped just as quietly. Reset after unregistering, like Linux' virtblk_remove() does around del_gendisk(). Assisted-by: Claude:opus-5 Signed-off-by: Ahmad Fatoum --- drivers/block/virtio_blk.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c index f1ee76da9750..a82d6774c385 100644 --- a/drivers/block/virtio_blk.c +++ b/drivers/block/virtio_blk.c @@ -115,8 +115,8 @@ static void virtio_blk_remove(struct virtio_device *vdev) { struct virtio_blk_priv *priv = vdev->priv; - vdev->config->reset(vdev); blockdevice_unregister(&priv->blk); + vdev->config->reset(vdev); vdev->config->del_vqs(vdev); free(priv); -- 2.47.3