[Devel] [PATCH RHEL9 COMMIT] block/blk-cbt: introduce ABI versioning
Konstantin Khorenko
khorenko at virtuozzo.com
Tue Jan 28 17:39:57 MSK 2025
The commit is pushed to "branch-rh9-5.14.0-427.44.1.vz9.80.x-ovz" and will appear at git at bitbucket.org:openvz/vzkernel.git
after rh9-5.14.0-427.44.1.vz9.80.7
------>
commit c692713fc23739893b1bfa0fc6a7da514fd7b3a5
Author: Andrey Zhadchenko <andrey.zhadchenko at virtuozzo.com>
Date: Tue Jan 28 11:15:07 2025 +0300
block/blk-cbt: introduce ABI versioning
so it will be easier to change anything in the future
https://virtuozzo.atlassian.net/browse/VSTOR-96269
Signed-off-by: Andrey Zhadchenko <andrey.zhadchenko at virtuozzo.com>
Reviewed-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
======
Patchset description:
blk-cbt: improvements
Currently blk-cbt use UUID as a name. This is a big limitation.
We are going to expose bitmap names to libvirt, so we should
not expect users to follow this. Moreover, even VHI backup
utilities use non-UUID names sometimes. Technically QEMU
allows us bitmap names up to 1024 bytes, but 128 should be
fine.
Multiple simultaneous bitmaps are needed for backup plans,
so allow them.
Add new API to list bitmap names, adjust most of the API to
make operations on bitmap with user-provided name.
Andrey Zhadchenko (5):
block/blk-cbt: rework uuid field
block/blk-cbt: allow multiple cbts in a single queue
blk-cbt: introduce ABI versioning
block/blk-cbt: add BLKCBTLIST ioctl
block/blk-cbt: add BLKCBTRENAME instead of BLKCBTSET flag
Feature: cbt: changed block tracking (for backup)
---
block/blk-cbt.c | 10 ++++++++++
include/uapi/linux/fs.h | 4 ++++
2 files changed, 14 insertions(+)
diff --git a/block/blk-cbt.c b/block/blk-cbt.c
index a12d16a1ed39..2543bf1e846c 100644
--- a/block/blk-cbt.c
+++ b/block/blk-cbt.c
@@ -1011,9 +1011,19 @@ static int cbt_ioc_misc(struct block_device *bdev, void __user *arg)
int blk_cbt_ioctl(struct block_device *bdev, unsigned cmd, char __user *arg)
{
struct blk_user_cbt_info __user *ucbt_ioc;
+ __u32 abi_version;
ucbt_ioc = (struct blk_user_cbt_info __user *) arg;
+ if (copy_from_user(&abi_version, arg, sizeof(abi_version)))
+ return -EFAULT;
+
+ if (abi_version != CBT_ABI_VERSION) {
+ WARN_ONCE(1, "blk-cbt ABI mimatch: kernel has %d, userspace uses %d",
+ CBT_ABI_VERSION, abi_version);
+ return -EOPNOTSUPP;
+ }
+
if (cmd == BLKCBTGET)
return cbt_ioc_get(bdev, ucbt_ioc);
diff --git a/include/uapi/linux/fs.h b/include/uapi/linux/fs.h
index 5d7014be0139..2aaee5257477 100644
--- a/include/uapi/linux/fs.h
+++ b/include/uapi/linux/fs.h
@@ -128,10 +128,13 @@ struct blk_user_cbt_extent {
__u64 ce_reserved64[1];
};
+
+#define CBT_ABI_VERSION 2
#define CBT_NAME_LENGTH 128
#define CBT_MAX_ENTRIES 16
struct blk_user_cbt_info {
+ __u32 version; /* ABI version */
__u8 ci_name[CBT_NAME_LENGTH]; /* CBT name */
__u64 ci_start; /* start phisical range of mapping which
userspace wants (in) */
@@ -153,6 +156,7 @@ enum CI_FLAGS
/* Extension of cbt ioctls: */
struct blk_user_cbt_misc_info {
+ __u32 version; /* ABI version */
__u8 name[CBT_NAME_LENGTH]; /* Bitmap name */
/* Allocate and move pending map to CBT snapshot */
#define CBT_SNAP_CREATE 0
More information about the Devel
mailing list