1 From: Jeff Mahoney <jeffm@suse.com>
2 Subject: [PATCH 31/40] reiserfs: factor out buffer_info initialization
4 This is the first in a series of patches to make balance_leaf() not quite
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.
10 Signed-off-by: Jeff Mahoney <jeffm@suse.com>
13 fs/reiserfs/do_balan.c | 175 ++++++++++++++++---------------------------------
14 1 file changed, 60 insertions(+), 115 deletions(-)
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 */
22 +static inline void buffer_info_init_left(struct tree_balance *tb,
23 + struct buffer_info *bi)
26 + bi->bi_bh = tb->L[0];
27 + bi->bi_parent = tb->FL[0];
28 + bi->bi_position = get_left_neighbor_position(tb, 0);
31 +static inline void buffer_info_init_right(struct tree_balance *tb,
32 + struct buffer_info *bi)
35 + bi->bi_bh = tb->R[0];
36 + bi->bi_parent = tb->FR[0];
37 + bi->bi_position = get_right_neighbor_position(tb, 0);
40 +static inline void buffer_info_init_tbS0(struct tree_balance *tb,
41 + struct buffer_info *bi)
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);
49 +static inline void buffer_info_init_bh(struct tree_balance *tb,
50 + struct buffer_info *bi,
51 + struct buffer_head *bh)
55 + bi->bi_parent = NULL;
56 + bi->bi_position = 0;
59 inline void do_balance_mark_leaf_dirty(struct tree_balance *tb,
60 struct buffer_head *bh, int flag)
62 @@ -86,6 +123,7 @@ static int balance_leaf_when_delete(stru
63 "PAP-12010: tree can not be empty");
65 ih = B_N_PITEM_HEAD(tbS0, item_pos);
66 + buffer_info_init_tbS0(tb, &bi);
68 /* Delete or truncate the item */
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);
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);
80 if (!item_pos && tb->CFL[0]) {
81 @@ -121,10 +155,6 @@ static int balance_leaf_when_delete(stru
84 case M_CUT:{ /* cut item in S[0] */
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)) {
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
95 /* Insert new item into L[0] */
97 - bi.bi_bh = tb->L[0];
98 - bi.bi_parent = tb->FL[0];
100 - get_left_neighbor_position(tb, 0);
101 + buffer_info_init_left(tb, &bi);
102 leaf_insert_into_buf(&bi,
105 @@ -369,11 +395,7 @@ static int balance_leaf(struct tree_bala
106 leaf_shift_left(tb, tb->lnum[0] - 1,
108 /* Insert new item into L[0] */
110 - bi.bi_bh = tb->L[0];
111 - bi.bi_parent = tb->FL[0];
113 - get_left_neighbor_position(tb, 0);
114 + buffer_info_init_left(tb, &bi);
115 leaf_insert_into_buf(&bi,
118 @@ -429,13 +451,7 @@ static int balance_leaf(struct tree_bala
121 /* Append given directory entry to directory item */
123 - bi.bi_bh = tb->L[0];
127 - get_left_neighbor_position
129 + buffer_info_init_left(tb, &bi);
133 @@ -523,13 +539,7 @@ static int balance_leaf(struct tree_bala
136 /* Append to body of item in L[0] */
138 - bi.bi_bh = tb->L[0];
142 - get_left_neighbor_position
144 + buffer_info_init_left(tb, &bi);
148 @@ -680,11 +690,7 @@ static int balance_leaf(struct tree_bala
149 leaf_shift_left(tb, tb->lnum[0],
151 /* Append to body of item in L[0] */
153 - bi.bi_bh = tb->L[0];
154 - bi.bi_parent = tb->FL[0];
156 - get_left_neighbor_position(tb, 0);
157 + buffer_info_init_left(tb, &bi);
158 leaf_paste_in_buffer(&bi,
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] */
166 - bi.bi_bh = tb->R[0];
167 - bi.bi_parent = tb->FR[0];
169 - get_right_neighbor_position(tb, 0);
170 + buffer_info_init_right(tb, &bi);
171 if ((old_len - tb->rbytes) > zeros_num) {
174 @@ -817,11 +819,7 @@ static int balance_leaf(struct tree_bala
177 /* Insert new item into R[0] */
179 - bi.bi_bh = tb->R[0];
180 - bi.bi_parent = tb->FR[0];
182 - get_right_neighbor_position(tb, 0);
183 + buffer_info_init_right(tb, &bi);
184 leaf_insert_into_buf(&bi,
187 @@ -881,13 +879,7 @@ static int balance_leaf(struct tree_bala
192 - bi.bi_bh = tb->R[0];
196 - get_right_neighbor_position
198 + buffer_info_init_right(tb, &bi);
201 paste_entry_position,
202 @@ -1018,12 +1010,7 @@ static int balance_leaf(struct tree_bala
205 /* Append part of body into R[0] */
207 - bi.bi_bh = tb->R[0];
208 - bi.bi_parent = tb->FR[0];
210 - get_right_neighbor_position
212 + buffer_info_init_right(tb, &bi);
213 if (n_rem > zeros_num) {
216 @@ -1070,12 +1057,7 @@ static int balance_leaf(struct tree_bala
218 /* append item in R[0] */
219 if (pos_in_item >= 0) {
221 - bi.bi_bh = tb->R[0];
222 - bi.bi_parent = tb->FR[0];
224 - get_right_neighbor_position
226 + buffer_info_init_right(tb, &bi);
227 leaf_paste_in_buffer(&bi,
230 @@ -1231,10 +1213,7 @@ static int balance_leaf(struct tree_bala
231 put_ih_item_len(ih, sbytes[i]);
233 /* Insert part of the item into S_new[i] before 0-th item */
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]);
240 if ((old_len - sbytes[i]) > zeros_num) {
242 @@ -1266,10 +1245,7 @@ static int balance_leaf(struct tree_bala
245 /* Insert new item into S_new[i] */
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,
254 @@ -1326,10 +1302,7 @@ static int balance_leaf(struct tree_bala
257 /* Paste given directory entry to directory item */
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]);
266 @@ -1399,11 +1372,7 @@ static int balance_leaf(struct tree_bala
269 /* Append part of body into S_new[0] */
271 - bi.bi_bh = S_new[i];
272 - bi.bi_parent = NULL;
273 - bi.bi_position = 0;
275 + buffer_info_init_bh(tb, &bi, S_new[i]);
276 if (n_rem > zeros_num) {
279 @@ -1490,10 +1459,7 @@ static int balance_leaf(struct tree_bala
282 /* paste into item */
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,
291 @@ -1560,10 +1526,7 @@ static int balance_leaf(struct tree_bala
294 case M_INSERT: /* insert item into S[0] */
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,
303 @@ -1590,14 +1553,7 @@ static int balance_leaf(struct tree_bala
304 "PAP-12260: insert_size is 0 already");
310 - PATH_H_PPARENT(tb->tb_path,
313 - PATH_H_POSITION(tb->tb_path,
315 + buffer_info_init_tbS0(tb, &bi);
316 leaf_paste_in_buffer(&bi,
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",
326 - PATH_H_PPARENT(tb->tb_path,
329 - PATH_H_POSITION(tb->tb_path,
331 + buffer_info_init_tbS0(tb, &bi);
332 leaf_paste_in_buffer(&bi,
335 @@ -1725,7 +1674,6 @@ void make_empty_node(struct buffer_info
336 struct buffer_head *get_FEB(struct tree_balance *tb)
339 - struct buffer_head *first_b;
340 struct buffer_info bi;
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");
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];
357 - tb->used[i] = first_b;
360 + return tb->used[i];
363 /* This is now used because reiserfs_free_block has to be able to