|
|
| version 1.16, 2007/07/09 15:43:57 | version 1.17, 2007/07/09 15:44:42 |
|---|---|
| Line 141 xfs_ioctl32_bulkstat( | Line 141 xfs_ioctl32_bulkstat( |
| } | } |
| #endif | #endif |
| typedef struct compat_xfs_fsop_handlereq { | |
| __u32 fd; /* fd for FD_TO_HANDLE */ | |
| compat_uptr_t path; /* user pathname */ | |
| __u32 oflags; /* open flags */ | |
| compat_uptr_t ihandle; /* user supplied handle */ | |
| __u32 ihandlen; /* user supplied length */ | |
| compat_uptr_t ohandle; /* user buffer for handle */ | |
| compat_uptr_t ohandlen; /* user buffer length */ | |
| } compat_xfs_fsop_handlereq_t; | |
| #define XFS_IOC_PATH_TO_FSHANDLE_32 \ | |
| _IOWR('X', 104, struct compat_xfs_fsop_handlereq) | |
| #define XFS_IOC_PATH_TO_HANDLE_32 \ | |
| _IOWR('X', 105, struct compat_xfs_fsop_handlereq) | |
| #define XFS_IOC_FD_TO_HANDLE_32 \ | |
| _IOWR('X', 106, struct compat_xfs_fsop_handlereq) | |
| #define XFS_IOC_OPEN_BY_HANDLE_32 \ | |
| _IOWR('X', 107, struct compat_xfs_fsop_handlereq) | |
| #define XFS_IOC_READLINK_BY_HANDLE_32 \ | |
| _IOWR('X', 108, struct compat_xfs_fsop_handlereq) | |
| STATIC unsigned long xfs_ioctl32_fshandle(unsigned long arg) | |
| { | |
| compat_xfs_fsop_handlereq_t __user *p32 = (void __user *)arg; | |
| xfs_fsop_handlereq_t __user *p = compat_alloc_user_space(sizeof(*p)); | |
| u32 addr; | |
| if (copy_in_user(&p->fd, &p32->fd, sizeof(__u32)) || | |
| get_user(addr, &p32->path) || | |
| put_user(compat_ptr(addr), &p->path) || | |
| copy_in_user(&p->oflags, &p32->oflags, sizeof(__u32)) || | |
| get_user(addr, &p32->ihandle) || | |
| put_user(compat_ptr(addr), &p->ihandle) || | |
| copy_in_user(&p->ihandlen, &p32->ihandlen, sizeof(__u32)) || | |
| get_user(addr, &p32->ohandle) || | |
| put_user(compat_ptr(addr), &p->ohandle) || | |
| get_user(addr, &p32->ohandlen) || | |
| put_user(compat_ptr(addr), &p->ohandlen)) | |
| return -EFAULT; | |
| return (unsigned long)p; | |
| } | |
| STATIC long | STATIC long |
| xfs_compat_ioctl( | xfs_compat_ioctl( |
| int mode, | int mode, |
| Line 166 xfs_compat_ioctl( | Line 210 xfs_compat_ioctl( |
| case XFS_IOC_GETBMAPA: | case XFS_IOC_GETBMAPA: |
| case XFS_IOC_GETBMAPX: | case XFS_IOC_GETBMAPX: |
| /* not handled | /* not handled |
| case XFS_IOC_FD_TO_HANDLE: | |
| case XFS_IOC_PATH_TO_HANDLE: | |
| case XFS_IOC_PATH_TO_FSHANDLE: | |
| case XFS_IOC_OPEN_BY_HANDLE: | |
| case XFS_IOC_FSSETDM_BY_HANDLE: | case XFS_IOC_FSSETDM_BY_HANDLE: |
| case XFS_IOC_READLINK_BY_HANDLE: | |
| case XFS_IOC_ATTRLIST_BY_HANDLE: | case XFS_IOC_ATTRLIST_BY_HANDLE: |
| case XFS_IOC_ATTRMULTI_BY_HANDLE: | case XFS_IOC_ATTRMULTI_BY_HANDLE: |
| */ | */ |
| Line 228 xfs_compat_ioctl( | Line 267 xfs_compat_ioctl( |
| arg = xfs_ioctl32_bulkstat(arg); | arg = xfs_ioctl32_bulkstat(arg); |
| break; | break; |
| #endif | #endif |
| case XFS_IOC_FD_TO_HANDLE_32: | |
| case XFS_IOC_PATH_TO_HANDLE_32: | |
| case XFS_IOC_PATH_TO_FSHANDLE_32: | |
| case XFS_IOC_OPEN_BY_HANDLE_32: | |
| case XFS_IOC_READLINK_BY_HANDLE_32: | |
| arg = xfs_ioctl32_fshandle(arg); | |
| cmd = _NATIVE_IOC(cmd, struct xfs_fsop_handlereq); | |
| break; | |
| default: | default: |
| return -ENOIOCTLCMD; | return -ENOIOCTLCMD; |
| } | } |