Root/
1 | /* |
2 | * Copyright (c) 2000,2005 Silicon Graphics, Inc. |
3 | * All Rights Reserved. |
4 | * |
5 | * This program is free software; you can redistribute it and/or |
6 | * modify it under the terms of the GNU General Public License as |
7 | * published by the Free Software Foundation. |
8 | * |
9 | * This program is distributed in the hope that it would be useful, |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 | * GNU General Public License for more details. |
13 | * |
14 | * You should have received a copy of the GNU General Public License |
15 | * along with this program; if not, write the Free Software Foundation, |
16 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
17 | */ |
18 | #ifndef __XFS_EXTFREE_ITEM_H__ |
19 | #define __XFS_EXTFREE_ITEM_H__ |
20 | |
21 | struct xfs_mount; |
22 | struct kmem_zone; |
23 | |
24 | typedef struct xfs_extent { |
25 | xfs_dfsbno_t ext_start; |
26 | xfs_extlen_t ext_len; |
27 | } xfs_extent_t; |
28 | |
29 | /* |
30 | * Since an xfs_extent_t has types (start:64, len: 32) |
31 | * there are different alignments on 32 bit and 64 bit kernels. |
32 | * So we provide the different variants for use by a |
33 | * conversion routine. |
34 | */ |
35 | |
36 | typedef struct xfs_extent_32 { |
37 | __uint64_t ext_start; |
38 | __uint32_t ext_len; |
39 | } __attribute__((packed)) xfs_extent_32_t; |
40 | |
41 | typedef struct xfs_extent_64 { |
42 | __uint64_t ext_start; |
43 | __uint32_t ext_len; |
44 | __uint32_t ext_pad; |
45 | } xfs_extent_64_t; |
46 | |
47 | /* |
48 | * This is the structure used to lay out an efi log item in the |
49 | * log. The efi_extents field is a variable size array whose |
50 | * size is given by efi_nextents. |
51 | */ |
52 | typedef struct xfs_efi_log_format { |
53 | __uint16_t efi_type; /* efi log item type */ |
54 | __uint16_t efi_size; /* size of this item */ |
55 | __uint32_t efi_nextents; /* # extents to free */ |
56 | __uint64_t efi_id; /* efi identifier */ |
57 | xfs_extent_t efi_extents[1]; /* array of extents to free */ |
58 | } xfs_efi_log_format_t; |
59 | |
60 | typedef struct xfs_efi_log_format_32 { |
61 | __uint16_t efi_type; /* efi log item type */ |
62 | __uint16_t efi_size; /* size of this item */ |
63 | __uint32_t efi_nextents; /* # extents to free */ |
64 | __uint64_t efi_id; /* efi identifier */ |
65 | xfs_extent_32_t efi_extents[1]; /* array of extents to free */ |
66 | } __attribute__((packed)) xfs_efi_log_format_32_t; |
67 | |
68 | typedef struct xfs_efi_log_format_64 { |
69 | __uint16_t efi_type; /* efi log item type */ |
70 | __uint16_t efi_size; /* size of this item */ |
71 | __uint32_t efi_nextents; /* # extents to free */ |
72 | __uint64_t efi_id; /* efi identifier */ |
73 | xfs_extent_64_t efi_extents[1]; /* array of extents to free */ |
74 | } xfs_efi_log_format_64_t; |
75 | |
76 | /* |
77 | * This is the structure used to lay out an efd log item in the |
78 | * log. The efd_extents array is a variable size array whose |
79 | * size is given by efd_nextents; |
80 | */ |
81 | typedef struct xfs_efd_log_format { |
82 | __uint16_t efd_type; /* efd log item type */ |
83 | __uint16_t efd_size; /* size of this item */ |
84 | __uint32_t efd_nextents; /* # of extents freed */ |
85 | __uint64_t efd_efi_id; /* id of corresponding efi */ |
86 | xfs_extent_t efd_extents[1]; /* array of extents freed */ |
87 | } xfs_efd_log_format_t; |
88 | |
89 | typedef struct xfs_efd_log_format_32 { |
90 | __uint16_t efd_type; /* efd log item type */ |
91 | __uint16_t efd_size; /* size of this item */ |
92 | __uint32_t efd_nextents; /* # of extents freed */ |
93 | __uint64_t efd_efi_id; /* id of corresponding efi */ |
94 | xfs_extent_32_t efd_extents[1]; /* array of extents freed */ |
95 | } __attribute__((packed)) xfs_efd_log_format_32_t; |
96 | |
97 | typedef struct xfs_efd_log_format_64 { |
98 | __uint16_t efd_type; /* efd log item type */ |
99 | __uint16_t efd_size; /* size of this item */ |
100 | __uint32_t efd_nextents; /* # of extents freed */ |
101 | __uint64_t efd_efi_id; /* id of corresponding efi */ |
102 | xfs_extent_64_t efd_extents[1]; /* array of extents freed */ |
103 | } xfs_efd_log_format_64_t; |
104 | |
105 | |
106 | #ifdef __KERNEL__ |
107 | |
108 | /* |
109 | * Max number of extents in fast allocation path. |
110 | */ |
111 | #define XFS_EFI_MAX_FAST_EXTENTS 16 |
112 | |
113 | /* |
114 | * Define EFI flag bits. Manipulated by set/clear/test_bit operators. |
115 | */ |
116 | #define XFS_EFI_RECOVERED 1 |
117 | #define XFS_EFI_COMMITTED 2 |
118 | |
119 | /* |
120 | * This is the "extent free intention" log item. It is used |
121 | * to log the fact that some extents need to be free. It is |
122 | * used in conjunction with the "extent free done" log item |
123 | * described below. |
124 | */ |
125 | typedef struct xfs_efi_log_item { |
126 | xfs_log_item_t efi_item; |
127 | atomic_t efi_next_extent; |
128 | unsigned long efi_flags; /* misc flags */ |
129 | xfs_efi_log_format_t efi_format; |
130 | } xfs_efi_log_item_t; |
131 | |
132 | /* |
133 | * This is the "extent free done" log item. It is used to log |
134 | * the fact that some extents earlier mentioned in an efi item |
135 | * have been freed. |
136 | */ |
137 | typedef struct xfs_efd_log_item { |
138 | xfs_log_item_t efd_item; |
139 | xfs_efi_log_item_t *efd_efip; |
140 | uint efd_next_extent; |
141 | xfs_efd_log_format_t efd_format; |
142 | } xfs_efd_log_item_t; |
143 | |
144 | /* |
145 | * Max number of extents in fast allocation path. |
146 | */ |
147 | #define XFS_EFD_MAX_FAST_EXTENTS 16 |
148 | |
149 | extern struct kmem_zone *xfs_efi_zone; |
150 | extern struct kmem_zone *xfs_efd_zone; |
151 | |
152 | xfs_efi_log_item_t *xfs_efi_init(struct xfs_mount *, uint); |
153 | xfs_efd_log_item_t *xfs_efd_init(struct xfs_mount *, xfs_efi_log_item_t *, |
154 | uint); |
155 | int xfs_efi_copy_format(xfs_log_iovec_t *buf, |
156 | xfs_efi_log_format_t *dst_efi_fmt); |
157 | void xfs_efi_item_free(xfs_efi_log_item_t *); |
158 | |
159 | #endif /* __KERNEL__ */ |
160 | |
161 | #endif /* __XFS_EXTFREE_ITEM_H__ */ |
162 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9