From: Christoph Hellwig <hch@lst.de>
To: aalbersh@kernel.org
Cc: djwong@kernel.org, hans.holmberg@wdc.com, linux-xfs@vger.kernel.org
Subject: [PATCH] xfs_mdrestore: don't allow restoring onto zoned block devices
Date: Mon, 12 May 2025 15:17:37 +0200 [thread overview]
Message-ID: <20250512131737.629337-1-hch@lst.de> (raw)
The way mdrestore works is not very amendable to zone devices. The code
that checks the device size tries to write to the highest offset, which
doesn't match the write pointer of a clean zone device. And while that
is relatively easily fixable, the metadata for each RTG records the
highest written offset, and the mount code compares that to the hardware
write pointer, which will mismatch. This could be fixed by using write
zeroes to pad the RTG until the expected write pointer, but this turns
the quick metadata operation that mdrestore is supposed to be into
something that could take hours on HDD.
So instead error out when someone tries to mdrestore onto a zoned device
to clearly document that this won't work. Doing a mdrestore into a file
still works perfectly fine, and we might look into a new mdrestore option
to restore into a set of files suitable for the zoned loop device driver
to make mdrestore fully usable for debugging.
Signed-off-by: Christoph Hellwig <hch@lst.de>
---
mdrestore/xfs_mdrestore.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/mdrestore/xfs_mdrestore.c b/mdrestore/xfs_mdrestore.c
index 95b01a99a154..f10c4befb2fc 100644
--- a/mdrestore/xfs_mdrestore.c
+++ b/mdrestore/xfs_mdrestore.c
@@ -8,6 +8,7 @@
#include "xfs_metadump.h"
#include <libfrog/platform.h>
#include "libfrog/div64.h"
+#include <linux/blkzoned.h>
union mdrestore_headers {
__be32 magic;
@@ -148,6 +149,13 @@ open_device(
dev->fd = open(path, open_flags, 0644);
if (dev->fd < 0)
fatal("couldn't open \"%s\"\n", path);
+
+ if (!dev->is_file) {
+ uint32_t zone_size;
+
+ if (ioctl(dev->fd, BLKGETZONESZ, &zone_size) == 0 && zone_size)
+ fatal("can't restore to zoned device \"%s\"\n", path);
+ }
}
static void
--
2.47.2
next reply other threads:[~2025-05-12 13:17 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-12 13:17 Christoph Hellwig [this message]
2025-05-12 15:12 ` [PATCH] xfs_mdrestore: don't allow restoring onto zoned block devices Darrick J. Wong
2025-05-12 15:25 ` Christoph Hellwig
2025-05-13 10:01 ` Andrey Albershteyn
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=20250512131737.629337-1-hch@lst.de \
--to=hch@lst.de \
--cc=aalbersh@kernel.org \
--cc=djwong@kernel.org \
--cc=hans.holmberg@wdc.com \
--cc=linux-xfs@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).