dc03f389d3
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
99 lines
4.0 KiB
Diff
99 lines
4.0 KiB
Diff
From 40fdd783ec707e61c285e081816bd2df54dfede4 Mon Sep 17 00:00:00 2001
|
|
From: Filip Bozuta <Filip.Bozuta@syrmia.com>
|
|
Date: Thu, 3 Sep 2020 01:26:55 +0200
|
|
Subject: [PATCH 3/9] linux-user: Add support for a group of btrfs ioctls used
|
|
for snapshots
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
This patch implements functionality for following ioctls:
|
|
|
|
BTRFS_IOC_SNAP_CREATE - Creating a subvolume snapshot
|
|
|
|
Create a snapshot of a btrfs subvolume. The snapshot is created using the
|
|
ioctl's third argument that is a pointer to a 'struct btrfs_ioctl_vol_args'
|
|
(which was mentioned in the previous patch). Before calling this ioctl,
|
|
the fields of the structure should be filled with aproppriate values for
|
|
the file descriptor and path of the subvolume for which the snapshot is to
|
|
be created.
|
|
|
|
BTRFS_IOC_SNAP_DESTROY - Removing a subvolume snapshot
|
|
|
|
Delete a snapshot of a btrfs subvolume. The snapshot is deleted using the
|
|
ioctl's third argument that is a pointer to a 'struct btrfs_ioctl_vol_args'
|
|
(which was mentioned in the previous patch). Before calling this ioctl,
|
|
the fields of the structure should be filled with aproppriate values for
|
|
the file descriptor and path of the subvolume for which the snapshot is to
|
|
be deleted.
|
|
|
|
Implementation notes:
|
|
|
|
Since the thunk type 'struct btrfs_ioctl_vol_args' is defined in the
|
|
previous patch, the implementation for these ioctls was straightforward.
|
|
|
|
Signed-off-by: Filip Bozuta <Filip.Bozuta@syrmia.com>
|
|
Tested-by: Daniel P. Berrangé <berrange@redhat.com>
|
|
Message-Id: <20200823195014.116226-3-Filip.Bozuta@syrmia.com>
|
|
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
|
|
---
|
|
linux-user/ioctls.h | 8 ++++++++
|
|
linux-user/syscall_defs.h | 2 ++
|
|
linux-user/syscall_types.h | 3 ++-
|
|
3 files changed, 12 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
|
|
index 12d1444224..f33a99f8b6 100644
|
|
--- a/linux-user/ioctls.h
|
|
+++ b/linux-user/ioctls.h
|
|
@@ -174,10 +174,18 @@
|
|
IOCTL(FS_IOC32_GETVERSION, IOC_R, MK_PTR(TYPE_INT))
|
|
IOCTL(FS_IOC32_SETVERSION, IOC_W, MK_PTR(TYPE_INT))
|
|
|
|
+#ifdef BTRFS_IOC_SNAP_CREATE
|
|
+ IOCTL(BTRFS_IOC_SNAP_CREATE, IOC_W,
|
|
+ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_vol_args)))
|
|
+#endif
|
|
#ifdef BTRFS_IOC_SUBVOL_CREATE
|
|
IOCTL(BTRFS_IOC_SUBVOL_CREATE, IOC_W,
|
|
MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_vol_args)))
|
|
#endif
|
|
+#ifdef BTRFS_IOC_SNAP_DESTROY
|
|
+ IOCTL(BTRFS_IOC_SNAP_DESTROY, IOC_W,
|
|
+ MK_PTR(MK_STRUCT(STRUCT_btrfs_ioctl_vol_args)))
|
|
+#endif
|
|
#ifdef BTRFS_IOC_SUBVOL_GETFLAGS
|
|
IOCTL(BTRFS_IOC_SUBVOL_GETFLAGS, IOC_R, MK_PTR(TYPE_ULONGLONG))
|
|
#endif
|
|
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
|
|
index 2757956dfa..a945e12547 100644
|
|
--- a/linux-user/syscall_defs.h
|
|
+++ b/linux-user/syscall_defs.h
|
|
@@ -968,7 +968,9 @@ struct target_rtc_pll_info {
|
|
#define TARGET_FS_IOC32_SETVERSION TARGET_IOW('v', 2, int)
|
|
|
|
/* btrfs ioctls */
|
|
+#define TARGET_BTRFS_IOC_SNAP_CREATE TARGET_IOWU(BTRFS_IOCTL_MAGIC, 1)
|
|
#define TARGET_BTRFS_IOC_SUBVOL_CREATE TARGET_IOWU(BTRFS_IOCTL_MAGIC, 14)
|
|
+#define TARGET_BTRFS_IOC_SNAP_DESTROY TARGET_IOWU(BTRFS_IOCTL_MAGIC, 15)
|
|
#define TARGET_BTRFS_IOC_SUBVOL_GETFLAGS TARGET_IOR(BTRFS_IOCTL_MAGIC, 25,\
|
|
abi_ullong)
|
|
#define TARGET_BTRFS_IOC_SUBVOL_SETFLAGS TARGET_IOW(BTRFS_IOCTL_MAGIC, 26,\
|
|
diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h
|
|
index db61dbc1b3..038cd7869b 100644
|
|
--- a/linux-user/syscall_types.h
|
|
+++ b/linux-user/syscall_types.h
|
|
@@ -354,7 +354,8 @@ STRUCT(blkpg_partition,
|
|
MK_ARRAY(TYPE_CHAR, BLKPG_DEVNAMELTH), /* devname */
|
|
MK_ARRAY(TYPE_CHAR, BLKPG_VOLNAMELTH)) /* volname */
|
|
|
|
-#ifdef BTRFS_IOC_SUBVOL_CREATE
|
|
+#if defined(BTRFS_IOC_SUBVOL_CREATE) || defined(BTRFS_IOC_SNAP_CREATE) || \
|
|
+ defined(BTRFS_IOC_SNAP_DESTROY)
|
|
STRUCT(btrfs_ioctl_vol_args,
|
|
TYPE_LONGLONG, /* fd */
|
|
MK_ARRAY(TYPE_CHAR, BTRFS_PATH_NAME_MAX + 1)) /* name */
|
|
--
|
|
2.26.2
|
|
|