diff options
Diffstat (limited to 'fs/xfs/xfs_extent_busy.h')
-rw-r--r-- | fs/xfs/xfs_extent_busy.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/fs/xfs/xfs_extent_busy.h b/fs/xfs/xfs_extent_busy.h new file mode 100644 index 00000000000..671b501f13e --- /dev/null +++ b/fs/xfs/xfs_extent_busy.h | |||
@@ -0,0 +1,65 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2000-2002,2005 Silicon Graphics, Inc. | ||
3 | * Copyright (c) 2010 David Chinner. | ||
4 | * Copyright (c) 2011 Christoph Hellwig. | ||
5 | * All Rights Reserved. | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or | ||
8 | * modify it under the terms of the GNU General Public License as | ||
9 | * published by the Free Software Foundation. | ||
10 | * | ||
11 | * This program is distributed in the hope that it would be useful, | ||
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | * GNU General Public License for more details. | ||
15 | * | ||
16 | * You should have received a copy of the GNU General Public License | ||
17 | * along with this program; if not, write the Free Software Foundation, | ||
18 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
19 | */ | ||
20 | #ifndef __XFS_EXTENT_BUSY_H__ | ||
21 | #define __XFS_EXTENT_BUSY_H__ | ||
22 | |||
23 | /* | ||
24 | * Busy block/extent entry. Indexed by a rbtree in perag to mark blocks that | ||
25 | * have been freed but whose transactions aren't committed to disk yet. | ||
26 | * | ||
27 | * Note that we use the transaction ID to record the transaction, not the | ||
28 | * transaction structure itself. See xfs_extent_busy_insert() for details. | ||
29 | */ | ||
30 | struct xfs_busy_extent { | ||
31 | struct rb_node rb_node; /* ag by-bno indexed search tree */ | ||
32 | struct list_head list; /* transaction busy extent list */ | ||
33 | xfs_agnumber_t agno; | ||
34 | xfs_agblock_t bno; | ||
35 | xfs_extlen_t length; | ||
36 | unsigned int flags; | ||
37 | #define XFS_ALLOC_BUSY_DISCARDED 0x01 /* undergoing a discard op. */ | ||
38 | #define XFS_ALLOC_BUSY_SKIP_DISCARD 0x02 /* do not discard */ | ||
39 | }; | ||
40 | |||
41 | void | ||
42 | xfs_alloc_busy_insert(struct xfs_trans *tp, xfs_agnumber_t agno, | ||
43 | xfs_agblock_t bno, xfs_extlen_t len, unsigned int flags); | ||
44 | |||
45 | void | ||
46 | xfs_alloc_busy_clear(struct xfs_mount *mp, struct list_head *list, | ||
47 | bool do_discard); | ||
48 | |||
49 | int | ||
50 | xfs_alloc_busy_search(struct xfs_mount *mp, xfs_agnumber_t agno, | ||
51 | xfs_agblock_t bno, xfs_extlen_t len); | ||
52 | |||
53 | void | ||
54 | xfs_alloc_busy_reuse(struct xfs_mount *mp, xfs_agnumber_t agno, | ||
55 | xfs_agblock_t fbno, xfs_extlen_t flen, bool userdata); | ||
56 | |||
57 | int | ||
58 | xfs_alloc_busy_ag_cmp(void *priv, struct list_head *a, struct list_head *b); | ||
59 | |||
60 | static inline void xfs_alloc_busy_sort(struct list_head *list) | ||
61 | { | ||
62 | list_sort(NULL, list, xfs_alloc_busy_ag_cmp); | ||
63 | } | ||
64 | |||
65 | #endif /* __XFS_EXTENT_BUSY_H__ */ | ||