Le 13/01/2020 à 21:34, Aleksandar Markovic a écrit : > From: Aleksandar Markovic <amarko...@wavecomp.com> > > Both FS_IOC_FSGETXATTR and FS_IOC_FSSETXATTR accept a pointer to > the structure > > struct file_clone_range { > __s64 src_fd; > __u64 src_offset; > __u64 src_length; > __u64 dest_offset; > }; > > as their third argument.
There is a mismatch somewhere: they take 'struct fsxattr'. 'struct file_clone_range' is used by FICLONERANGE. > > These ioctls were relatively recently introduced, so the "#ifdef" > guards are used in this implementation. > > Signed-off-by: Aleksandar Markovic <amarko...@wavecomp.com> > --- > linux-user/ioctls.h | 7 +++++++ > linux-user/syscall_defs.h | 2 ++ > 2 files changed, 9 insertions(+) > > diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h > index 3affd88..e1b89a7 100644 > --- a/linux-user/ioctls.h > +++ b/linux-user/ioctls.h > @@ -144,6 +144,13 @@ > IOCTL(FS_IOC32_SETFLAGS, IOC_W, MK_PTR(TYPE_INT)) > IOCTL(FS_IOC32_GETVERSION, IOC_R, MK_PTR(TYPE_INT)) > IOCTL(FS_IOC32_SETVERSION, IOC_W, MK_PTR(TYPE_INT)) > +#ifdef FS_IOC_FSGETXATTR > + IOCTL(FS_IOC_FSGETXATTR, IOC_W, MK_PTR(MK_STRUCT(STRUCT_fsxattr))) > +#endif > +#ifdef FS_IOC_FSSETXATTR > + IOCTL(FS_IOC_FSSETXATTR, IOC_W, MK_PTR(MK_STRUCT(STRUCT_fsxattr))) > +#endif > + > > #ifdef CONFIG_USBFS > /* USB ioctls */ > diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h > index a73cc3d..12cd3de 100644 > --- a/linux-user/syscall_defs.h > +++ b/linux-user/syscall_defs.h > @@ -924,6 +924,8 @@ struct target_pollfd { > #define TARGET_FS_IOC32_SETFLAGS TARGET_IOW('f', 2, int) > #define TARGET_FS_IOC32_GETVERSION TARGET_IOR('v', 1, int) > #define TARGET_FS_IOC32_SETVERSION TARGET_IOW('v', 2, int) > +#define TARGET_FS_IOC_FSGETXATTR TARGET_IOR('X', 31, struct file_clone_range) > +#define TARGET_FS_IOC_FSSETXATTR TARGET_IOR('X', 32, struct file_clone_range) Do you need also a "#if" around this? Because I think the structure is only defined if the IOCTL is defined. > > /* usb ioctls */ > #define TARGET_USBDEVFS_CONTROL TARGET_IOWRU('U', 0) > Thanks, Laurent