[patch 12/12] Reorder xfs_ioctl32.c for some tidiness

Christoph Hellwig hch at infradead.org
Wed Nov 26 04:56:21 CST 2008


On Tue, Nov 25, 2008 at 09:20:17PM -0600, sandeen at sandeen.net wrote:
> Put things in IMHO a more readable order, now
> that it's all done; add some comments.

Ok.


> 
> Signed-off-by: Eric Sandeen <sandeen at sandeen.net>
> --
> 
> 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	2008-11-24 17:00:32.471064582 -0600
> +++ linux-2.6-xfs/fs/xfs/linux-2.6/xfs_ioctl32.c	2008-11-24 17:00:33.095064454 -0600
> @@ -16,11 +16,7 @@
>   * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
>   */
>  #include <linux/compat.h>
> -#include <linux/init.h>
>  #include <linux/ioctl.h>
> -#include <linux/syscalls.h>
> -#include <linux/types.h>
> -#include <linux/fs.h>
>  #include <asm/uaccess.h>
>  #include "xfs.h"
>  #include "xfs_fs.h"
> @@ -132,7 +128,7 @@ xfs_inumbers_fmt_compat(
>  
>  #else
>  #define xfs_inumbers_fmt_compat xfs_inumbers_fmt
> -#endif
> +#endif	/* BROKEN_X86_ALIGNMENT */
>  
>  STATIC int
>  xfs_ioctl32_bstime_copyin(
> @@ -618,6 +614,7 @@ xfs_compat_ioctl(
>  
>  	xfs_itrace_entry(XFS_I(inode));
>  	switch (cmd) {
> +	/* No size or alignment issues on any arch */
>  	case XFS_IOC_DIOINFO:
>  	case XFS_IOC_FSGEOMETRY:
>  	case XFS_IOC_FSGETXATTR:
> @@ -630,35 +627,28 @@ xfs_compat_ioctl(
>  	case XFS_IOC_FSCOUNTS:
>  	case XFS_IOC_SET_RESBLKS:
>  	case XFS_IOC_GET_RESBLKS:
> -	case XFS_IOC_FSGROWFSDATA:
>  	case XFS_IOC_FSGROWFSLOG:
> -	case XFS_IOC_FSGROWFSRT:
>  	case XFS_IOC_FREEZE:
>  	case XFS_IOC_THAW:
>  	case XFS_IOC_GOINGDOWN:
>  	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);
> -		break;
> -	case XFS_IOC_SWAPEXT: {
> -		struct xfs_swapext	  sxp;
> -		struct compat_xfs_swapext __user *sxu = arg;
> -
> -		/* Bulk copy in up to the sx_stat field, then grab bstat */
> -		if (copy_from_user(&sxp, sxu,
> -				   offsetof(xfs_swapext_t, sx_stat)) ||
> -		    xfs_ioctl32_bstat_copyin(&sxp.sx_stat, &sxu->sx_stat))
> -			return -XFS_ERROR(EFAULT);
> -		error = xfs_swapext(&sxp);
> -		return -error;
> -	}
> -#ifdef BROKEN_X86_ALIGNMENT
> -	/* xfs_flock_t has wrong u32 vs u64 alignment */
> +		return xfs_ioctl(ip, filp, ioflags, cmd, arg);
> +#ifndef BROKEN_X86_ALIGNMENT
> +	/* 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:
> +	case XFS_IOC_FSGROWFSDATA:
> +	case XFS_IOC_FSGROWFSRT:
> +		return xfs_ioctl(ip, filp, ioflags, cmd, arg);
> +#else
>  	case XFS_IOC_ALLOCSP_32:
>  	case XFS_IOC_FREESP_32:
>  	case XFS_IOC_ALLOCSP64_32:
> @@ -692,18 +682,25 @@ xfs_compat_ioctl(
>  		error = xfs_growfs_rt(mp, &in);
>  		return -error;
>  	}
> -#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 changes size, but xfs only copiese out 32 bits */
> +	case XFS_IOC_GETXFLAGS_32:
> +	case XFS_IOC_SETXFLAGS_32:
> +	case XFS_IOC_GETVERSION_32:
> +		cmd = _NATIVE_IOC(cmd, long);
> +		return xfs_ioctl(ip, filp, ioflags, cmd, arg);
> +	case XFS_IOC_SWAPEXT: {
> +		struct xfs_swapext	  sxp;
> +		struct compat_xfs_swapext __user *sxu = arg;
> +
> +		/* Bulk copy in up to the sx_stat field, then copy bstat */
> +		if (copy_from_user(&sxp, sxu,
> +				   offsetof(struct xfs_swapext, sx_stat)) ||
> +		    xfs_ioctl32_bstat_copyin(&sxp.sx_stat, &sxu->sx_stat))
> +			return -XFS_ERROR(EFAULT);
> +		error = xfs_swapext(&sxp);
> +		return -error;
> +	}
>  	case XFS_IOC_FSBULKSTAT_32:
>  	case XFS_IOC_FSBULKSTAT_SINGLE_32:
>  	case XFS_IOC_FSINUMBERS_32:
> @@ -741,9 +738,6 @@ xfs_compat_ioctl(
>  	default:
>  		return -XFS_ERROR(ENOIOCTLCMD);
>  	}
> -
> -	error = xfs_ioctl(ip, filp, ioflags, cmd, arg);
> -	return error;
>  }
>  
>  long
> 
> -- 
> 
> _______________________________________________
> xfs mailing list
> xfs at oss.sgi.com
> http://oss.sgi.com/mailman/listinfo/xfs
---end quoted text---



More information about the xfs mailing list