diff options
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_ioctl.c | 33 | ||||
| -rw-r--r-- | fs/xfs/linux-2.6/xfs_ioctl32.c | 2 | ||||
| -rw-r--r-- | fs/xfs/xfs_fs.h | 5 |
3 files changed, 10 insertions, 30 deletions
diff --git a/fs/xfs/linux-2.6/xfs_ioctl.c b/fs/xfs/linux-2.6/xfs_ioctl.c index df17d93bd096..05a447e51cc0 100644 --- a/fs/xfs/linux-2.6/xfs_ioctl.c +++ b/fs/xfs/linux-2.6/xfs_ioctl.c | |||
| @@ -777,8 +777,6 @@ xfs_ioctl( | |||
| 777 | case XFS_IOC_GETVERSION: | 777 | case XFS_IOC_GETVERSION: |
| 778 | case XFS_IOC_GETXFLAGS: | 778 | case XFS_IOC_GETXFLAGS: |
| 779 | case XFS_IOC_SETXFLAGS: | 779 | case XFS_IOC_SETXFLAGS: |
| 780 | case XFS_IOC_GETPROJID: | ||
| 781 | case XFS_IOC_SETPROJID: | ||
| 782 | case XFS_IOC_FSGETXATTR: | 780 | case XFS_IOC_FSGETXATTR: |
| 783 | case XFS_IOC_FSSETXATTR: | 781 | case XFS_IOC_FSSETXATTR: |
| 784 | case XFS_IOC_FSGETXATTRA: | 782 | case XFS_IOC_FSGETXATTRA: |
| @@ -1176,7 +1174,8 @@ xfs_ioc_xattr( | |||
| 1176 | 1174 | ||
| 1177 | switch (cmd) { | 1175 | switch (cmd) { |
| 1178 | case XFS_IOC_FSGETXATTR: { | 1176 | case XFS_IOC_FSGETXATTR: { |
| 1179 | va.va_mask = XFS_AT_XFLAGS|XFS_AT_EXTSIZE|XFS_AT_NEXTENTS; | 1177 | va.va_mask = XFS_AT_XFLAGS | XFS_AT_EXTSIZE | \ |
| 1178 | XFS_AT_NEXTENTS | XFS_AT_PROJID; | ||
| 1180 | VOP_GETATTR(vp, &va, 0, NULL, error); | 1179 | VOP_GETATTR(vp, &va, 0, NULL, error); |
| 1181 | if (error) | 1180 | if (error) |
| 1182 | return -error; | 1181 | return -error; |
| @@ -1184,6 +1183,7 @@ xfs_ioc_xattr( | |||
| 1184 | fa.fsx_xflags = va.va_xflags; | 1183 | fa.fsx_xflags = va.va_xflags; |
| 1185 | fa.fsx_extsize = va.va_extsize; | 1184 | fa.fsx_extsize = va.va_extsize; |
| 1186 | fa.fsx_nextents = va.va_nextents; | 1185 | fa.fsx_nextents = va.va_nextents; |
| 1186 | fa.fsx_projid = va.va_projid; | ||
| 1187 | 1187 | ||
| 1188 | if (copy_to_user(arg, &fa, sizeof(fa))) | 1188 | if (copy_to_user(arg, &fa, sizeof(fa))) |
| 1189 | return -XFS_ERROR(EFAULT); | 1189 | return -XFS_ERROR(EFAULT); |
| @@ -1198,9 +1198,10 @@ xfs_ioc_xattr( | |||
| 1198 | if (filp->f_flags & (O_NDELAY|O_NONBLOCK)) | 1198 | if (filp->f_flags & (O_NDELAY|O_NONBLOCK)) |
| 1199 | attr_flags |= ATTR_NONBLOCK; | 1199 | attr_flags |= ATTR_NONBLOCK; |
| 1200 | 1200 | ||
| 1201 | va.va_mask = XFS_AT_XFLAGS | XFS_AT_EXTSIZE; | 1201 | va.va_mask = XFS_AT_XFLAGS | XFS_AT_EXTSIZE | XFS_AT_PROJID; |
| 1202 | va.va_xflags = fa.fsx_xflags; | 1202 | va.va_xflags = fa.fsx_xflags; |
| 1203 | va.va_extsize = fa.fsx_extsize; | 1203 | va.va_extsize = fa.fsx_extsize; |
| 1204 | va.va_projid = fa.fsx_projid; | ||
| 1204 | 1205 | ||
| 1205 | VOP_SETATTR(vp, &va, attr_flags, NULL, error); | 1206 | VOP_SETATTR(vp, &va, attr_flags, NULL, error); |
| 1206 | if (!error) | 1207 | if (!error) |
| @@ -1209,7 +1210,8 @@ xfs_ioc_xattr( | |||
| 1209 | } | 1210 | } |
| 1210 | 1211 | ||
| 1211 | case XFS_IOC_FSGETXATTRA: { | 1212 | case XFS_IOC_FSGETXATTRA: { |
| 1212 | va.va_mask = XFS_AT_XFLAGS|XFS_AT_EXTSIZE|XFS_AT_ANEXTENTS; | 1213 | va.va_mask = XFS_AT_XFLAGS | XFS_AT_EXTSIZE | \ |
| 1214 | XFS_AT_ANEXTENTS | XFS_AT_PROJID; | ||
| 1213 | VOP_GETATTR(vp, &va, 0, NULL, error); | 1215 | VOP_GETATTR(vp, &va, 0, NULL, error); |
| 1214 | if (error) | 1216 | if (error) |
| 1215 | return -error; | 1217 | return -error; |
| @@ -1217,6 +1219,7 @@ xfs_ioc_xattr( | |||
| 1217 | fa.fsx_xflags = va.va_xflags; | 1219 | fa.fsx_xflags = va.va_xflags; |
| 1218 | fa.fsx_extsize = va.va_extsize; | 1220 | fa.fsx_extsize = va.va_extsize; |
| 1219 | fa.fsx_nextents = va.va_anextents; | 1221 | fa.fsx_nextents = va.va_anextents; |
| 1222 | fa.fsx_projid = va.va_projid; | ||
| 1220 | 1223 | ||
| 1221 | if (copy_to_user(arg, &fa, sizeof(fa))) | 1224 | if (copy_to_user(arg, &fa, sizeof(fa))) |
| 1222 | return -XFS_ERROR(EFAULT); | 1225 | return -XFS_ERROR(EFAULT); |
| @@ -1260,26 +1263,6 @@ xfs_ioc_xattr( | |||
| 1260 | return 0; | 1263 | return 0; |
| 1261 | } | 1264 | } |
| 1262 | 1265 | ||
| 1263 | case XFS_IOC_GETPROJID: { | ||
| 1264 | va.va_mask = XFS_AT_PROJID; | ||
| 1265 | VOP_GETATTR(vp, &va, 0, NULL, error); | ||
| 1266 | if (error) | ||
| 1267 | return -error; | ||
| 1268 | if (copy_to_user(arg, &va.va_projid, sizeof(va.va_projid))) | ||
| 1269 | return -XFS_ERROR(EFAULT); | ||
| 1270 | return 0; | ||
| 1271 | } | ||
| 1272 | |||
| 1273 | case XFS_IOC_SETPROJID: { | ||
| 1274 | if (!capable(CAP_SYS_ADMIN)) | ||
| 1275 | return -EPERM; | ||
| 1276 | va.va_mask = XFS_AT_PROJID; | ||
| 1277 | if (copy_from_user(&va.va_projid, arg, sizeof(va.va_projid))) | ||
| 1278 | return -XFS_ERROR(EFAULT); | ||
| 1279 | VOP_SETATTR(vp, &va, 0, NULL, error); | ||
| 1280 | return -error; | ||
| 1281 | } | ||
| 1282 | |||
| 1283 | default: | 1266 | default: |
| 1284 | return -ENOTTY; | 1267 | return -ENOTTY; |
| 1285 | } | 1268 | } |
diff --git a/fs/xfs/linux-2.6/xfs_ioctl32.c b/fs/xfs/linux-2.6/xfs_ioctl32.c index be72aca59447..0f8f1384eb36 100644 --- a/fs/xfs/linux-2.6/xfs_ioctl32.c +++ b/fs/xfs/linux-2.6/xfs_ioctl32.c | |||
| @@ -100,8 +100,6 @@ __linvfs_compat_ioctl(int mode, struct file *f, unsigned cmd, unsigned long arg) | |||
| 100 | case XFS_IOC_GETBMAP: | 100 | case XFS_IOC_GETBMAP: |
| 101 | case XFS_IOC_GETBMAPA: | 101 | case XFS_IOC_GETBMAPA: |
| 102 | case XFS_IOC_GETBMAPX: | 102 | case XFS_IOC_GETBMAPX: |
| 103 | case XFS_IOC_SETPROJID: | ||
| 104 | case XFS_IOC_GETPROJID: | ||
| 105 | /* not handled | 103 | /* not handled |
| 106 | case XFS_IOC_FD_TO_HANDLE: | 104 | case XFS_IOC_FD_TO_HANDLE: |
| 107 | case XFS_IOC_PATH_TO_HANDLE: | 105 | case XFS_IOC_PATH_TO_HANDLE: |
diff --git a/fs/xfs/xfs_fs.h b/fs/xfs/xfs_fs.h index a7bd4687fa50..095af0a5cff3 100644 --- a/fs/xfs/xfs_fs.h +++ b/fs/xfs/xfs_fs.h | |||
| @@ -60,7 +60,8 @@ struct fsxattr { | |||
| 60 | __u32 fsx_xflags; /* xflags field value (get/set) */ | 60 | __u32 fsx_xflags; /* xflags field value (get/set) */ |
| 61 | __u32 fsx_extsize; /* extsize field value (get/set)*/ | 61 | __u32 fsx_extsize; /* extsize field value (get/set)*/ |
| 62 | __u32 fsx_nextents; /* nextents field value (get) */ | 62 | __u32 fsx_nextents; /* nextents field value (get) */ |
| 63 | unsigned char fsx_pad[16]; | 63 | __u32 fsx_projid; /* project identifier (get/set) */ |
| 64 | unsigned char fsx_pad[12]; | ||
| 64 | }; | 65 | }; |
| 65 | #endif | 66 | #endif |
| 66 | 67 | ||
| @@ -477,8 +478,6 @@ typedef struct xfs_handle { | |||
| 477 | /* XFS_IOC_SETBIOSIZE ---- deprecated 46 */ | 478 | /* XFS_IOC_SETBIOSIZE ---- deprecated 46 */ |
| 478 | /* XFS_IOC_GETBIOSIZE ---- deprecated 47 */ | 479 | /* XFS_IOC_GETBIOSIZE ---- deprecated 47 */ |
| 479 | #define XFS_IOC_GETBMAPX _IOWR('X', 56, struct getbmap) | 480 | #define XFS_IOC_GETBMAPX _IOWR('X', 56, struct getbmap) |
| 480 | #define XFS_IOC_SETPROJID _IOWR('X', 57, __uint32_t) | ||
| 481 | #define XFS_IOC_GETPROJID _IOWR('X', 58, __uint32_t) | ||
| 482 | 481 | ||
| 483 | /* | 482 | /* |
| 484 | * ioctl commands that replace IRIX syssgi()'s | 483 | * ioctl commands that replace IRIX syssgi()'s |
