Blame view

fs/xfs/xfs_extent_busy.h 2.5 KB
efc27b525   Dave Chinner   xfs: move busy ex...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  /*
   * Copyright (c) 2000-2002,2005 Silicon Graphics, Inc.
   * Copyright (c) 2010 David Chinner.
   * Copyright (c) 2011 Christoph Hellwig.
   * All Rights Reserved.
   *
   * This program is free software; you can redistribute it and/or
   * modify it under the terms of the GNU General Public License as
   * published by the Free Software Foundation.
   *
   * This program is distributed in the hope that it would be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
   *
   * You should have received a copy of the GNU General Public License
   * along with this program; if not, write the Free Software Foundation,
   * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
   */
  #ifndef __XFS_EXTENT_BUSY_H__
  #define	__XFS_EXTENT_BUSY_H__
a4fbe6ab1   Dave Chinner   xfs: decouple ino...
22
23
24
  struct xfs_mount;
  struct xfs_trans;
  struct xfs_alloc_arg;
efc27b525   Dave Chinner   xfs: move busy ex...
25
26
27
28
29
30
31
  /*
   * Busy block/extent entry.  Indexed by a rbtree in perag to mark blocks that
   * have been freed but whose transactions aren't committed to disk yet.
   *
   * Note that we use the transaction ID to record the transaction, not the
   * transaction structure itself. See xfs_extent_busy_insert() for details.
   */
4ecbfe637   Dave Chinner   xfs: clean up bus...
32
  struct xfs_extent_busy {
efc27b525   Dave Chinner   xfs: move busy ex...
33
34
35
36
37
38
  	struct rb_node	rb_node;	/* ag by-bno indexed search tree */
  	struct list_head list;		/* transaction busy extent list */
  	xfs_agnumber_t	agno;
  	xfs_agblock_t	bno;
  	xfs_extlen_t	length;
  	unsigned int	flags;
4ecbfe637   Dave Chinner   xfs: clean up bus...
39
40
  #define XFS_EXTENT_BUSY_DISCARDED	0x01	/* undergoing a discard op. */
  #define XFS_EXTENT_BUSY_SKIP_DISCARD	0x02	/* do not discard */
efc27b525   Dave Chinner   xfs: move busy ex...
41
42
43
  };
  
  void
4ecbfe637   Dave Chinner   xfs: clean up bus...
44
  xfs_extent_busy_insert(struct xfs_trans *tp, xfs_agnumber_t agno,
efc27b525   Dave Chinner   xfs: move busy ex...
45
46
47
  	xfs_agblock_t bno, xfs_extlen_t len, unsigned int flags);
  
  void
4ecbfe637   Dave Chinner   xfs: clean up bus...
48
  xfs_extent_busy_clear(struct xfs_mount *mp, struct list_head *list,
efc27b525   Dave Chinner   xfs: move busy ex...
49
50
51
  	bool do_discard);
  
  int
4ecbfe637   Dave Chinner   xfs: clean up bus...
52
  xfs_extent_busy_search(struct xfs_mount *mp, xfs_agnumber_t agno,
efc27b525   Dave Chinner   xfs: move busy ex...
53
54
55
  	xfs_agblock_t bno, xfs_extlen_t len);
  
  void
4ecbfe637   Dave Chinner   xfs: clean up bus...
56
  xfs_extent_busy_reuse(struct xfs_mount *mp, xfs_agnumber_t agno,
efc27b525   Dave Chinner   xfs: move busy ex...
57
  	xfs_agblock_t fbno, xfs_extlen_t flen, bool userdata);
ebf558726   Christoph Hellwig   xfs: improve hand...
58
59
60
61
62
63
64
  bool
  xfs_extent_busy_trim(struct xfs_alloc_arg *args, xfs_agblock_t *bno,
  		xfs_extlen_t *len, unsigned *busy_gen);
  
  void
  xfs_extent_busy_flush(struct xfs_mount *mp, struct xfs_perag *pag,
  	unsigned busy_gen);
e700a06c7   Ben Myers   xfs: make xfs_ext...
65
  void
ebf558726   Christoph Hellwig   xfs: improve hand...
66
  xfs_extent_busy_wait_all(struct xfs_mount *mp);
e700a06c7   Ben Myers   xfs: make xfs_ext...
67

efc27b525   Dave Chinner   xfs: move busy ex...
68
  int
4ecbfe637   Dave Chinner   xfs: clean up bus...
69
  xfs_extent_busy_ag_cmp(void *priv, struct list_head *a, struct list_head *b);
efc27b525   Dave Chinner   xfs: move busy ex...
70

4ecbfe637   Dave Chinner   xfs: clean up bus...
71
  static inline void xfs_extent_busy_sort(struct list_head *list)
efc27b525   Dave Chinner   xfs: move busy ex...
72
  {
4ecbfe637   Dave Chinner   xfs: clean up bus...
73
  	list_sort(NULL, list, xfs_extent_busy_ag_cmp);
efc27b525   Dave Chinner   xfs: move busy ex...
74
75
76
  }
  
  #endif /* __XFS_EXTENT_BUSY_H__ */