]>
Commit | Line | Data |
---|---|---|
8f69975d BS |
1 | From: Jeff Mahoney <jeffm@suse.com> |
2 | Subject: [PATCH 31/40] reiserfs: factor out buffer_info initialization | |
3 | ||
4 | This is the first in a series of patches to make balance_leaf() not quite | |
5 | so insane. | |
6 | ||
7 | This patch factors out the open coded initializations of buffer_info | |
8 | structures and defines a few initializers for the 4 cases they're used. | |
9 | ||
10 | Signed-off-by: Jeff Mahoney <jeffm@suse.com> | |
11 | ||
12 | --- | |
13 | fs/reiserfs/do_balan.c | 175 ++++++++++++++++--------------------------------- | |
14 | 1 file changed, 60 insertions(+), 115 deletions(-) | |
15 | ||
16 | --- a/fs/reiserfs/do_balan.c | |
17 | +++ b/fs/reiserfs/do_balan.c | |
18 | @@ -29,6 +29,43 @@ struct tree_balance *cur_tb = NULL; /* d | |
19 | is interrupting do_balance */ | |
20 | #endif | |
21 | ||
22 | +static inline void buffer_info_init_left(struct tree_balance *tb, | |
23 | + struct buffer_info *bi) | |
24 | +{ | |
25 | + bi->tb = tb; | |
26 | + bi->bi_bh = tb->L[0]; | |
27 | + bi->bi_parent = tb->FL[0]; | |
28 | + bi->bi_position = get_left_neighbor_position(tb, 0); | |
29 | +} | |
30 | + | |
31 | +static inline void buffer_info_init_right(struct tree_balance *tb, | |
32 | + struct buffer_info *bi) | |
33 | +{ | |
34 | + bi->tb = tb; | |
35 | + bi->bi_bh = tb->R[0]; | |
36 | + bi->bi_parent = tb->FR[0]; | |
37 | + bi->bi_position = get_right_neighbor_position(tb, 0); | |
38 | +} | |
39 | + | |
40 | +static inline void buffer_info_init_tbS0(struct tree_balance *tb, | |
41 | + struct buffer_info *bi) | |
42 | +{ | |
43 | + bi->tb = tb; | |
44 | + bi->bi_bh = PATH_PLAST_BUFFER(tb->tb_path); | |
45 | + bi->bi_parent = PATH_H_PPARENT(tb->tb_path, 0); | |
46 | + bi->bi_position = PATH_H_POSITION(tb->tb_path, 1); | |
47 | +} | |
48 | + | |
49 | +static inline void buffer_info_init_bh(struct tree_balance *tb, | |
50 | + struct buffer_info *bi, | |
51 | + struct buffer_head *bh) | |
52 | +{ | |
53 | + bi->tb = tb; | |
54 | + bi->bi_bh = bh; | |
55 | + bi->bi_parent = NULL; | |
56 | + bi->bi_position = 0; | |
57 | +} | |
58 | + | |
59 | inline void do_balance_mark_leaf_dirty(struct tree_balance *tb, | |
60 | struct buffer_head *bh, int flag) | |
61 | { | |
62 | @@ -86,6 +123,7 @@ static int balance_leaf_when_delete(stru | |
63 | "PAP-12010: tree can not be empty"); | |
64 | ||
65 | ih = B_N_PITEM_HEAD(tbS0, item_pos); | |
66 | + buffer_info_init_tbS0(tb, &bi); | |
67 | ||
68 | /* Delete or truncate the item */ | |
69 | ||
70 | @@ -96,10 +134,6 @@ static int balance_leaf_when_delete(stru | |
71 | "vs-12013: mode Delete, insert size %d, ih to be deleted %h", | |
72 | -tb->insert_size[0], ih); | |
73 | ||
74 | - bi.tb = tb; | |
75 | - bi.bi_bh = tbS0; | |
76 | - bi.bi_parent = PATH_H_PPARENT(tb->tb_path, 0); | |
77 | - bi.bi_position = PATH_H_POSITION(tb->tb_path, 1); | |
78 | leaf_delete_items(&bi, 0, item_pos, 1, -1); | |
79 | ||
80 | if (!item_pos && tb->CFL[0]) { | |
81 | @@ -121,10 +155,6 @@ static int balance_leaf_when_delete(stru | |
82 | break; | |
83 | ||
84 | case M_CUT:{ /* cut item in S[0] */ | |
85 | - bi.tb = tb; | |
86 | - bi.bi_bh = tbS0; | |
87 | - bi.bi_parent = PATH_H_PPARENT(tb->tb_path, 0); | |
88 | - bi.bi_position = PATH_H_POSITION(tb->tb_path, 1); | |
89 | if (is_direntry_le_ih(ih)) { | |
90 | ||
91 | /* UFS unlink semantics are such that you can only delete one directory entry at a time. */ | |
92 | @@ -325,11 +355,7 @@ static int balance_leaf(struct tree_bala | |
93 | ih_item_len(ih)); | |
94 | ||
95 | /* Insert new item into L[0] */ | |
96 | - bi.tb = tb; | |
97 | - bi.bi_bh = tb->L[0]; | |
98 | - bi.bi_parent = tb->FL[0]; | |
99 | - bi.bi_position = | |
100 | - get_left_neighbor_position(tb, 0); | |
101 | + buffer_info_init_left(tb, &bi); | |
102 | leaf_insert_into_buf(&bi, | |
103 | n + item_pos - | |
104 | ret_val, ih, body, | |
105 | @@ -369,11 +395,7 @@ static int balance_leaf(struct tree_bala | |
106 | leaf_shift_left(tb, tb->lnum[0] - 1, | |
107 | tb->lbytes); | |
108 | /* Insert new item into L[0] */ | |
109 | - bi.tb = tb; | |
110 | - bi.bi_bh = tb->L[0]; | |
111 | - bi.bi_parent = tb->FL[0]; | |
112 | - bi.bi_position = | |
113 | - get_left_neighbor_position(tb, 0); | |
114 | + buffer_info_init_left(tb, &bi); | |
115 | leaf_insert_into_buf(&bi, | |
116 | n + item_pos - | |
117 | ret_val, ih, body, | |
118 | @@ -429,13 +451,7 @@ static int balance_leaf(struct tree_bala | |
119 | } | |
120 | ||
121 | /* Append given directory entry to directory item */ | |
122 | - bi.tb = tb; | |
123 | - bi.bi_bh = tb->L[0]; | |
124 | - bi.bi_parent = | |
125 | - tb->FL[0]; | |
126 | - bi.bi_position = | |
127 | - get_left_neighbor_position | |
128 | - (tb, 0); | |
129 | + buffer_info_init_left(tb, &bi); | |
130 | leaf_paste_in_buffer | |
131 | (&bi, | |
132 | n + item_pos - | |
133 | @@ -523,13 +539,7 @@ static int balance_leaf(struct tree_bala | |
134 | (tbS0, | |
135 | item_pos))); | |
136 | /* Append to body of item in L[0] */ | |
137 | - bi.tb = tb; | |
138 | - bi.bi_bh = tb->L[0]; | |
139 | - bi.bi_parent = | |
140 | - tb->FL[0]; | |
141 | - bi.bi_position = | |
142 | - get_left_neighbor_position | |
143 | - (tb, 0); | |
144 | + buffer_info_init_left(tb, &bi); | |
145 | leaf_paste_in_buffer | |
146 | (&bi, | |
147 | n + item_pos - | |
148 | @@ -680,11 +690,7 @@ static int balance_leaf(struct tree_bala | |
149 | leaf_shift_left(tb, tb->lnum[0], | |
150 | tb->lbytes); | |
151 | /* Append to body of item in L[0] */ | |
152 | - bi.tb = tb; | |
153 | - bi.bi_bh = tb->L[0]; | |
154 | - bi.bi_parent = tb->FL[0]; | |
155 | - bi.bi_position = | |
156 | - get_left_neighbor_position(tb, 0); | |
157 | + buffer_info_init_left(tb, &bi); | |
158 | leaf_paste_in_buffer(&bi, | |
159 | n + item_pos - | |
160 | ret_val, | |
161 | @@ -776,11 +782,7 @@ static int balance_leaf(struct tree_bala | |
162 | set_le_ih_k_offset(ih, offset); | |
163 | put_ih_item_len(ih, tb->rbytes); | |
164 | /* Insert part of the item into R[0] */ | |
165 | - bi.tb = tb; | |
166 | - bi.bi_bh = tb->R[0]; | |
167 | - bi.bi_parent = tb->FR[0]; | |
168 | - bi.bi_position = | |
169 | - get_right_neighbor_position(tb, 0); | |
170 | + buffer_info_init_right(tb, &bi); | |
171 | if ((old_len - tb->rbytes) > zeros_num) { | |
172 | r_zeros_number = 0; | |
173 | r_body = | |
174 | @@ -817,11 +819,7 @@ static int balance_leaf(struct tree_bala | |
175 | tb->rnum[0] - 1, | |
176 | tb->rbytes); | |
177 | /* Insert new item into R[0] */ | |
178 | - bi.tb = tb; | |
179 | - bi.bi_bh = tb->R[0]; | |
180 | - bi.bi_parent = tb->FR[0]; | |
181 | - bi.bi_position = | |
182 | - get_right_neighbor_position(tb, 0); | |
183 | + buffer_info_init_right(tb, &bi); | |
184 | leaf_insert_into_buf(&bi, | |
185 | item_pos - n + | |
186 | tb->rnum[0] - 1, | |
187 | @@ -881,13 +879,7 @@ static int balance_leaf(struct tree_bala | |
188 | pos_in_item - | |
189 | entry_count + | |
190 | tb->rbytes - 1; | |
191 | - bi.tb = tb; | |
192 | - bi.bi_bh = tb->R[0]; | |
193 | - bi.bi_parent = | |
194 | - tb->FR[0]; | |
195 | - bi.bi_position = | |
196 | - get_right_neighbor_position | |
197 | - (tb, 0); | |
198 | + buffer_info_init_right(tb, &bi); | |
199 | leaf_paste_in_buffer | |
200 | (&bi, 0, | |
201 | paste_entry_position, | |
202 | @@ -1018,12 +1010,7 @@ static int balance_leaf(struct tree_bala | |
203 | (tb, tb->CFR[0], 0); | |
204 | ||
205 | /* Append part of body into R[0] */ | |
206 | - bi.tb = tb; | |
207 | - bi.bi_bh = tb->R[0]; | |
208 | - bi.bi_parent = tb->FR[0]; | |
209 | - bi.bi_position = | |
210 | - get_right_neighbor_position | |
211 | - (tb, 0); | |
212 | + buffer_info_init_right(tb, &bi); | |
213 | if (n_rem > zeros_num) { | |
214 | r_zeros_number = 0; | |
215 | r_body = | |
216 | @@ -1070,12 +1057,7 @@ static int balance_leaf(struct tree_bala | |
217 | tb->rbytes); | |
218 | /* append item in R[0] */ | |
219 | if (pos_in_item >= 0) { | |
220 | - bi.tb = tb; | |
221 | - bi.bi_bh = tb->R[0]; | |
222 | - bi.bi_parent = tb->FR[0]; | |
223 | - bi.bi_position = | |
224 | - get_right_neighbor_position | |
225 | - (tb, 0); | |
226 | + buffer_info_init_right(tb, &bi); | |
227 | leaf_paste_in_buffer(&bi, | |
228 | item_pos - | |
229 | n + | |
230 | @@ -1231,10 +1213,7 @@ static int balance_leaf(struct tree_bala | |
231 | put_ih_item_len(ih, sbytes[i]); | |
232 | ||
233 | /* Insert part of the item into S_new[i] before 0-th item */ | |
234 | - bi.tb = tb; | |
235 | - bi.bi_bh = S_new[i]; | |
236 | - bi.bi_parent = NULL; | |
237 | - bi.bi_position = 0; | |
238 | + buffer_info_init_bh(tb, &bi, S_new[i]); | |
239 | ||
240 | if ((old_len - sbytes[i]) > zeros_num) { | |
241 | r_zeros_number = 0; | |
242 | @@ -1266,10 +1245,7 @@ static int balance_leaf(struct tree_bala | |
243 | S_new[i]); | |
244 | ||
245 | /* Insert new item into S_new[i] */ | |
246 | - bi.tb = tb; | |
247 | - bi.bi_bh = S_new[i]; | |
248 | - bi.bi_parent = NULL; | |
249 | - bi.bi_position = 0; | |
250 | + buffer_info_init_bh(tb, &bi, S_new[i]); | |
251 | leaf_insert_into_buf(&bi, | |
252 | item_pos - n + | |
253 | snum[i] - 1, ih, | |
254 | @@ -1326,10 +1302,7 @@ static int balance_leaf(struct tree_bala | |
255 | sbytes[i] - 1, | |
256 | S_new[i]); | |
257 | /* Paste given directory entry to directory item */ | |
258 | - bi.tb = tb; | |
259 | - bi.bi_bh = S_new[i]; | |
260 | - bi.bi_parent = NULL; | |
261 | - bi.bi_position = 0; | |
262 | + buffer_info_init_bh(tb, &bi, S_new[i]); | |
263 | leaf_paste_in_buffer | |
264 | (&bi, 0, | |
265 | pos_in_item - | |
266 | @@ -1399,11 +1372,7 @@ static int balance_leaf(struct tree_bala | |
267 | if (n_rem < 0) | |
268 | n_rem = 0; | |
269 | /* Append part of body into S_new[0] */ | |
270 | - bi.tb = tb; | |
271 | - bi.bi_bh = S_new[i]; | |
272 | - bi.bi_parent = NULL; | |
273 | - bi.bi_position = 0; | |
274 | - | |
275 | + buffer_info_init_bh(tb, &bi, S_new[i]); | |
276 | if (n_rem > zeros_num) { | |
277 | r_zeros_number = 0; | |
278 | r_body = | |
279 | @@ -1490,10 +1459,7 @@ static int balance_leaf(struct tree_bala | |
280 | leaf_mi); | |
281 | ||
282 | /* paste into item */ | |
283 | - bi.tb = tb; | |
284 | - bi.bi_bh = S_new[i]; | |
285 | - bi.bi_parent = NULL; | |
286 | - bi.bi_position = 0; | |
287 | + buffer_info_init_bh(tb, &bi, S_new[i]); | |
288 | leaf_paste_in_buffer(&bi, | |
289 | item_pos - n + | |
290 | snum[i], | |
291 | @@ -1560,10 +1526,7 @@ static int balance_leaf(struct tree_bala | |
292 | ||
293 | switch (flag) { | |
294 | case M_INSERT: /* insert item into S[0] */ | |
295 | - bi.tb = tb; | |
296 | - bi.bi_bh = tbS0; | |
297 | - bi.bi_parent = PATH_H_PPARENT(tb->tb_path, 0); | |
298 | - bi.bi_position = PATH_H_POSITION(tb->tb_path, 1); | |
299 | + buffer_info_init_tbS0(tb, &bi); | |
300 | leaf_insert_into_buf(&bi, item_pos, ih, body, | |
301 | zeros_num); | |
302 | ||
303 | @@ -1590,14 +1553,7 @@ static int balance_leaf(struct tree_bala | |
304 | "PAP-12260: insert_size is 0 already"); | |
305 | ||
306 | /* prepare space */ | |
307 | - bi.tb = tb; | |
308 | - bi.bi_bh = tbS0; | |
309 | - bi.bi_parent = | |
310 | - PATH_H_PPARENT(tb->tb_path, | |
311 | - 0); | |
312 | - bi.bi_position = | |
313 | - PATH_H_POSITION(tb->tb_path, | |
314 | - 1); | |
315 | + buffer_info_init_tbS0(tb, &bi); | |
316 | leaf_paste_in_buffer(&bi, | |
317 | item_pos, | |
318 | pos_in_item, | |
319 | @@ -1645,14 +1601,7 @@ static int balance_leaf(struct tree_bala | |
320 | RFALSE(tb->insert_size[0] <= 0, | |
321 | "PAP-12275: insert size must not be %d", | |
322 | tb->insert_size[0]); | |
323 | - bi.tb = tb; | |
324 | - bi.bi_bh = tbS0; | |
325 | - bi.bi_parent = | |
326 | - PATH_H_PPARENT(tb->tb_path, | |
327 | - 0); | |
328 | - bi.bi_position = | |
329 | - PATH_H_POSITION(tb->tb_path, | |
330 | - 1); | |
331 | + buffer_info_init_tbS0(tb, &bi); | |
332 | leaf_paste_in_buffer(&bi, | |
333 | item_pos, | |
334 | pos_in_item, | |
335 | @@ -1725,7 +1674,6 @@ void make_empty_node(struct buffer_info | |
336 | struct buffer_head *get_FEB(struct tree_balance *tb) | |
337 | { | |
338 | int i; | |
339 | - struct buffer_head *first_b; | |
340 | struct buffer_info bi; | |
341 | ||
342 | for (i = 0; i < MAX_FEB_SIZE; i++) | |
343 | @@ -1735,16 +1683,13 @@ struct buffer_head *get_FEB(struct tree_ | |
344 | if (i == MAX_FEB_SIZE) | |
345 | reiserfs_panic(tb->tb_sb, "vs-12300", "FEB list is empty"); | |
346 | ||
347 | - bi.tb = tb; | |
348 | - bi.bi_bh = first_b = tb->FEB[i]; | |
349 | - bi.bi_parent = NULL; | |
350 | - bi.bi_position = 0; | |
351 | + buffer_info_init_bh(tb, &bi, tb->FEB[i]); | |
352 | make_empty_node(&bi); | |
353 | - set_buffer_uptodate(first_b); | |
354 | + set_buffer_uptodate(tb->FEB[i]); | |
355 | + tb->used[i] = tb->FEB[i]; | |
356 | tb->FEB[i] = NULL; | |
357 | - tb->used[i] = first_b; | |
358 | ||
359 | - return (first_b); | |
360 | + return tb->used[i]; | |
361 | } | |
362 | ||
363 | /* This is now used because reiserfs_free_block has to be able to |