diff mbox series

[v2] linux-user: implement more loop ioctls

Message ID mvmtug4mbfx.fsf_-_@suse.de (mailing list archive)
State New, archived
Headers show
Series [v2] linux-user: implement more loop ioctls | expand

Commit Message

Andreas Schwab Nov. 22, 2021, 3:56 p.m. UTC
LOOP_CONFIGURE is now used by losetup, and it cannot cope with ENOSYS.

Signed-off-by: Andreas Schwab <schwab@suse.de>
---
v2: fix s/loop_configure/loop_config/ typo

 linux-user/ioctls.h        | 4 ++++
 linux-user/linux_loop.h    | 2 ++
 linux-user/syscall_defs.h  | 4 ++++
 linux-user/syscall_types.h | 6 ++++++
 4 files changed, 16 insertions(+)

Comments

Laurent Vivier Nov. 22, 2021, 4:07 p.m. UTC | #1
Le 22/11/2021 à 16:56, Andreas Schwab a écrit :
> LOOP_CONFIGURE is now used by losetup, and it cannot cope with ENOSYS.
> 
> Signed-off-by: Andreas Schwab <schwab@suse.de>
> ---
> v2: fix s/loop_configure/loop_config/ typo
> 
>   linux-user/ioctls.h        | 4 ++++
>   linux-user/linux_loop.h    | 2 ++
>   linux-user/syscall_defs.h  | 4 ++++
>   linux-user/syscall_types.h | 6 ++++++
>   4 files changed, 16 insertions(+)
> 
> diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
> index 7193c3b226..f182d40190 100644
> --- a/linux-user/ioctls.h
> +++ b/linux-user/ioctls.h
> @@ -637,6 +637,10 @@
>     IOCTL(LOOP_SET_STATUS64, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info64)))
>     IOCTL(LOOP_GET_STATUS64, IOC_R, MK_PTR(MK_STRUCT(STRUCT_loop_info64)))
>     IOCTL(LOOP_CHANGE_FD, 0, TYPE_INT)
> +  IOCTL(LOOP_SET_CAPACITY, 0, TYPE_INT)
> +  IOCTL(LOOP_SET_DIRECT_IO, 0, TYPE_INT)
> +  IOCTL(LOOP_SET_BLOCK_SIZE, 0, TYPE_INT)
> +  IOCTL(LOOP_CONFIGURE, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_config)))
>   
>     IOCTL(LOOP_CTL_ADD, 0, TYPE_INT)
>     IOCTL(LOOP_CTL_REMOVE, 0, TYPE_INT)
> diff --git a/linux-user/linux_loop.h b/linux-user/linux_loop.h
> index c69fea11e4..f80b96f1ff 100644
> --- a/linux-user/linux_loop.h
> +++ b/linux-user/linux_loop.h
> @@ -96,6 +96,8 @@ struct loop_info64 {
>   #define LOOP_CHANGE_FD		0x4C06
>   #define LOOP_SET_CAPACITY       0x4C07
>   #define LOOP_SET_DIRECT_IO      0x4C08
> +#define LOOP_SET_BLOCK_SIZE     0x4C09
> +#define LOOP_CONFIGURE          0x4C0A
>   
>   /* /dev/loop-control interface */
>   #define LOOP_CTL_ADD            0x4C80
> diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
> index a5ce487dcc..560a29afd8 100644
> --- a/linux-user/syscall_defs.h
> +++ b/linux-user/syscall_defs.h
> @@ -1219,6 +1219,10 @@ struct target_rtc_pll_info {
>   #define TARGET_LOOP_SET_STATUS64      0x4C04
>   #define TARGET_LOOP_GET_STATUS64      0x4C05
>   #define TARGET_LOOP_CHANGE_FD         0x4C06
> +#define TARGET_LOOP_SET_CAPACITY      0x4C07
> +#define TARGET_LOOP_SET_DIRECT_IO     0x4C08
> +#define TARGET_LOOP_SET_BLOCK_SIZE    0x4C09
> +#define TARGET_LOOP_CONFIGURE         0x4C0A
>   
>   #define TARGET_LOOP_CTL_ADD           0x4C80
>   #define TARGET_LOOP_CTL_REMOVE        0x4C81
> diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h
> index ba2c1518eb..c3b43f8022 100644
> --- a/linux-user/syscall_types.h
> +++ b/linux-user/syscall_types.h
> @@ -201,6 +201,12 @@ STRUCT(loop_info64,
>          MK_ARRAY(TYPE_CHAR, 32),  /* lo_encrypt_key */
>          MK_ARRAY(TYPE_ULONGLONG, 2))  /* lo_init */
>   
> +STRUCT(loop_config,
> +       TYPE_INT,                 /* fd */
> +       TYPE_INT,                 /* block_size */
> +       MK_STRUCT(STRUCT_loop_info64), /* info */
> +       MK_ARRAY(TYPE_ULONGLONG, 8)) /* __reserved */
> +
>   /* mag tape ioctls */
>   STRUCT(mtop, TYPE_SHORT, TYPE_INT)
>   STRUCT(mtget, TYPE_LONG, TYPE_LONG, TYPE_LONG, TYPE_LONG, TYPE_LONG,
> 

Reviewed-by: Laurent Vivier <laurent@vivier.eu>
diff mbox series

Patch

diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
index 7193c3b226..f182d40190 100644
--- a/linux-user/ioctls.h
+++ b/linux-user/ioctls.h
@@ -637,6 +637,10 @@ 
   IOCTL(LOOP_SET_STATUS64, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_info64)))
   IOCTL(LOOP_GET_STATUS64, IOC_R, MK_PTR(MK_STRUCT(STRUCT_loop_info64)))
   IOCTL(LOOP_CHANGE_FD, 0, TYPE_INT)
+  IOCTL(LOOP_SET_CAPACITY, 0, TYPE_INT)
+  IOCTL(LOOP_SET_DIRECT_IO, 0, TYPE_INT)
+  IOCTL(LOOP_SET_BLOCK_SIZE, 0, TYPE_INT)
+  IOCTL(LOOP_CONFIGURE, IOC_W, MK_PTR(MK_STRUCT(STRUCT_loop_config)))
 
   IOCTL(LOOP_CTL_ADD, 0, TYPE_INT)
   IOCTL(LOOP_CTL_REMOVE, 0, TYPE_INT)
diff --git a/linux-user/linux_loop.h b/linux-user/linux_loop.h
index c69fea11e4..f80b96f1ff 100644
--- a/linux-user/linux_loop.h
+++ b/linux-user/linux_loop.h
@@ -96,6 +96,8 @@  struct loop_info64 {
 #define LOOP_CHANGE_FD		0x4C06
 #define LOOP_SET_CAPACITY       0x4C07
 #define LOOP_SET_DIRECT_IO      0x4C08
+#define LOOP_SET_BLOCK_SIZE     0x4C09
+#define LOOP_CONFIGURE          0x4C0A
 
 /* /dev/loop-control interface */
 #define LOOP_CTL_ADD            0x4C80
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index a5ce487dcc..560a29afd8 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -1219,6 +1219,10 @@  struct target_rtc_pll_info {
 #define TARGET_LOOP_SET_STATUS64      0x4C04
 #define TARGET_LOOP_GET_STATUS64      0x4C05
 #define TARGET_LOOP_CHANGE_FD         0x4C06
+#define TARGET_LOOP_SET_CAPACITY      0x4C07
+#define TARGET_LOOP_SET_DIRECT_IO     0x4C08
+#define TARGET_LOOP_SET_BLOCK_SIZE    0x4C09
+#define TARGET_LOOP_CONFIGURE         0x4C0A
 
 #define TARGET_LOOP_CTL_ADD           0x4C80
 #define TARGET_LOOP_CTL_REMOVE        0x4C81
diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h
index ba2c1518eb..c3b43f8022 100644
--- a/linux-user/syscall_types.h
+++ b/linux-user/syscall_types.h
@@ -201,6 +201,12 @@  STRUCT(loop_info64,
        MK_ARRAY(TYPE_CHAR, 32),  /* lo_encrypt_key */
        MK_ARRAY(TYPE_ULONGLONG, 2))  /* lo_init */
 
+STRUCT(loop_config,
+       TYPE_INT,                 /* fd */
+       TYPE_INT,                 /* block_size */
+       MK_STRUCT(STRUCT_loop_info64), /* info */
+       MK_ARRAY(TYPE_ULONGLONG, 8)) /* __reserved */
+
 /* mag tape ioctls */
 STRUCT(mtop, TYPE_SHORT, TYPE_INT)
 STRUCT(mtget, TYPE_LONG, TYPE_LONG, TYPE_LONG, TYPE_LONG, TYPE_LONG,