root/fs/xfs/xfs_extent_busy.h

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

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. xfs_extent_busy_sort

   1 // SPDX-License-Identifier: GPL-2.0
   2 /*
   3  * Copyright (c) 2000-2002,2005 Silicon Graphics, Inc.
   4  * Copyright (c) 2010 David Chinner.
   5  * Copyright (c) 2011 Christoph Hellwig.
   6  * All Rights Reserved.
   7  */
   8 #ifndef __XFS_EXTENT_BUSY_H__
   9 #define __XFS_EXTENT_BUSY_H__
  10 
  11 struct xfs_mount;
  12 struct xfs_trans;
  13 struct xfs_alloc_arg;
  14 
  15 /*
  16  * Busy block/extent entry.  Indexed by a rbtree in perag to mark blocks that
  17  * have been freed but whose transactions aren't committed to disk yet.
  18  *
  19  * Note that we use the transaction ID to record the transaction, not the
  20  * transaction structure itself. See xfs_extent_busy_insert() for details.
  21  */
  22 struct xfs_extent_busy {
  23         struct rb_node  rb_node;        /* ag by-bno indexed search tree */
  24         struct list_head list;          /* transaction busy extent list */
  25         xfs_agnumber_t  agno;
  26         xfs_agblock_t   bno;
  27         xfs_extlen_t    length;
  28         unsigned int    flags;
  29 #define XFS_EXTENT_BUSY_DISCARDED       0x01    /* undergoing a discard op. */
  30 #define XFS_EXTENT_BUSY_SKIP_DISCARD    0x02    /* do not discard */
  31 };
  32 
  33 void
  34 xfs_extent_busy_insert(struct xfs_trans *tp, xfs_agnumber_t agno,
  35         xfs_agblock_t bno, xfs_extlen_t len, unsigned int flags);
  36 
  37 void
  38 xfs_extent_busy_clear(struct xfs_mount *mp, struct list_head *list,
  39         bool do_discard);
  40 
  41 int
  42 xfs_extent_busy_search(struct xfs_mount *mp, xfs_agnumber_t agno,
  43         xfs_agblock_t bno, xfs_extlen_t len);
  44 
  45 void
  46 xfs_extent_busy_reuse(struct xfs_mount *mp, xfs_agnumber_t agno,
  47         xfs_agblock_t fbno, xfs_extlen_t flen, bool userdata);
  48 
  49 bool
  50 xfs_extent_busy_trim(struct xfs_alloc_arg *args, xfs_agblock_t *bno,
  51                 xfs_extlen_t *len, unsigned *busy_gen);
  52 
  53 void
  54 xfs_extent_busy_flush(struct xfs_mount *mp, struct xfs_perag *pag,
  55         unsigned busy_gen);
  56 
  57 void
  58 xfs_extent_busy_wait_all(struct xfs_mount *mp);
  59 
  60 int
  61 xfs_extent_busy_ag_cmp(void *priv, struct list_head *a, struct list_head *b);
  62 
  63 static inline void xfs_extent_busy_sort(struct list_head *list)
  64 {
  65         list_sort(NULL, list, xfs_extent_busy_ag_cmp);
  66 }
  67 
  68 #endif /* __XFS_EXTENT_BUSY_H__ */

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