]>
Commit | Line | Data |
---|---|---|
2cb7cef9 BS |
1 | From: Joel Becker <joel.becker@oracle.com> |
2 | Subject: ocfs2: Change ocfs2_get_*_extent_tree() to ocfs2_init_*_extent_tree() | |
3 | Patch-mainline: 2.6.28? | |
4 | References: FATE302067 | |
5 | ||
6 | The original get/put_extent_tree() functions held a reference on | |
7 | et_root_bh. However, every single caller already has a safe reference, | |
8 | making the get/put cycle irrelevant. | |
9 | ||
10 | We change ocfs2_get_*_extent_tree() to ocfs2_init_*_extent_tree(). It | |
11 | no longer gets a reference on et_root_bh. ocfs2_put_extent_tree() is | |
12 | removed. Callers now have a simpler init+use pattern. | |
13 | ||
14 | Signed-off-by: Joel Becker <joel.becker@oracle.com> | |
15 | Acked-by: Mark Fasheh <mark.fasheh@suse.com> | |
16 | --- | |
17 | fs/ocfs2/alloc.c | 49 +++++++++++++++++++++---------------------------- | |
18 | fs/ocfs2/alloc.h | 26 ++++++++++++-------------- | |
19 | fs/ocfs2/aops.c | 6 ++---- | |
20 | fs/ocfs2/dir.c | 6 ++---- | |
21 | fs/ocfs2/file.c | 10 +++------- | |
22 | fs/ocfs2/xattr.c | 14 ++++---------- | |
23 | 6 files changed, 44 insertions(+), 67 deletions(-) | |
24 | ||
25 | --- a/fs/ocfs2/alloc.c | |
26 | +++ b/fs/ocfs2/alloc.c | |
27 | @@ -55,7 +55,7 @@ | |
28 | * | |
29 | * To implement an on-disk btree (extent tree) type in ocfs2, add | |
30 | * an ocfs2_extent_tree_operations structure and the matching | |
31 | - * ocfs2_get_<thingy>_extent_tree() function. That's pretty much it | |
32 | + * ocfs2_init_<thingy>_extent_tree() function. That's pretty much it | |
33 | * for the allocation portion of the extent tree. | |
34 | */ | |
35 | struct ocfs2_extent_tree_operations { | |
36 | @@ -301,14 +301,13 @@ static struct ocfs2_extent_tree_operatio | |
37 | .eo_fill_max_leaf_clusters = ocfs2_xattr_tree_fill_max_leaf_clusters, | |
38 | }; | |
39 | ||
40 | -static void __ocfs2_get_extent_tree(struct ocfs2_extent_tree *et, | |
41 | - struct inode *inode, | |
42 | - struct buffer_head *bh, | |
43 | - void *obj, | |
44 | - struct ocfs2_extent_tree_operations *ops) | |
45 | +static void __ocfs2_init_extent_tree(struct ocfs2_extent_tree *et, | |
46 | + struct inode *inode, | |
47 | + struct buffer_head *bh, | |
48 | + void *obj, | |
49 | + struct ocfs2_extent_tree_operations *ops) | |
50 | { | |
51 | et->et_ops = ops; | |
52 | - get_bh(bh); | |
53 | et->et_root_bh = bh; | |
54 | if (!obj) | |
55 | obj = (void *)bh->b_data; | |
56 | @@ -321,33 +320,28 @@ static void __ocfs2_get_extent_tree(stru | |
57 | et->et_ops->eo_fill_max_leaf_clusters(inode, et); | |
58 | } | |
59 | ||
60 | -void ocfs2_get_dinode_extent_tree(struct ocfs2_extent_tree *et, | |
61 | - struct inode *inode, | |
62 | - struct buffer_head *bh) | |
63 | -{ | |
64 | - __ocfs2_get_extent_tree(et, inode, bh, NULL, &ocfs2_dinode_et_ops); | |
65 | -} | |
66 | - | |
67 | -void ocfs2_get_xattr_tree_extent_tree(struct ocfs2_extent_tree *et, | |
68 | - struct inode *inode, | |
69 | - struct buffer_head *bh) | |
70 | +void ocfs2_init_dinode_extent_tree(struct ocfs2_extent_tree *et, | |
71 | + struct inode *inode, | |
72 | + struct buffer_head *bh) | |
73 | { | |
74 | - __ocfs2_get_extent_tree(et, inode, bh, NULL, | |
75 | - &ocfs2_xattr_tree_et_ops); | |
76 | + __ocfs2_init_extent_tree(et, inode, bh, NULL, &ocfs2_dinode_et_ops); | |
77 | } | |
78 | ||
79 | -void ocfs2_get_xattr_value_extent_tree(struct ocfs2_extent_tree *et, | |
80 | +void ocfs2_init_xattr_tree_extent_tree(struct ocfs2_extent_tree *et, | |
81 | struct inode *inode, | |
82 | - struct buffer_head *bh, | |
83 | - struct ocfs2_xattr_value_root *xv) | |
84 | + struct buffer_head *bh) | |
85 | { | |
86 | - __ocfs2_get_extent_tree(et, inode, bh, xv, | |
87 | - &ocfs2_xattr_value_et_ops); | |
88 | + __ocfs2_init_extent_tree(et, inode, bh, NULL, | |
89 | + &ocfs2_xattr_tree_et_ops); | |
90 | } | |
91 | ||
92 | -void ocfs2_put_extent_tree(struct ocfs2_extent_tree *et) | |
93 | +void ocfs2_init_xattr_value_extent_tree(struct ocfs2_extent_tree *et, | |
94 | + struct inode *inode, | |
95 | + struct buffer_head *bh, | |
96 | + struct ocfs2_xattr_value_root *xv) | |
97 | { | |
98 | - brelse(et->et_root_bh); | |
99 | + __ocfs2_init_extent_tree(et, inode, bh, xv, | |
100 | + &ocfs2_xattr_value_et_ops); | |
101 | } | |
102 | ||
103 | static inline void ocfs2_et_set_last_eb_blk(struct ocfs2_extent_tree *et, | |
104 | @@ -6800,10 +6794,9 @@ int ocfs2_convert_inline_data_to_extents | |
105 | * this proves to be false, we could always re-build | |
106 | * the in-inode data from our pages. | |
107 | */ | |
108 | - ocfs2_get_dinode_extent_tree(&et, inode, di_bh); | |
109 | + ocfs2_init_dinode_extent_tree(&et, inode, di_bh); | |
110 | ret = ocfs2_insert_extent(osb, handle, inode, &et, | |
111 | 0, block, 1, 0, NULL); | |
112 | - ocfs2_put_extent_tree(&et); | |
113 | if (ret) { | |
114 | mlog_errno(ret); | |
115 | goto out_commit; | |
116 | --- a/fs/ocfs2/alloc.h | |
117 | +++ b/fs/ocfs2/alloc.h | |
118 | @@ -41,7 +41,7 @@ | |
119 | * | |
120 | * ocfs2_extent_tree becomes the first-class object for extent tree | |
121 | * manipulation. Callers of the alloc.c code need to fill it via one of | |
122 | - * the ocfs2_get_*_extent_tree() operations below. | |
123 | + * the ocfs2_init_*_extent_tree() operations below. | |
124 | * | |
125 | * ocfs2_extent_tree contains info for the root of the b-tree, it must have a | |
126 | * root ocfs2_extent_list and a root_bh so that they can be used in the b-tree | |
127 | @@ -59,21 +59,19 @@ struct ocfs2_extent_tree { | |
128 | }; | |
129 | ||
130 | /* | |
131 | - * ocfs2_*_get_extent_tree() will fill an ocfs2_extent_tree from the | |
132 | - * specified object buffer. The bh is referenced until | |
133 | - * ocfs2_put_extent_tree(). | |
134 | + * ocfs2_init_*_extent_tree() will fill an ocfs2_extent_tree from the | |
135 | + * specified object buffer. | |
136 | */ | |
137 | -void ocfs2_get_dinode_extent_tree(struct ocfs2_extent_tree *et, | |
138 | - struct inode *inode, | |
139 | - struct buffer_head *bh); | |
140 | -void ocfs2_get_xattr_tree_extent_tree(struct ocfs2_extent_tree *et, | |
141 | - struct inode *inode, | |
142 | - struct buffer_head *bh); | |
143 | -void ocfs2_get_xattr_value_extent_tree(struct ocfs2_extent_tree *et, | |
144 | +void ocfs2_init_dinode_extent_tree(struct ocfs2_extent_tree *et, | |
145 | + struct inode *inode, | |
146 | + struct buffer_head *bh); | |
147 | +void ocfs2_init_xattr_tree_extent_tree(struct ocfs2_extent_tree *et, | |
148 | struct inode *inode, | |
149 | - struct buffer_head *bh, | |
150 | - struct ocfs2_xattr_value_root *xv); | |
151 | -void ocfs2_put_extent_tree(struct ocfs2_extent_tree *et); | |
152 | + struct buffer_head *bh); | |
153 | +void ocfs2_init_xattr_value_extent_tree(struct ocfs2_extent_tree *et, | |
154 | + struct inode *inode, | |
155 | + struct buffer_head *bh, | |
156 | + struct ocfs2_xattr_value_root *xv); | |
157 | ||
158 | struct ocfs2_alloc_context; | |
159 | int ocfs2_insert_extent(struct ocfs2_super *osb, | |
160 | --- a/fs/ocfs2/aops.c | |
161 | +++ b/fs/ocfs2/aops.c | |
162 | @@ -1277,11 +1277,10 @@ static int ocfs2_write_cluster(struct ad | |
163 | goto out; | |
164 | } | |
165 | } else if (unwritten) { | |
166 | - ocfs2_get_dinode_extent_tree(&et, inode, wc->w_di_bh); | |
167 | + ocfs2_init_dinode_extent_tree(&et, inode, wc->w_di_bh); | |
168 | ret = ocfs2_mark_extent_written(inode, &et, | |
169 | wc->w_handle, cpos, 1, phys, | |
170 | meta_ac, &wc->w_dealloc); | |
171 | - ocfs2_put_extent_tree(&et); | |
172 | if (ret < 0) { | |
173 | mlog_errno(ret); | |
174 | goto out; | |
175 | @@ -1722,11 +1721,10 @@ int ocfs2_write_begin_nolock(struct addr | |
176 | (long long)i_size_read(inode), le32_to_cpu(di->i_clusters), | |
177 | clusters_to_alloc, extents_to_split); | |
178 | ||
179 | - ocfs2_get_dinode_extent_tree(&et, inode, wc->w_di_bh); | |
180 | + ocfs2_init_dinode_extent_tree(&et, inode, wc->w_di_bh); | |
181 | ret = ocfs2_lock_allocators(inode, &et, | |
182 | clusters_to_alloc, extents_to_split, | |
183 | &data_ac, &meta_ac); | |
184 | - ocfs2_put_extent_tree(&et); | |
185 | if (ret) { | |
186 | mlog_errno(ret); | |
187 | goto out; | |
188 | --- a/fs/ocfs2/dir.c | |
189 | +++ b/fs/ocfs2/dir.c | |
190 | @@ -1194,7 +1194,7 @@ static int ocfs2_expand_inline_dir(struc | |
191 | handle_t *handle; | |
192 | struct ocfs2_extent_tree et; | |
193 | ||
194 | - ocfs2_get_dinode_extent_tree(&et, dir, di_bh); | |
195 | + ocfs2_init_dinode_extent_tree(&et, dir, di_bh); | |
196 | ||
197 | alloc = ocfs2_clusters_for_bytes(sb, bytes); | |
198 | ||
199 | @@ -1363,7 +1363,6 @@ out: | |
200 | ||
201 | brelse(dirdata_bh); | |
202 | ||
203 | - ocfs2_put_extent_tree(&et); | |
204 | return ret; | |
205 | } | |
206 | ||
207 | @@ -1485,9 +1484,8 @@ static int ocfs2_extend_dir(struct ocfs2 | |
208 | spin_lock(&OCFS2_I(dir)->ip_lock); | |
209 | if (dir_i_size == ocfs2_clusters_to_bytes(sb, OCFS2_I(dir)->ip_clusters)) { | |
210 | spin_unlock(&OCFS2_I(dir)->ip_lock); | |
211 | - ocfs2_get_dinode_extent_tree(&et, dir, parent_fe_bh); | |
212 | + ocfs2_init_dinode_extent_tree(&et, dir, parent_fe_bh); | |
213 | num_free_extents = ocfs2_num_free_extents(osb, dir, &et); | |
214 | - ocfs2_put_extent_tree(&et); | |
215 | if (num_free_extents < 0) { | |
216 | status = num_free_extents; | |
217 | mlog_errno(status); | |
218 | --- a/fs/ocfs2/file.c | |
219 | +++ b/fs/ocfs2/file.c | |
220 | @@ -512,12 +512,11 @@ int ocfs2_add_inode_data(struct ocfs2_su | |
221 | int ret; | |
222 | struct ocfs2_extent_tree et; | |
223 | ||
224 | - ocfs2_get_dinode_extent_tree(&et, inode, fe_bh); | |
225 | + ocfs2_init_dinode_extent_tree(&et, inode, fe_bh); | |
226 | ret = ocfs2_add_clusters_in_btree(osb, inode, logical_offset, | |
227 | clusters_to_add, mark_unwritten, | |
228 | &et, handle, | |
229 | data_ac, meta_ac, reason_ret); | |
230 | - ocfs2_put_extent_tree(&et); | |
231 | ||
232 | return ret; | |
233 | } | |
234 | @@ -568,10 +567,9 @@ restart_all: | |
235 | (unsigned long long)OCFS2_I(inode)->ip_blkno, | |
236 | (long long)i_size_read(inode), le32_to_cpu(fe->i_clusters), | |
237 | clusters_to_add); | |
238 | - ocfs2_get_dinode_extent_tree(&et, inode, bh); | |
239 | + ocfs2_init_dinode_extent_tree(&et, inode, bh); | |
240 | status = ocfs2_lock_allocators(inode, &et, clusters_to_add, 0, | |
241 | &data_ac, &meta_ac); | |
242 | - ocfs2_put_extent_tree(&et); | |
243 | if (status) { | |
244 | mlog_errno(status); | |
245 | goto leave; | |
246 | @@ -1243,11 +1241,10 @@ static int __ocfs2_remove_inode_range(st | |
247 | struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data; | |
248 | struct ocfs2_extent_tree et; | |
249 | ||
250 | - ocfs2_get_dinode_extent_tree(&et, inode, di_bh); | |
251 | + ocfs2_init_dinode_extent_tree(&et, inode, di_bh); | |
252 | ||
253 | ret = ocfs2_lock_allocators(inode, &et, 0, 1, NULL, &meta_ac); | |
254 | if (ret) { | |
255 | - ocfs2_put_extent_tree(&et); | |
256 | mlog_errno(ret); | |
257 | return ret; | |
258 | } | |
259 | @@ -1304,7 +1301,6 @@ out: | |
260 | if (meta_ac) | |
261 | ocfs2_free_alloc_context(meta_ac); | |
262 | ||
263 | - ocfs2_put_extent_tree(&et); | |
264 | return ret; | |
265 | } | |
266 | ||
267 | --- a/fs/ocfs2/xattr.c | |
268 | +++ b/fs/ocfs2/xattr.c | |
269 | @@ -227,7 +227,7 @@ static int ocfs2_xattr_extend_allocation | |
270 | ||
271 | mlog(0, "(clusters_to_add for xattr= %u)\n", clusters_to_add); | |
272 | ||
273 | - ocfs2_get_xattr_value_extent_tree(&et, inode, xattr_bh, xv); | |
274 | + ocfs2_init_xattr_value_extent_tree(&et, inode, xattr_bh, xv); | |
275 | ||
276 | restart_all: | |
277 | ||
278 | @@ -323,7 +323,6 @@ leave: | |
279 | goto restart_all; | |
280 | } | |
281 | ||
282 | - ocfs2_put_extent_tree(&et); | |
283 | return status; | |
284 | } | |
285 | ||
286 | @@ -341,11 +340,10 @@ static int __ocfs2_remove_xattr_range(st | |
287 | struct ocfs2_alloc_context *meta_ac = NULL; | |
288 | struct ocfs2_extent_tree et; | |
289 | ||
290 | - ocfs2_get_xattr_value_extent_tree(&et, inode, root_bh, xv); | |
291 | + ocfs2_init_xattr_value_extent_tree(&et, inode, root_bh, xv); | |
292 | ||
293 | ret = ocfs2_lock_allocators(inode, &et, 0, 1, NULL, &meta_ac); | |
294 | if (ret) { | |
295 | - ocfs2_put_extent_tree(&et); | |
296 | mlog_errno(ret); | |
297 | return ret; | |
298 | } | |
299 | @@ -401,7 +399,6 @@ out: | |
300 | if (meta_ac) | |
301 | ocfs2_free_alloc_context(meta_ac); | |
302 | ||
303 | - ocfs2_put_extent_tree(&et); | |
304 | return ret; | |
305 | } | |
306 | ||
307 | @@ -3648,7 +3645,7 @@ static int ocfs2_add_new_xattr_cluster(s | |
308 | (unsigned long long)OCFS2_I(inode)->ip_blkno, | |
309 | prev_cpos, prev_blkno); | |
310 | ||
311 | - ocfs2_get_xattr_tree_extent_tree(&et, inode, root_bh); | |
312 | + ocfs2_init_xattr_tree_extent_tree(&et, inode, root_bh); | |
313 | ||
314 | ret = ocfs2_lock_allocators(inode, &et, clusters_to_add, 0, | |
315 | &data_ac, &meta_ac); | |
316 | @@ -3743,7 +3740,6 @@ leave: | |
317 | if (meta_ac) | |
318 | ocfs2_free_alloc_context(meta_ac); | |
319 | ||
320 | - ocfs2_put_extent_tree(&et); | |
321 | return ret; | |
322 | } | |
323 | ||
324 | @@ -4352,7 +4348,7 @@ static int ocfs2_rm_xattr_cluster(struct | |
325 | struct ocfs2_cached_dealloc_ctxt dealloc; | |
326 | struct ocfs2_extent_tree et; | |
327 | ||
328 | - ocfs2_get_xattr_tree_extent_tree(&et, inode, root_bh); | |
329 | + ocfs2_init_xattr_tree_extent_tree(&et, inode, root_bh); | |
330 | ||
331 | ocfs2_init_dealloc_ctxt(&dealloc); | |
332 | ||
333 | @@ -4363,7 +4359,6 @@ static int ocfs2_rm_xattr_cluster(struct | |
334 | ||
335 | ret = ocfs2_lock_allocators(inode, &et, 0, 1, NULL, &meta_ac); | |
336 | if (ret) { | |
337 | - ocfs2_put_extent_tree(&et); | |
338 | mlog_errno(ret); | |
339 | return ret; | |
340 | } | |
341 | @@ -4423,7 +4418,6 @@ out: | |
342 | ||
343 | ocfs2_run_deallocs(osb, &dealloc); | |
344 | ||
345 | - ocfs2_put_extent_tree(&et); | |
346 | return ret; | |
347 | } | |
348 |