]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/blobdiff - include/xfs_bmap.h
Merge back recent changes from xfs kernel headers.
[thirdparty/xfsprogs-dev.git] / include / xfs_bmap.h
index cb0dc44fb9dfcbac7e08b7758296f3232b78fe94..2e0717a01309ee5b75ab8ba521aceb31900cd77e 100644 (file)
@@ -1,36 +1,22 @@
 /*
- * Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
+ * Copyright (c) 2000-2003,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 of the GNU General Public License as
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU 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 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 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 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_BMAP_H__
-#define __XFS_BMAP_H__
+#define        __XFS_BMAP_H__
 
 struct getbmap;
 struct xfs_bmbt_irec;
@@ -52,19 +38,19 @@ typedef struct xfs_bmap_free_item
 /*
  * Header for free extent list.
  */
-typedef struct xfs_bmap_free
+typedef        struct xfs_bmap_free
 {
        xfs_bmap_free_item_t    *xbf_first;     /* list of to-be-free extents */
        int                     xbf_count;      /* count of items on list */
        int                     xbf_low;        /* kludge: alloc in low mode */
 } xfs_bmap_free_t;
 
-#define XFS_BMAP_MAX_NMAP      4
+#define        XFS_BMAP_MAX_NMAP       4
 
 /*
  * Flags for xfs_bmapi
  */
-#define XFS_BMAPI_WRITE                0x001   /* write operation: allocate space */
+#define        XFS_BMAPI_WRITE         0x001   /* write operation: allocate space */
 #define XFS_BMAPI_DELAY                0x002   /* delayed write operation */
 #define XFS_BMAPI_ENTIRE       0x004   /* return entire extent, not trimmed */
 #define XFS_BMAPI_METADATA     0x008   /* mapping metadata not user data */
@@ -72,56 +58,29 @@ typedef struct xfs_bmap_free
 #define XFS_BMAPI_ATTRFORK     0x020   /* use attribute fork not data */
 #define XFS_BMAPI_ASYNC                0x040   /* bunmapi xactions can be async */
 #define XFS_BMAPI_RSVBLOCKS    0x080   /* OK to alloc. reserved data blocks */
-#define XFS_BMAPI_PREALLOC     0x100   /* preallocation op: unwritten space */
-#define XFS_BMAPI_IGSTATE      0x200   /* Ignore state - */
+#define        XFS_BMAPI_PREALLOC      0x100   /* preallocation op: unwritten space */
+#define        XFS_BMAPI_IGSTATE       0x200   /* Ignore state - */
                                        /* combine contig. space */
-#define XFS_BMAPI_CONTIG       0x400   /* must allocate only one extent */
-#define XFS_BMAPI_DIRECT_IO    0x800   /* Flag from cxfs client, not used
-                                        * by xfs directly. Indicates alloc
-                                        * request is for direct I/O not
-                                        * extent conversion by server */
-
-#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_BMAPI_AFLAG)
-int xfs_bmapi_aflag(int w);
-#define XFS_BMAPI_AFLAG(w)     xfs_bmapi_aflag(w)
-#else
-#define XFS_BMAPI_AFLAG(w)     ((w) == XFS_ATTR_FORK ? XFS_BMAPI_ATTRFORK : 0)
-#endif
+#define        XFS_BMAPI_CONTIG        0x400   /* must allocate only one extent */
 
-/*
- * Special values for xfs_bmbt_irec_t br_startblock field.
- */
-#define DELAYSTARTBLOCK                ((xfs_fsblock_t)-1LL)
-#define HOLESTARTBLOCK         ((xfs_fsblock_t)-2LL)
+#define        XFS_BMAPI_AFLAG(w)      xfs_bmapi_aflag(w)
+static inline int xfs_bmapi_aflag(int w)
+{
+       return (w == XFS_ATTR_FORK ? XFS_BMAPI_ATTRFORK : 0);
+}
 
 /*
- * Trace operations for bmap extent tracing
+ * Special values for xfs_bmbt_irec_t br_startblock field.
  */
-#define XFS_BMAP_KTRACE_DELETE 1
-#define XFS_BMAP_KTRACE_INSERT 2
-#define XFS_BMAP_KTRACE_PRE_UP 3
-#define XFS_BMAP_KTRACE_POST_UP 4
-
-#define XFS_BMAP_TRACE_SIZE    4096    /* size of global trace buffer */
-#define XFS_BMAP_KTRACE_SIZE   32      /* size of per-inode trace buffer */
-
-#if defined(XFS_ALL_TRACE)
-#define XFS_BMAP_TRACE
-#endif
-
-#if !defined(DEBUG)
-#undef XFS_BMAP_TRACE
-#endif
-
+#define        DELAYSTARTBLOCK         ((xfs_fsblock_t)-1LL)
+#define        HOLESTARTBLOCK          ((xfs_fsblock_t)-2LL)
 
-#if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_BMAP_INIT)
-void xfs_bmap_init(xfs_bmap_free_t *flp, xfs_fsblock_t *fbp);
-#define XFS_BMAP_INIT(flp,fbp) xfs_bmap_init(flp,fbp)
-#else
-#define XFS_BMAP_INIT(flp,fbp) \
+#define        XFS_BMAP_INIT(flp,fbp)  xfs_bmap_init(flp,fbp)
+static inline void xfs_bmap_init(xfs_bmap_free_t *flp, xfs_fsblock_t *fbp)
+{
        ((flp)->xbf_first = NULL, (flp)->xbf_count = 0, \
-        (flp)->xbf_low = 0, *(fbp) = NULLFSBLOCK)
-#endif
+               (flp)->xbf_low = 0, *(fbp) = NULLFSBLOCK);
+}
 
 /*
  * Argument structure for xfs_bmap_alloc.
@@ -132,20 +91,47 @@ typedef struct xfs_bmalloca {
        xfs_fileoff_t           off;    /* offset in file filling in */
        struct xfs_trans        *tp;    /* transaction pointer */
        struct xfs_inode        *ip;    /* incore inode pointer */
-       struct xfs_bmbt_irec    *prevp; /* extent before the new one */
+       struct xfs_bmbt_irec    *prevp; /* extent before the new one */
        struct xfs_bmbt_irec    *gotp;  /* extent after, or delayed */
        xfs_extlen_t            alen;   /* i/o length asked/allocated */
        xfs_extlen_t            total;  /* total blocks needed for xaction */
-       xfs_extlen_t            minlen; /* mininum allocation size (blocks) */
+       xfs_extlen_t            minlen; /* mininum allocation size (blocks) */
        xfs_extlen_t            minleft; /* amount must be left after alloc */
        char                    eof;    /* set if allocating past last extent */
-       char                    wasdel; /* replacing a delayed allocation */
+       char                    wasdel; /* replacing a delayed allocation */
        char                    userdata;/* set if is user data */
        char                    low;    /* low on space, using seq'l ags */
-       char                    aeof;   /* allocated space at eof */
+       char                    aeof;   /* allocated space at eof */
 } xfs_bmalloca_t;
 
 #ifdef __KERNEL__
+
+#if defined(XFS_BMAP_TRACE)
+/*
+ * Trace operations for bmap extent tracing
+ */
+#define        XFS_BMAP_KTRACE_DELETE  1
+#define        XFS_BMAP_KTRACE_INSERT  2
+#define        XFS_BMAP_KTRACE_PRE_UP  3
+#define        XFS_BMAP_KTRACE_POST_UP 4
+
+#define        XFS_BMAP_TRACE_SIZE     4096    /* size of global trace buffer */
+#define        XFS_BMAP_KTRACE_SIZE    32      /* size of per-inode trace buffer */
+extern ktrace_t        *xfs_bmap_trace_buf;
+
+/*
+ * Add bmap trace insert entries for all the contents of the extent list.
+ */
+void
+xfs_bmap_trace_exlist(
+       char                    *fname,         /* function name */
+       struct xfs_inode        *ip,            /* incore inode pointer */
+       xfs_extnum_t            cnt,            /* count of entries in list */
+       int                     whichfork);     /* data or attr fork */
+#else
+#define        xfs_bmap_trace_exlist(f,ip,c,w)
+#endif
+
 /*
  * Convert inode from non-attributed to attributed.
  * Must not be in a transaction, ip must not be locked.
@@ -153,7 +139,8 @@ typedef struct xfs_bmalloca {
 int                                    /* error code */
 xfs_bmap_add_attrfork(
        struct xfs_inode        *ip,    /* incore inode pointer */
-       int                                     rsvd);  /* flag for reserved block allocation */
+       int                     size,   /* space needed for new attribute */
+       int                     rsvd);  /* flag for reserved block allocation */
 
 /*
  * Add the extent to the list of extents to be free at transaction end.
@@ -174,16 +161,9 @@ void
 xfs_bmap_cancel(
        xfs_bmap_free_t         *flist);        /* free list to clean up */
 
-/*
- * Routine to check if a specified inode is swap capable.
- */
-int
-xfs_bmap_check_swappable(
-       struct xfs_inode        *ip);           /* incore inode */
-
 /*
  * Compute and fill in the value of the maximum depth of a bmap btree
- * in this filesystem. Done once, during mount.
+ * in this filesystem.  Done once, during mount.
  */
 void
 xfs_bmap_compute_maxlevels(
@@ -264,20 +244,6 @@ xfs_bmap_read_extents(
        struct xfs_inode        *ip,            /* incore inode */
        int                     whichfork);     /* data or attr fork */
 
-#if defined(XFS_BMAP_TRACE)
-/*
- * Add bmap trace insert entries for all the contents of the extent list.
- */
-void
-xfs_bmap_trace_exlist(
-       char                    *fname,         /* function name */
-       struct xfs_inode        *ip,            /* incore inode pointer */
-       xfs_extnum_t            cnt,            /* count of entries in list */
-       int                     whichfork);     /* data or attr fork */
-#else
-#define xfs_bmap_trace_exlist(f,ip,c,w)
-#endif
-
 /*
  * Map file blocks to filesystem blocks.
  * File range is given by the bno/len pair.
@@ -323,7 +289,7 @@ xfs_bmapi_single(
 /*
  * Unmap (remove) blocks from a file.
  * If nexts is nonzero then the number of extents to remove is limited to
- * that value. If not all extents in the block range can be removed then
+ * that value.  If not all extents in the block range can be removed then
  * *done is set.
  */
 int                                            /* error */
@@ -346,32 +312,19 @@ int                                               /* error code */
 xfs_getbmap(
        bhv_desc_t              *bdp,           /* XFS behavior descriptor*/
        struct getbmap          *bmv,           /* user bmap structure */
-       void                    *ap,            /* pointer to user's array */
+       void                    __user *ap,     /* pointer to user's array */
        int                     iflags);        /* interface flags */
 
-/*
- * Check the last inode extent to determine whether this allocation will result
- * in blocks being allocated at the end of the file. When we allocate new data
- * blocks at the end of the file which do not start at the previous data block,
- * we will try to align the new blocks at stripe unit boundaries.
- */
-int
-xfs_bmap_isaeof(
-       struct xfs_inode        *ip,
-       xfs_fileoff_t           off,
-       int                     whichfork,
-       char                    *aeof);
-
 /*
  * Check if the endoff is outside the last extent. If so the caller will grow
  * the allocation to a stripe unit boundary
  */
 int
 xfs_bmap_eof(
-       struct xfs_inode        *ip,
-       xfs_fileoff_t           endoff,
-       int                     whichfork,
-       int                     *eof);
+       struct xfs_inode        *ip,
+       xfs_fileoff_t           endoff,
+       int                     whichfork,
+       int                     *eof);
 
 /*
  * Count fsblocks of the given fork.
@@ -379,7 +332,7 @@ xfs_bmap_eof(
 int
 xfs_bmap_count_blocks(
        xfs_trans_t             *tp,
-       xfs_inode_t             *ip,
+       struct xfs_inode        *ip,
        int                     whichfork,
        int                     *count);