Put things in IMHO a more readable order, now
that it's all done; add some comments.
Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxxx>
--
Index: linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ioctl32.c
===================================================================
--- linux-2.6-xfs.orig/fs/xfs/linux-2.6/xfs_ioctl32.c
+++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ioctl32.c
@@ -634,6 +634,7 @@ xfs_compat_ioctl(
int error;
switch (cmd) {
+ /* No size or alignment issues with any of these on any arch */
case XFS_IOC_DIOINFO:
case XFS_IOC_FSGEOMETRY:
case XFS_IOC_FSGETXATTR:
@@ -655,14 +656,18 @@ xfs_compat_ioctl(
case XFS_IOC_ERROR_INJECTION:
case XFS_IOC_ERROR_CLEARALL:
break;
-
- case XFS_IOC_GETXFLAGS_32:
- case XFS_IOC_SETXFLAGS_32:
- case XFS_IOC_GETVERSION_32:
- cmd = _NATIVE_IOC(cmd, long);
+#ifndef BROKEN_X86_ALIGNMENT /* handled fine if no alignment issues */
+ case XFS_IOC_ALLOCSP:
+ case XFS_IOC_FREESP:
+ case XFS_IOC_RESVSP:
+ case XFS_IOC_UNRESVSP:
+ case XFS_IOC_ALLOCSP64:
+ case XFS_IOC_FREESP64:
+ case XFS_IOC_RESVSP64:
+ case XFS_IOC_UNRESVSP64:
+ case XFS_IOC_FSGEOMETRY_V1:
break;
-#ifdef BROKEN_X86_ALIGNMENT
- /* xfs_flock_t has wrong u32 vs u64 alignment */
+#else /* BROKEN_X86_ALIGNMENT */
case XFS_IOC_ALLOCSP_32:
case XFS_IOC_FREESP_32:
case XFS_IOC_ALLOCSP64_32:
@@ -674,9 +679,6 @@ xfs_compat_ioctl(
arg = xfs_ioctl32_flock_copyin(arg);
cmd = _NATIVE_IOC(cmd, struct xfs_flock64);
break;
- case XFS_IOC_FSGEOMETRY_V1_32:
- return xfs_ioc_fsgeometry_v1_compat(XFS_I(inode)->i_mount,
- (void __user*)arg);
case XFS_IOC_FSGROWFSDATA_32:
arg = xfs_ioctl32_growfs_data_copyin(arg);
cmd = _NATIVE_IOC(cmd, struct xfs_growfs_data);
@@ -684,28 +686,21 @@ xfs_compat_ioctl(
case XFS_IOC_FSGROWFSRT_32:
arg = xfs_ioctl32_growfs_rt_copyin(arg);
cmd = _NATIVE_IOC(cmd, struct xfs_growfs_rt);
+ case XFS_IOC_FSGEOMETRY_V1_32:
+ return xfs_ioc_fsgeometry_v1_compat(XFS_I(inode)->i_mount,
+ (void __user*)arg);
break;
-#else /* These are handled fine if no alignment issues */
- case XFS_IOC_ALLOCSP:
- case XFS_IOC_FREESP:
- case XFS_IOC_RESVSP:
- case XFS_IOC_UNRESVSP:
- case XFS_IOC_ALLOCSP64:
- case XFS_IOC_FREESP64:
- case XFS_IOC_RESVSP64:
- case XFS_IOC_UNRESVSP64:
- case XFS_IOC_FSGEOMETRY_V1:
- break;
#endif
+ /* long varies in size, but xfs only ever copies out 32 bits */
+ case XFS_IOC_GETXFLAGS_32:
+ case XFS_IOC_SETXFLAGS_32:
+ case XFS_IOC_GETVERSION_32:
+ cmd = _NATIVE_IOC(cmd, long);
+ break;
case XFS_IOC_SWAPEXT_32:
arg = xfs_ioctl32_swapext_copyin(arg);
cmd = _NATIVE_IOC(cmd, struct xfs_swapext);
break;
- case XFS_IOC_FSBULKSTAT_32:
- case XFS_IOC_FSBULKSTAT_SINGLE_32:
- case XFS_IOC_FSINUMBERS_32:
- return xfs_ioc_bulkstat_compat(XFS_I(inode)->i_mount,
- cmd, (void __user*)arg);
case XFS_IOC_FD_TO_HANDLE_32:
case XFS_IOC_PATH_TO_HANDLE_32:
case XFS_IOC_PATH_TO_FSHANDLE_32:
@@ -714,6 +709,11 @@ xfs_compat_ioctl(
arg = xfs_ioctl32_fshandle_copyin(arg);
cmd = _NATIVE_IOC(cmd, struct xfs_fsop_handlereq);
break;
+ case XFS_IOC_FSBULKSTAT_32:
+ case XFS_IOC_FSBULKSTAT_SINGLE_32:
+ case XFS_IOC_FSINUMBERS_32:
+ return xfs_ioc_bulkstat_compat(XFS_I(inode)->i_mount,
+ cmd, (void __user*)arg);
case XFS_IOC_ATTRLIST_BY_HANDLE_32:
return xfs_attrlist_by_handle_compat((void __user*)arg, inode);
case XFS_IOC_ATTRMULTI_BY_HANDLE_32:
--
|