linux/fs/xfs/xfs_buf_item.h
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Copyright (c) 2000-2001,2005 Silicon Graphics, Inc.
   4 * All Rights Reserved.
   5 */
   6#ifndef __XFS_BUF_ITEM_H__
   7#define __XFS_BUF_ITEM_H__
   8
   9/* kernel only definitions */
  10
  11/* buf log item flags */
  12#define XFS_BLI_HOLD            0x01
  13#define XFS_BLI_DIRTY           0x02
  14#define XFS_BLI_STALE           0x04
  15#define XFS_BLI_LOGGED          0x08
  16#define XFS_BLI_INODE_ALLOC_BUF 0x10
  17#define XFS_BLI_STALE_INODE     0x20
  18#define XFS_BLI_INODE_BUF       0x40
  19#define XFS_BLI_ORDERED         0x80
  20
  21#define XFS_BLI_FLAGS \
  22        { XFS_BLI_HOLD,         "HOLD" }, \
  23        { XFS_BLI_DIRTY,        "DIRTY" }, \
  24        { XFS_BLI_STALE,        "STALE" }, \
  25        { XFS_BLI_LOGGED,       "LOGGED" }, \
  26        { XFS_BLI_INODE_ALLOC_BUF, "INODE_ALLOC" }, \
  27        { XFS_BLI_STALE_INODE,  "STALE_INODE" }, \
  28        { XFS_BLI_INODE_BUF,    "INODE_BUF" }, \
  29        { XFS_BLI_ORDERED,      "ORDERED" }
  30
  31
  32struct xfs_buf;
  33struct xfs_mount;
  34struct xfs_buf_log_item;
  35
  36/*
  37 * This is the in core log item structure used to track information
  38 * needed to log buffers.  It tracks how many times the lock has been
  39 * locked, and which 128 byte chunks of the buffer are dirty.
  40 */
  41struct xfs_buf_log_item {
  42        struct xfs_log_item     bli_item;       /* common item structure */
  43        struct xfs_buf          *bli_buf;       /* real buffer pointer */
  44        unsigned int            bli_flags;      /* misc flags */
  45        unsigned int            bli_recur;      /* lock recursion count */
  46        atomic_t                bli_refcount;   /* cnt of tp refs */
  47        int                     bli_format_count;       /* count of headers */
  48        struct xfs_buf_log_format *bli_formats; /* array of in-log header ptrs */
  49        struct xfs_buf_log_format __bli_format; /* embedded in-log header */
  50};
  51
  52int     xfs_buf_item_init(struct xfs_buf *, struct xfs_mount *);
  53void    xfs_buf_item_done(struct xfs_buf *bp);
  54void    xfs_buf_item_relse(struct xfs_buf *);
  55bool    xfs_buf_item_put(struct xfs_buf_log_item *);
  56void    xfs_buf_item_log(struct xfs_buf_log_item *, uint, uint);
  57bool    xfs_buf_item_dirty_format(struct xfs_buf_log_item *);
  58void    xfs_buf_inode_iodone(struct xfs_buf *);
  59void    xfs_buf_inode_io_fail(struct xfs_buf *bp);
  60#ifdef CONFIG_XFS_QUOTA
  61void    xfs_buf_dquot_iodone(struct xfs_buf *);
  62void    xfs_buf_dquot_io_fail(struct xfs_buf *bp);
  63#else
  64static inline void xfs_buf_dquot_iodone(struct xfs_buf *bp)
  65{
  66}
  67static inline void xfs_buf_dquot_io_fail(struct xfs_buf *bp)
  68{
  69}
  70#endif /* CONFIG_XFS_QUOTA */
  71void    xfs_buf_iodone(struct xfs_buf *);
  72bool    xfs_buf_log_check_iovec(struct xfs_log_iovec *iovec);
  73
  74extern kmem_zone_t      *xfs_buf_item_zone;
  75
  76#endif  /* __XFS_BUF_ITEM_H__ */
  77