fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / fs / xfs / xfs_fs.h
index 1ed650e..e5d7d23 100644 (file)
@@ -1,34 +1,19 @@
 /*
- * Copyright (c) 1995-2003 Silicon Graphics, Inc.  All Rights Reserved.
+ * Copyright (c) 1995-2005 Silicon Graphics, Inc.
+ * All Rights Reserved.
  *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2.1 of the GNU Lesser General Public License
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
  * as published by the Free Software Foundation.
  *
- * This program is distributed in the hope that it would be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * This program is distributed in the hope that it would be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
  *
- * Further, this software is distributed without any warranty that it is
- * free of the rightful claim of any third person regarding infringement
- * or the like.         Any license provided herein, whether implied or
- * otherwise, applies only to this software file.  Patent licenses, if
- * any, provided herein do not apply to combinations of this program with
- * other software, or any other product whatsoever.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this program; if not, write the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307,
- * USA.
- *
- * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
- * Mountain View, CA  94043, or:
- *
- * http://www.sgi.com
- *
- * For further information regarding this notice, see:
- *
- * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write the Free Software Foundation,
+ * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 #ifndef __XFS_FS_H__
 #define __XFS_FS_H__
@@ -37,8 +22,6 @@
  * SGI's XFS filesystem's major stuff (constants, structures)
  */
 
-#define XFS_NAME       "xfs"
-
 /*
  * Direct I/O attribute record used with XFS_IOC_DIOINFO
  * d_miniosz is the min xfer size, xfer size multiple and file seek offset
@@ -60,7 +43,8 @@ struct fsxattr {
        __u32           fsx_xflags;     /* xflags field value (get/set) */
        __u32           fsx_extsize;    /* extsize field value (get/set)*/
        __u32           fsx_nextents;   /* nextents field value (get)   */
-       unsigned char   fsx_pad[16];
+       __u32           fsx_projid;     /* project identifier (get/set) */
+       unsigned char   fsx_pad[12];
 };
 #endif
 
@@ -76,14 +60,22 @@ struct fsxattr {
 #define XFS_XFLAG_SYNC         0x00000020      /* all writes synchronous */
 #define XFS_XFLAG_NOATIME      0x00000040      /* do not update access time */
 #define XFS_XFLAG_NODUMP       0x00000080      /* do not include in backups */
+#define XFS_XFLAG_RTINHERIT    0x00000100      /* create with rt bit set */
+#define XFS_XFLAG_PROJINHERIT  0x00000200      /* create with parents projid */
+#define XFS_XFLAG_NOSYMLINKS   0x00000400      /* disallow symlink creation */
+#define XFS_XFLAG_EXTSIZE      0x00000800      /* extent size allocator hint */
+#define XFS_XFLAG_EXTSZINHERIT 0x00001000      /* inherit inode extent size */
+#define XFS_XFLAG_NODEFRAG     0x00002000      /* do not defragment */
+#define XFS_XFLAG_BARRIER      0x00004000      /* chroot() barrier */
+#define XFS_XFLAG_IUNLINK      0x00008000      /* immutable unlink */
 #define XFS_XFLAG_HASATTR      0x80000000      /* no DIFLAG for this   */
 
 /*
  * Structure for XFS_IOC_GETBMAP.
  * On input, fill in bmv_offset and bmv_length of the first structure
- * to indicate the area of interest in the file, and bmv_entry with the
- * number of array elements given.  The first structure is updated on
- * return to give the offset and length for the next call.
+ * to indicate the area of interest in the file, and bmv_entries with
+ * the number of array elements given back.  The first structure is
+ * updated on return to give the offset and length for the next call.
  */
 #ifndef HAVE_GETBMAP
 struct getbmap {
@@ -164,7 +156,7 @@ typedef struct xfs_flock64 {
        __s64           l_start;
        __s64           l_len;          /* len == 0 means until end of file */
        __s32           l_sysid;
-       pid_t           l_pid;
+       __u32           l_pid;
        __s32           l_pad[4];       /* reserve area                     */
 } xfs_flock64_t;
 
@@ -247,6 +239,7 @@ typedef struct xfs_fsop_resblks {
 #define XFS_FSOP_GEOM_FLAGS_DIRV2      0x0080  /* directory version 2  */
 #define XFS_FSOP_GEOM_FLAGS_LOGV2      0x0100  /* log format version 2 */
 #define XFS_FSOP_GEOM_FLAGS_SECTOR     0x0200  /* sector sizes >1BB    */
+#define XFS_FSOP_GEOM_FLAGS_ATTR2      0x0400  /* inline attributes rework */
 
 
 /*
@@ -303,7 +296,8 @@ typedef struct xfs_bstat {
        __s32           bs_extents;     /* number of extents            */
        __u32           bs_gen;         /* generation count             */
        __u16           bs_projid;      /* project id                   */
-       unsigned char   bs_pad[14];     /* pad space, unused            */
+       __u16           bs_tag;         /* context tagging              */
+       unsigned char   bs_pad[12];     /* pad space, unused            */
        __u32           bs_dmevmask;    /* DMIG event mask              */
        __u16           bs_dmstate;     /* DMIG state info              */
        __u16           bs_aextents;    /* attribute number of extents  */
@@ -313,10 +307,10 @@ typedef struct xfs_bstat {
  * The user-level BulkStat Request interface structure.
  */
 typedef struct xfs_fsop_bulkreq {
-       __u64           *lastip;        /* last inode # pointer         */
+       __u64           __user *lastip; /* last inode # pointer         */
        __s32           icount;         /* count of entries in buffer   */
-       void            *ubuffer;       /* user buffer for inode desc.  */
-       __s32           *ocount;        /* output count pointer         */
+       void            __user *ubuffer;/* user buffer for inode desc.  */
+       __s32           __user *ocount; /* output count pointer         */
 } xfs_fsop_bulkreq_t;
 
 
@@ -344,12 +338,12 @@ typedef struct xfs_error_injection {
  */
 typedef struct xfs_fsop_handlereq {
        __u32           fd;             /* fd for FD_TO_HANDLE          */
-       void            *path;          /* user pathname                */
+       void            __user *path;   /* user pathname                */
        __u32           oflags;         /* open flags                   */
-       void            *ihandle;       /* user supplied handle         */
+       void            __user *ihandle;/* user supplied handle         */
        __u32           ihandlen;       /* user supplied length         */
-       void            *ohandle;       /* user buffer for handle       */
-       __u32           *ohandlen;      /* user buffer length           */
+       void            __user *ohandle;/* user buffer for handle       */
+       __u32           __user *ohandlen;/* user buffer length          */
 } xfs_fsop_handlereq_t;
 
 /*
@@ -360,35 +354,35 @@ typedef struct xfs_fsop_handlereq {
  */
 
 typedef struct xfs_fsop_setdm_handlereq {
-       struct xfs_fsop_handlereq hreq; /* handle interface structure */
-       struct fsdmidata *data;         /* DMAPI data to set          */
+       struct xfs_fsop_handlereq       hreq;   /* handle information   */
+       struct fsdmidata                __user *data;   /* DMAPI data   */
 } xfs_fsop_setdm_handlereq_t;
 
 typedef struct xfs_attrlist_cursor {
-       __u32   opaque[4];
+       __u32           opaque[4];
 } xfs_attrlist_cursor_t;
 
 typedef struct xfs_fsop_attrlist_handlereq {
-       struct xfs_fsop_handlereq hreq; /* handle interface structure */
-       struct xfs_attrlist_cursor pos; /* opaque cookie, list offset */
-       __u32 flags;                    /* flags, use ROOT/USER names */
-       __u32 buflen;                   /* length of buffer supplied  */
-       void *buffer;                   /* attrlist data to return    */
+       struct xfs_fsop_handlereq       hreq; /* handle interface structure */
+       struct xfs_attrlist_cursor      pos; /* opaque cookie, list offset */
+       __u32                           flags;  /* which namespace to use */
+       __u32                           buflen; /* length of buffer supplied */
+       void                            __user *buffer; /* returned names */
 } xfs_fsop_attrlist_handlereq_t;
 
 typedef struct xfs_attr_multiop {
-       __u32   am_opcode;
-       __s32   am_error;
-       void    *am_attrname;
-       void    *am_attrvalue;
-       __u32   am_length;
-       __u32   am_flags;
+       __u32           am_opcode;
+       __s32           am_error;
+       void            __user *am_attrname;
+       void            __user *am_attrvalue;
+       __u32           am_length;
+       __u32           am_flags;
 } xfs_attr_multiop_t;
 
 typedef struct xfs_fsop_attrmulti_handlereq {
-       struct xfs_fsop_handlereq hreq; /* handle interface structure */
-       __u32 opcount;                  /* count of following multiop */
-       struct xfs_attr_multiop *ops;   /* attr_multi data to get/set */
+       struct xfs_fsop_handlereq       hreq; /* handle interface structure */
+       __u32                           opcount;/* count of following multiop */
+       struct xfs_attr_multiop         __user *ops; /* attr_multi data */
 } xfs_fsop_attrmulti_handlereq_t;
 
 /*
@@ -433,17 +427,20 @@ typedef struct xfs_handle {
                                 - (char *) &(handle))                    \
                                 + (handle).ha_fid.xfs_fid_len)
 
-#define XFS_HANDLE_CMP(h1, h2) memcmp(h1, h2, sizeof(xfs_handle_t))
-
-#define FSHSIZE                sizeof(fsid_t)
-
-/* 
+/*
  * Flags for going down operation
  */
 #define XFS_FSOP_GOING_FLAGS_DEFAULT           0x0     /* going down */
 #define XFS_FSOP_GOING_FLAGS_LOGFLUSH          0x1     /* flush log but not data */
 #define XFS_FSOP_GOING_FLAGS_NOLOGFLUSH                0x2     /* don't flush log nor data */
 
+/*
+ * ioctl commands that are used by Linux filesystems
+ */
+#define XFS_IOC_GETXFLAGS      _IOR('f', 1, long)
+#define XFS_IOC_SETXFLAGS      _IOW('f', 2, long)
+#define XFS_IOC_GETVERSION     _IOR('v', 1, long)
+
 /*
  * ioctl commands that replace IRIX fcntl()'s
  * For 'documentation' purposed more than anything else,