linux/fs/xfs/xfs_buf_item.h
<<
>>
Prefs
   1/*
   2 * Copyright (c) 2000-2001,2005 Silicon Graphics, Inc.
   3 * All Rights Reserved.
   4 *
   5 * This program is free software; you can redistribute it and/or
   6 * modify it under the terms of the GNU General Public License as
   7 * published by the Free Software Foundation.
   8 *
   9 * This program is distributed in the hope that it would be useful,
  10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12 * GNU General Public License for more details.
  13 *
  14 * You should have received a copy of the GNU General Public License
  15 * along with this program; if not, write the Free Software Foundation,
  16 * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  17 */
  18#ifndef __XFS_BUF_ITEM_H__
  19#define __XFS_BUF_ITEM_H__
  20
  21/* kernel only definitions */
  22
  23/* buf log item flags */
  24#define XFS_BLI_HOLD            0x01
  25#define XFS_BLI_DIRTY           0x02
  26#define XFS_BLI_STALE           0x04
  27#define XFS_BLI_LOGGED          0x08
  28#define XFS_BLI_INODE_ALLOC_BUF 0x10
  29#define XFS_BLI_STALE_INODE     0x20
  30#define XFS_BLI_INODE_BUF       0x40
  31#define XFS_BLI_ORDERED         0x80
  32
  33#define XFS_BLI_FLAGS \
  34        { XFS_BLI_HOLD,         "HOLD" }, \
  35        { XFS_BLI_DIRTY,        "DIRTY" }, \
  36        { XFS_BLI_STALE,        "STALE" }, \
  37        { XFS_BLI_LOGGED,       "LOGGED" }, \
  38        { XFS_BLI_INODE_ALLOC_BUF, "INODE_ALLOC" }, \
  39        { XFS_BLI_STALE_INODE,  "STALE_INODE" }, \
  40        { XFS_BLI_INODE_BUF,    "INODE_BUF" }, \
  41        { XFS_BLI_ORDERED,      "ORDERED" }
  42
  43
  44struct xfs_buf;
  45struct xfs_mount;
  46struct xfs_buf_log_item;
  47
  48/*
  49 * This is the in core log item structure used to track information
  50 * needed to log buffers.  It tracks how many times the lock has been
  51 * locked, and which 128 byte chunks of the buffer are dirty.
  52 */
  53typedef struct xfs_buf_log_item {
  54        xfs_log_item_t          bli_item;       /* common item structure */
  55        struct xfs_buf          *bli_buf;       /* real buffer pointer */
  56        unsigned int            bli_flags;      /* misc flags */
  57        unsigned int            bli_recur;      /* lock recursion count */
  58        atomic_t                bli_refcount;   /* cnt of tp refs */
  59        int                     bli_format_count;       /* count of headers */
  60        struct xfs_buf_log_format *bli_formats; /* array of in-log header ptrs */
  61        struct xfs_buf_log_format __bli_format; /* embedded in-log header */
  62} xfs_buf_log_item_t;
  63
  64void    xfs_buf_item_init(struct xfs_buf *, struct xfs_mount *);
  65void    xfs_buf_item_relse(struct xfs_buf *);
  66void    xfs_buf_item_log(xfs_buf_log_item_t *, uint, uint);
  67uint    xfs_buf_item_dirty(xfs_buf_log_item_t *);
  68void    xfs_buf_attach_iodone(struct xfs_buf *,
  69                              void(*)(struct xfs_buf *, xfs_log_item_t *),
  70                              xfs_log_item_t *);
  71void    xfs_buf_iodone_callbacks(struct xfs_buf *);
  72void    xfs_buf_iodone(struct xfs_buf *, struct xfs_log_item *);
  73
  74extern kmem_zone_t      *xfs_buf_item_zone;
  75
  76#endif  /* __XFS_BUF_ITEM_H__ */
  77