root/fs/xfs/xfs_bmap_item.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. xfs_bui_log_item_sizeof

   1 // SPDX-License-Identifier: GPL-2.0+
   2 /*
   3  * Copyright (C) 2016 Oracle.  All Rights Reserved.
   4  * Author: Darrick J. Wong <darrick.wong@oracle.com>
   5  */
   6 #ifndef __XFS_BMAP_ITEM_H__
   7 #define __XFS_BMAP_ITEM_H__
   8 
   9 /*
  10  * There are (currently) two pairs of bmap btree redo item types: map & unmap.
  11  * The common abbreviations for these are BUI (bmap update intent) and BUD
  12  * (bmap update done).  The redo item type is encoded in the flags field of
  13  * each xfs_map_extent.
  14  *
  15  * *I items should be recorded in the *first* of a series of rolled
  16  * transactions, and the *D items should be recorded in the same transaction
  17  * that records the associated bmbt updates.
  18  *
  19  * Should the system crash after the commit of the first transaction but
  20  * before the commit of the final transaction in a series, log recovery will
  21  * use the redo information recorded by the intent items to replay the
  22  * bmbt metadata updates in the non-first transaction.
  23  */
  24 
  25 /* kernel only BUI/BUD definitions */
  26 
  27 struct xfs_mount;
  28 struct kmem_zone;
  29 
  30 /*
  31  * Max number of extents in fast allocation path.
  32  */
  33 #define XFS_BUI_MAX_FAST_EXTENTS        1
  34 
  35 /*
  36  * Define BUI flag bits. Manipulated by set/clear/test_bit operators.
  37  */
  38 #define XFS_BUI_RECOVERED               1
  39 
  40 /*
  41  * This is the "bmap update intent" log item.  It is used to log the fact that
  42  * some reverse mappings need to change.  It is used in conjunction with the
  43  * "bmap update done" log item described below.
  44  *
  45  * These log items follow the same rules as struct xfs_efi_log_item; see the
  46  * comments about that structure (in xfs_extfree_item.h) for more details.
  47  */
  48 struct xfs_bui_log_item {
  49         struct xfs_log_item             bui_item;
  50         atomic_t                        bui_refcount;
  51         atomic_t                        bui_next_extent;
  52         unsigned long                   bui_flags;      /* misc flags */
  53         struct xfs_bui_log_format       bui_format;
  54 };
  55 
  56 static inline size_t
  57 xfs_bui_log_item_sizeof(
  58         unsigned int            nr)
  59 {
  60         return offsetof(struct xfs_bui_log_item, bui_format) +
  61                         xfs_bui_log_format_sizeof(nr);
  62 }
  63 
  64 /*
  65  * This is the "bmap update done" log item.  It is used to log the fact that
  66  * some bmbt updates mentioned in an earlier bui item have been performed.
  67  */
  68 struct xfs_bud_log_item {
  69         struct xfs_log_item             bud_item;
  70         struct xfs_bui_log_item         *bud_buip;
  71         struct xfs_bud_log_format       bud_format;
  72 };
  73 
  74 extern struct kmem_zone *xfs_bui_zone;
  75 extern struct kmem_zone *xfs_bud_zone;
  76 
  77 struct xfs_bui_log_item *xfs_bui_init(struct xfs_mount *);
  78 void xfs_bui_item_free(struct xfs_bui_log_item *);
  79 void xfs_bui_release(struct xfs_bui_log_item *);
  80 int xfs_bui_recover(struct xfs_trans *parent_tp, struct xfs_bui_log_item *buip);
  81 
  82 #endif  /* __XFS_BMAP_ITEM_H__ */

/* [<][>][^][v][top][bottom][index][help] */