|
|
| version 1.15, 2007/01/12 15:07:09 | version 1.16, 2007/07/09 15:43:57 |
|---|---|
| Line 75 xfs_ioctl32_flock( | Line 75 xfs_ioctl32_flock( |
| return (unsigned long)p; | return (unsigned long)p; |
| } | } |
| typedef struct compat_xfs_fsop_geom_v1 { | |
| __u32 blocksize; /* filesystem (data) block size */ | |
| __u32 rtextsize; /* realtime extent size */ | |
| __u32 agblocks; /* fsblocks in an AG */ | |
| __u32 agcount; /* number of allocation groups */ | |
| __u32 logblocks; /* fsblocks in the log */ | |
| __u32 sectsize; /* (data) sector size, bytes */ | |
| __u32 inodesize; /* inode size in bytes */ | |
| __u32 imaxpct; /* max allowed inode space(%) */ | |
| __u64 datablocks; /* fsblocks in data subvolume */ | |
| __u64 rtblocks; /* fsblocks in realtime subvol */ | |
| __u64 rtextents; /* rt extents in realtime subvol*/ | |
| __u64 logstart; /* starting fsblock of the log */ | |
| unsigned char uuid[16]; /* unique id of the filesystem */ | |
| __u32 sunit; /* stripe unit, fsblocks */ | |
| __u32 swidth; /* stripe width, fsblocks */ | |
| __s32 version; /* structure version */ | |
| __u32 flags; /* superblock version flags */ | |
| __u32 logsectsize; /* log sector size, bytes */ | |
| __u32 rtsectsize; /* realtime sector size, bytes */ | |
| __u32 dirblocksize; /* directory block size, bytes */ | |
| } __attribute__((packed)) compat_xfs_fsop_geom_v1_t; | |
| #define XFS_IOC_FSGEOMETRY_V1_32 \ | |
| _IOR ('X', 100, struct compat_xfs_fsop_geom_v1) | |
| STATIC unsigned long xfs_ioctl32_geom_v1(unsigned long arg) | |
| { | |
| compat_xfs_fsop_geom_v1_t __user *p32 = (void __user *)arg; | |
| xfs_fsop_geom_v1_t __user *p = compat_alloc_user_space(sizeof(*p)); | |
| if (copy_in_user(p, p32, sizeof(*p32))) | |
| return -EFAULT; | |
| return (unsigned long)p; | |
| } | |
| #else | #else |
| typedef struct xfs_fsop_bulkreq32 { | typedef struct xfs_fsop_bulkreq32 { |
| Line 118 xfs_compat_ioctl( | Line 154 xfs_compat_ioctl( |
| switch (cmd) { | switch (cmd) { |
| case XFS_IOC_DIOINFO: | case XFS_IOC_DIOINFO: |
| case XFS_IOC_FSGEOMETRY_V1: | |
| case XFS_IOC_FSGEOMETRY: | case XFS_IOC_FSGEOMETRY: |
| case XFS_IOC_GETVERSION: | case XFS_IOC_GETVERSION: |
| case XFS_IOC_GETXFLAGS: | case XFS_IOC_GETXFLAGS: |
| Line 166 xfs_compat_ioctl( | Line 201 xfs_compat_ioctl( |
| arg = xfs_ioctl32_flock(arg); | arg = xfs_ioctl32_flock(arg); |
| cmd = _NATIVE_IOC(cmd, struct xfs_flock64); | cmd = _NATIVE_IOC(cmd, struct xfs_flock64); |
| break; | break; |
| case XFS_IOC_FSGEOMETRY_V1_32: | |
| arg = xfs_ioctl32_geom_v1(arg); | |
| cmd = _NATIVE_IOC(cmd, struct xfs_fsop_geom_v1); | |
| break; | |
| #else /* These are handled fine if no alignment issues */ | #else /* These are handled fine if no alignment issues */ |
| case XFS_IOC_ALLOCSP: | case XFS_IOC_ALLOCSP: |
| Line 176 xfs_compat_ioctl( | Line 215 xfs_compat_ioctl( |
| case XFS_IOC_FREESP64: | case XFS_IOC_FREESP64: |
| case XFS_IOC_RESVSP64: | case XFS_IOC_RESVSP64: |
| case XFS_IOC_UNRESVSP64: | case XFS_IOC_UNRESVSP64: |
| case XFS_IOC_FSGEOMETRY_V1: | |
| break; | break; |
| /* xfs_bstat_t still has wrong u32 vs u64 alignment */ | /* xfs_bstat_t still has wrong u32 vs u64 alignment */ |