root/fs/xfs/xfs_refcount_item.h

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

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. xfs_cui_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_REFCOUNT_ITEM_H__
   7 #define __XFS_REFCOUNT_ITEM_H__
   8 
   9 /*
  10  * There are (currently) two pairs of refcount btree redo item types:
  11  * increase and decrease.  The log items for these are CUI (refcount
  12  * update intent) and CUD (refcount update done).  The redo item type
  13  * is encoded in the flags field of 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
  17  * transaction that records the associated refcountbt updates.
  18  *
  19  * Should the system crash after the commit of the first transaction
  20  * but before the commit of the final transaction in a series, log
  21  * recovery will use the redo information recorded by the intent items
  22  * to replay the refcountbt metadata updates.
  23  */
  24 
  25 /* kernel only CUI/CUD 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_CUI_MAX_FAST_EXTENTS        16
  34 
  35 /*
  36  * Define CUI flag bits. Manipulated by set/clear/test_bit operators.
  37  */
  38 #define XFS_CUI_RECOVERED               1
  39 
  40 /*
  41  * This is the "refcount update intent" log item.  It is used to log
  42  * the fact that some reverse mappings need to change.  It is used in
  43  * conjunction with the "refcount update done" log item described
  44  * below.
  45  *
  46  * These log items follow the same rules as struct xfs_efi_log_item;
  47  * see the comments about that structure (in xfs_extfree_item.h) for
  48  * more details.
  49  */
  50 struct xfs_cui_log_item {
  51         struct xfs_log_item             cui_item;
  52         atomic_t                        cui_refcount;
  53         atomic_t                        cui_next_extent;
  54         unsigned long                   cui_flags;      /* misc flags */
  55         struct xfs_cui_log_format       cui_format;
  56 };
  57 
  58 static inline size_t
  59 xfs_cui_log_item_sizeof(
  60         unsigned int            nr)
  61 {
  62         return offsetof(struct xfs_cui_log_item, cui_format) +
  63                         xfs_cui_log_format_sizeof(nr);
  64 }
  65 
  66 /*
  67  * This is the "refcount update done" log item.  It is used to log the
  68  * fact that some refcountbt updates mentioned in an earlier cui item
  69  * have been performed.
  70  */
  71 struct xfs_cud_log_item {
  72         struct xfs_log_item             cud_item;
  73         struct xfs_cui_log_item         *cud_cuip;
  74         struct xfs_cud_log_format       cud_format;
  75 };
  76 
  77 extern struct kmem_zone *xfs_cui_zone;
  78 extern struct kmem_zone *xfs_cud_zone;
  79 
  80 struct xfs_cui_log_item *xfs_cui_init(struct xfs_mount *, uint);
  81 void xfs_cui_item_free(struct xfs_cui_log_item *);
  82 void xfs_cui_release(struct xfs_cui_log_item *);
  83 int xfs_cui_recover(struct xfs_trans *parent_tp, struct xfs_cui_log_item *cuip);
  84 
  85 #endif  /* __XFS_REFCOUNT_ITEM_H__ */

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