提交 b74e2159 编写于 作者: N Nathan Scott

[XFS] Add a get/set interface for XFS project identifiers.

SGI-PV: 932952
SGI-Modid: xfs-linux:xfs-kern:21938a
Signed-off-by: NNathan Scott <nathans@sgi.com>
上级 91b90475
...@@ -777,6 +777,8 @@ xfs_ioctl( ...@@ -777,6 +777,8 @@ xfs_ioctl(
case XFS_IOC_GETVERSION: case XFS_IOC_GETVERSION:
case XFS_IOC_GETXFLAGS: case XFS_IOC_GETXFLAGS:
case XFS_IOC_SETXFLAGS: case XFS_IOC_SETXFLAGS:
case XFS_IOC_GETPROJID:
case XFS_IOC_SETPROJID:
case XFS_IOC_FSGETXATTR: case XFS_IOC_FSGETXATTR:
case XFS_IOC_FSSETXATTR: case XFS_IOC_FSSETXATTR:
case XFS_IOC_FSGETXATTRA: case XFS_IOC_FSGETXATTRA:
...@@ -1258,6 +1260,26 @@ xfs_ioc_xattr( ...@@ -1258,6 +1260,26 @@ xfs_ioc_xattr(
return 0; return 0;
} }
case XFS_IOC_GETPROJID: {
va.va_mask = XFS_AT_PROJID;
VOP_GETATTR(vp, &va, 0, NULL, error);
if (error)
return -error;
if (copy_to_user(arg, &va.va_projid, sizeof(va.va_projid)))
return -XFS_ERROR(EFAULT);
return 0;
}
case XFS_IOC_SETPROJID: {
if (!capable(CAP_SYS_ADMIN))
return -EPERM;
va.va_mask = XFS_AT_PROJID;
if (copy_from_user(&va.va_projid, arg, sizeof(va.va_projid)))
return -XFS_ERROR(EFAULT);
VOP_SETATTR(vp, &va, 0, NULL, error);
return -error;
}
default: default:
return -ENOTTY; return -ENOTTY;
} }
......
...@@ -100,6 +100,8 @@ __linvfs_compat_ioctl(int mode, struct file *f, unsigned cmd, unsigned long arg) ...@@ -100,6 +100,8 @@ __linvfs_compat_ioctl(int mode, struct file *f, unsigned cmd, unsigned long arg)
case XFS_IOC_GETBMAP: case XFS_IOC_GETBMAP:
case XFS_IOC_GETBMAPA: case XFS_IOC_GETBMAPA:
case XFS_IOC_GETBMAPX: case XFS_IOC_GETBMAPX:
case XFS_IOC_SETPROJID:
case XFS_IOC_GETPROJID:
/* not handled /* not handled
case XFS_IOC_FD_TO_HANDLE: case XFS_IOC_FD_TO_HANDLE:
case XFS_IOC_PATH_TO_HANDLE: case XFS_IOC_PATH_TO_HANDLE:
......
...@@ -426,7 +426,7 @@ typedef struct vattr { ...@@ -426,7 +426,7 @@ typedef struct vattr {
u_long va_extsize; /* file extent size */ u_long va_extsize; /* file extent size */
u_long va_nextents; /* number of extents in file */ u_long va_nextents; /* number of extents in file */
u_long va_anextents; /* number of attr extents in file */ u_long va_anextents; /* number of attr extents in file */
int va_projid; /* project id */ prid_t va_projid; /* project id */
} vattr_t; } vattr_t;
/* /*
......
...@@ -477,6 +477,8 @@ typedef struct xfs_handle { ...@@ -477,6 +477,8 @@ typedef struct xfs_handle {
/* XFS_IOC_SETBIOSIZE ---- deprecated 46 */ /* XFS_IOC_SETBIOSIZE ---- deprecated 46 */
/* XFS_IOC_GETBIOSIZE ---- deprecated 47 */ /* XFS_IOC_GETBIOSIZE ---- deprecated 47 */
#define XFS_IOC_GETBMAPX _IOWR('X', 56, struct getbmap) #define XFS_IOC_GETBMAPX _IOWR('X', 56, struct getbmap)
#define XFS_IOC_SETPROJID _IOWR('X', 57, __uint32_t)
#define XFS_IOC_GETPROJID _IOWR('X', 58, __uint32_t)
/* /*
* ioctl commands that replace IRIX syssgi()'s * ioctl commands that replace IRIX syssgi()'s
......
...@@ -55,7 +55,7 @@ typedef signed long long int __int64_t; ...@@ -55,7 +55,7 @@ typedef signed long long int __int64_t;
typedef unsigned long long int __uint64_t; typedef unsigned long long int __uint64_t;
typedef enum { B_FALSE,B_TRUE } boolean_t; typedef enum { B_FALSE,B_TRUE } boolean_t;
typedef __int64_t prid_t; /* project ID */ typedef __uint32_t prid_t; /* project ID */
typedef __uint32_t inst_t; /* an instruction */ typedef __uint32_t inst_t; /* an instruction */
typedef __s64 xfs_off_t; /* <file offset> type */ typedef __s64 xfs_off_t; /* <file offset> type */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册