[XFS] Add a get/set interface for XFS project identifiers.
authorNathan Scott <nathans@sgi.com>
Tue, 21 Jun 2005 03:21:49 +0000 (13:21 +1000)
committerNathan Scott <nathans@sgi.com>
Tue, 21 Jun 2005 03:21:49 +0000 (13:21 +1000)
SGI-PV: 932952
SGI-Modid: xfs-linux:xfs-kern:21938a

Signed-off-by: Nathan Scott <nathans@sgi.com>
fs/xfs/linux-2.6/xfs_ioctl.c
fs/xfs/linux-2.6/xfs_ioctl32.c
fs/xfs/linux-2.6/xfs_vnode.h
fs/xfs/xfs_fs.h
fs/xfs/xfs_types.h

index 69809ee..df17d93 100644 (file)
@@ -777,6 +777,8 @@ xfs_ioctl(
        case XFS_IOC_GETVERSION:
        case XFS_IOC_GETXFLAGS:
        case XFS_IOC_SETXFLAGS:
+       case XFS_IOC_GETPROJID:
+       case XFS_IOC_SETPROJID:
        case XFS_IOC_FSGETXATTR:
        case XFS_IOC_FSSETXATTR:
        case XFS_IOC_FSGETXATTRA:
@@ -1258,6 +1260,26 @@ xfs_ioc_xattr(
                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:
                return -ENOTTY;
        }
index 0f8f138..be72aca 100644 (file)
@@ -100,6 +100,8 @@ __linvfs_compat_ioctl(int mode, struct file *f, unsigned cmd, unsigned long arg)
        case XFS_IOC_GETBMAP:
        case XFS_IOC_GETBMAPA:
        case XFS_IOC_GETBMAPX:
+       case XFS_IOC_SETPROJID:
+       case XFS_IOC_GETPROJID:
 /* not handled
        case XFS_IOC_FD_TO_HANDLE:
        case XFS_IOC_PATH_TO_HANDLE:
index 00466c3..a6e57c6 100644 (file)
@@ -426,7 +426,7 @@ typedef struct vattr {
        u_long          va_extsize;     /* file extent size */
        u_long          va_nextents;    /* number of 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;
 
 /*
index 6ee8443..a7bd468 100644 (file)
@@ -477,6 +477,8 @@ typedef struct xfs_handle {
 /*     XFS_IOC_SETBIOSIZE ---- deprecated 46      */
 /*     XFS_IOC_GETBIOSIZE ---- deprecated 47      */
 #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
index e4bf711..16f5371 100644 (file)
@@ -55,7 +55,7 @@ typedef signed long long int  __int64_t;
 typedef unsigned long long int __uint64_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 __s64                  xfs_off_t;      /* <file offset> type */