]> git.ipfire.org Git - ipfire-2.x.git/blame - src/patches/suse-2.6.27.31/patches.suse/reiserfs-simplify-buffer-info.diff
Add a patch to fix Intel E100 wake-on-lan problems.
[ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.suse / reiserfs-simplify-buffer-info.diff
CommitLineData
6a930a95
BS
1From: Jeff Mahoney <jeffm@suse.com>
2Subject: [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
10Signed-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