From: Niklas Cassel <cassel@kernel.org>
To: Kevin Wolf <kwolf@redhat.com>, Hanna Reitz <hreitz@redhat.com>
Cc: qemu-block@nongnu.org, qemu-devel@nongnu.org,
Sam Li <faithilikerun@gmail.com>,
Dmitry Fomichev <dmitry.fomichev@wdc.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
Damien Le Moal <dlemoal@kernel.org>,
Johannes Thumshirn <johannes.thumshirn@wdc.com>,
Niklas Cassel <cassel@kernel.org>
Subject: [PATCH v2] file-posix: fix cache.direct=on check for zoned block devices
Date: Wed, 17 Jun 2026 15:36:58 +0200 [thread overview]
Message-ID: <20260617133658.2022750-1-cassel@kernel.org> (raw)
For zoned block devices with SWR zones, the order of the writes must be
maintained to avoid write not at write pointer errors.
Thus, cache.direct=on must be used to bypass the page cache, since the
page cache uses write-back caching, where the physical order of the writes
is not guaranteed.
There is already a check for cache.direct=on in raw_open_common(),
however, this check is done before raw_refresh_zoned_limits() has been
called (which initializes bs->bl.zoned), so it is currently dead code.
Fix this by moving the check to raw_refresh_zoned_limits(), such that the
check is done after bs->bl.zoned has been initialized.
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Dmitry Fomichev <dmitry.fomichev@wdc.com>
Fixes: 774c726ceb2a ("block: add zoned BlockDriver check to block layer")
Signed-off-by: Niklas Cassel <cassel@kernel.org>
---
Changes since v1:
-Picked up tags from Damien and Dmitry
-Modified existing code comment to use plural instead of singular
block/file-posix.c | 22 ++++++++++------------
1 file changed, 10 insertions(+), 12 deletions(-)
diff --git a/block/file-posix.c b/block/file-posix.c
index 5019ddade9..32750ac509 100644
--- a/block/file-posix.c
+++ b/block/file-posix.c
@@ -800,18 +800,6 @@ static int raw_open_common(BlockDriverState *bs, QDict *options,
goto fail;
}
}
-#ifdef CONFIG_BLKZONED
- /*
- * The kernel page cache does not reliably work for writes to SWR zones
- * of zoned block device because it can not guarantee the order of writes.
- */
- if ((bs->bl.zoned != BLK_Z_NONE) &&
- (!(s->open_flags & O_DIRECT))) {
- error_setg(errp, "The driver supports zoned devices, and it requires "
- "cache.direct=on, which was not specified.");
- return -EINVAL; /* No host kernel page cache */
- }
-#endif
#ifdef __FreeBSD__
if (S_ISCHR(st.st_mode)) {
@@ -1462,6 +1450,16 @@ static void raw_refresh_zoned_limits(BlockDriverState *bs, struct stat *st,
}
bs->bl.zoned = zoned;
+ /*
+ * The kernel page cache does not reliably work for writes to SWR zones of
+ * zoned block devices because it can not guarantee the order of writes.
+ */
+ if (!(s->open_flags & O_DIRECT)) {
+ error_setg(errp, "The driver supports zoned devices, and it requires "
+ "cache.direct=on, which was not specified.");
+ goto no_zoned;
+ }
+
ret = get_sysfs_long_val(st, "max_open_zones");
if (ret >= 0) {
bs->bl.max_open_zones = ret;
--
2.54.0
next reply other threads:[~2026-06-17 13:38 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-17 13:36 Niklas Cassel [this message]
2026-06-18 8:12 ` [PATCH v2] file-posix: fix cache.direct=on check for zoned block devices Johannes Thumshirn
2026-06-18 15:00 ` Stefan Hajnoczi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260617133658.2022750-1-cassel@kernel.org \
--to=cassel@kernel.org \
--cc=dlemoal@kernel.org \
--cc=dmitry.fomichev@wdc.com \
--cc=faithilikerun@gmail.com \
--cc=hreitz@redhat.com \
--cc=johannes.thumshirn@wdc.com \
--cc=kwolf@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.