]> git.ipfire.org Git - ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.39/patches.suse/reiserfs-simplify-buffer-info.diff
Add ignored *.diff files of the xen patches
[ipfire-2.x.git] / src / patches / suse-2.6.27.39 / patches.suse / reiserfs-simplify-buffer-info.diff
diff --git a/src/patches/suse-2.6.27.39/patches.suse/reiserfs-simplify-buffer-info.diff b/src/patches/suse-2.6.27.39/patches.suse/reiserfs-simplify-buffer-info.diff
new file mode 100644 (file)
index 0000000..42160c6
--- /dev/null
@@ -0,0 +1,363 @@
+From: Jeff Mahoney <jeffm@suse.com>
+Subject: [PATCH 31/40] reiserfs: factor out buffer_info initialization
+
+ This is the first in a series of patches to make balance_leaf() not quite
+ so insane.
+
+ This patch factors out the open coded initializations of buffer_info
+ structures and defines a few initializers for the 4 cases they're used.
+
+Signed-off-by: Jeff Mahoney <jeffm@suse.com>
+
+---
+ fs/reiserfs/do_balan.c |  175 ++++++++++++++++---------------------------------
+ 1 file changed, 60 insertions(+), 115 deletions(-)
+
+--- a/fs/reiserfs/do_balan.c
++++ b/fs/reiserfs/do_balan.c
+@@ -29,6 +29,43 @@ struct tree_balance *cur_tb = NULL; /* d
+                                          is interrupting do_balance */
+ #endif
++static inline void buffer_info_init_left(struct tree_balance *tb,
++                                         struct buffer_info *bi)
++{
++      bi->tb          = tb;
++      bi->bi_bh       = tb->L[0];
++      bi->bi_parent   = tb->FL[0];
++      bi->bi_position = get_left_neighbor_position(tb, 0);
++}
++
++static inline void buffer_info_init_right(struct tree_balance *tb,
++                                          struct buffer_info *bi)
++{
++      bi->tb          = tb;
++      bi->bi_bh       = tb->R[0];
++      bi->bi_parent   = tb->FR[0];
++      bi->bi_position = get_right_neighbor_position(tb, 0);
++}
++
++static inline void buffer_info_init_tbS0(struct tree_balance *tb,
++                                         struct buffer_info *bi)
++{
++      bi->tb          = tb;
++      bi->bi_bh        = PATH_PLAST_BUFFER(tb->tb_path);
++      bi->bi_parent   = PATH_H_PPARENT(tb->tb_path, 0);
++      bi->bi_position = PATH_H_POSITION(tb->tb_path, 1);
++}
++
++static inline void buffer_info_init_bh(struct tree_balance *tb,
++                                       struct buffer_info *bi,
++                                       struct buffer_head *bh)
++{
++      bi->tb          = tb;
++      bi->bi_bh       = bh;
++      bi->bi_parent   = NULL;
++      bi->bi_position = 0;
++}
++
+ inline void do_balance_mark_leaf_dirty(struct tree_balance *tb,
+                                      struct buffer_head *bh, int flag)
+ {
+@@ -86,6 +123,7 @@ static int balance_leaf_when_delete(stru
+              "PAP-12010: tree can not be empty");
+       ih = B_N_PITEM_HEAD(tbS0, item_pos);
++      buffer_info_init_tbS0(tb, &bi);
+       /* Delete or truncate the item */
+@@ -96,10 +134,6 @@ static int balance_leaf_when_delete(stru
+                      "vs-12013: mode Delete, insert size %d, ih to be deleted %h",
+                      -tb->insert_size[0], ih);
+-              bi.tb = tb;
+-              bi.bi_bh = tbS0;
+-              bi.bi_parent = PATH_H_PPARENT(tb->tb_path, 0);
+-              bi.bi_position = PATH_H_POSITION(tb->tb_path, 1);
+               leaf_delete_items(&bi, 0, item_pos, 1, -1);
+               if (!item_pos && tb->CFL[0]) {
+@@ -121,10 +155,6 @@ static int balance_leaf_when_delete(stru
+               break;
+       case M_CUT:{            /* cut item in S[0] */
+-                      bi.tb = tb;
+-                      bi.bi_bh = tbS0;
+-                      bi.bi_parent = PATH_H_PPARENT(tb->tb_path, 0);
+-                      bi.bi_position = PATH_H_POSITION(tb->tb_path, 1);
+                       if (is_direntry_le_ih(ih)) {
+                               /* UFS unlink semantics are such that you can only delete one directory entry at a time. */
+@@ -325,11 +355,7 @@ static int balance_leaf(struct tree_bala
+                                              ih_item_len(ih));
+                                       /* Insert new item into L[0] */
+-                                      bi.tb = tb;
+-                                      bi.bi_bh = tb->L[0];
+-                                      bi.bi_parent = tb->FL[0];
+-                                      bi.bi_position =
+-                                          get_left_neighbor_position(tb, 0);
++                                      buffer_info_init_left(tb, &bi);
+                                       leaf_insert_into_buf(&bi,
+                                                            n + item_pos -
+                                                            ret_val, ih, body,
+@@ -369,11 +395,7 @@ static int balance_leaf(struct tree_bala
+                                           leaf_shift_left(tb, tb->lnum[0] - 1,
+                                                           tb->lbytes);
+                                       /* Insert new item into L[0] */
+-                                      bi.tb = tb;
+-                                      bi.bi_bh = tb->L[0];
+-                                      bi.bi_parent = tb->FL[0];
+-                                      bi.bi_position =
+-                                          get_left_neighbor_position(tb, 0);
++                                      buffer_info_init_left(tb, &bi);
+                                       leaf_insert_into_buf(&bi,
+                                                            n + item_pos -
+                                                            ret_val, ih, body,
+@@ -429,13 +451,7 @@ static int balance_leaf(struct tree_bala
+                                                       }
+                                                       /* Append given directory entry to directory item */
+-                                                      bi.tb = tb;
+-                                                      bi.bi_bh = tb->L[0];
+-                                                      bi.bi_parent =
+-                                                          tb->FL[0];
+-                                                      bi.bi_position =
+-                                                          get_left_neighbor_position
+-                                                          (tb, 0);
++                                                      buffer_info_init_left(tb, &bi);
+                                                       leaf_paste_in_buffer
+                                                           (&bi,
+                                                            n + item_pos -
+@@ -523,13 +539,7 @@ static int balance_leaf(struct tree_bala
+                                                                            (tbS0,
+                                                                             item_pos)));
+                                                       /* Append to body of item in L[0] */
+-                                                      bi.tb = tb;
+-                                                      bi.bi_bh = tb->L[0];
+-                                                      bi.bi_parent =
+-                                                          tb->FL[0];
+-                                                      bi.bi_position =
+-                                                          get_left_neighbor_position
+-                                                          (tb, 0);
++                                                      buffer_info_init_left(tb, &bi);
+                                                       leaf_paste_in_buffer
+                                                           (&bi,
+                                                            n + item_pos -
+@@ -680,11 +690,7 @@ static int balance_leaf(struct tree_bala
+                                           leaf_shift_left(tb, tb->lnum[0],
+                                                           tb->lbytes);
+                                       /* Append to body of item in L[0] */
+-                                      bi.tb = tb;
+-                                      bi.bi_bh = tb->L[0];
+-                                      bi.bi_parent = tb->FL[0];
+-                                      bi.bi_position =
+-                                          get_left_neighbor_position(tb, 0);
++                                      buffer_info_init_left(tb, &bi);
+                                       leaf_paste_in_buffer(&bi,
+                                                            n + item_pos -
+                                                            ret_val,
+@@ -776,11 +782,7 @@ static int balance_leaf(struct tree_bala
+                                       set_le_ih_k_offset(ih, offset);
+                                       put_ih_item_len(ih, tb->rbytes);
+                                       /* Insert part of the item into R[0] */
+-                                      bi.tb = tb;
+-                                      bi.bi_bh = tb->R[0];
+-                                      bi.bi_parent = tb->FR[0];
+-                                      bi.bi_position =
+-                                          get_right_neighbor_position(tb, 0);
++                                      buffer_info_init_right(tb, &bi);
+                                       if ((old_len - tb->rbytes) > zeros_num) {
+                                               r_zeros_number = 0;
+                                               r_body =
+@@ -817,11 +819,7 @@ static int balance_leaf(struct tree_bala
+                                                            tb->rnum[0] - 1,
+                                                            tb->rbytes);
+                                       /* Insert new item into R[0] */
+-                                      bi.tb = tb;
+-                                      bi.bi_bh = tb->R[0];
+-                                      bi.bi_parent = tb->FR[0];
+-                                      bi.bi_position =
+-                                          get_right_neighbor_position(tb, 0);
++                                      buffer_info_init_right(tb, &bi);
+                                       leaf_insert_into_buf(&bi,
+                                                            item_pos - n +
+                                                            tb->rnum[0] - 1,
+@@ -881,13 +879,7 @@ static int balance_leaf(struct tree_bala
+                                                           pos_in_item -
+                                                           entry_count +
+                                                           tb->rbytes - 1;
+-                                                      bi.tb = tb;
+-                                                      bi.bi_bh = tb->R[0];
+-                                                      bi.bi_parent =
+-                                                          tb->FR[0];
+-                                                      bi.bi_position =
+-                                                          get_right_neighbor_position
+-                                                          (tb, 0);
++                                                      buffer_info_init_right(tb, &bi);
+                                                       leaf_paste_in_buffer
+                                                           (&bi, 0,
+                                                            paste_entry_position,
+@@ -1018,12 +1010,7 @@ static int balance_leaf(struct tree_bala
+                                                   (tb, tb->CFR[0], 0);
+                                               /* Append part of body into R[0] */
+-                                              bi.tb = tb;
+-                                              bi.bi_bh = tb->R[0];
+-                                              bi.bi_parent = tb->FR[0];
+-                                              bi.bi_position =
+-                                                  get_right_neighbor_position
+-                                                  (tb, 0);
++                                              buffer_info_init_right(tb, &bi);
+                                               if (n_rem > zeros_num) {
+                                                       r_zeros_number = 0;
+                                                       r_body =
+@@ -1070,12 +1057,7 @@ static int balance_leaf(struct tree_bala
+                                                            tb->rbytes);
+                                       /* append item in R[0] */
+                                       if (pos_in_item >= 0) {
+-                                              bi.tb = tb;
+-                                              bi.bi_bh = tb->R[0];
+-                                              bi.bi_parent = tb->FR[0];
+-                                              bi.bi_position =
+-                                                  get_right_neighbor_position
+-                                                  (tb, 0);
++                                              buffer_info_init_right(tb, &bi);
+                                               leaf_paste_in_buffer(&bi,
+                                                                    item_pos -
+                                                                    n +
+@@ -1231,10 +1213,7 @@ static int balance_leaf(struct tree_bala
+                                       put_ih_item_len(ih, sbytes[i]);
+                                       /* Insert part of the item into S_new[i] before 0-th item */
+-                                      bi.tb = tb;
+-                                      bi.bi_bh = S_new[i];
+-                                      bi.bi_parent = NULL;
+-                                      bi.bi_position = 0;
++                                      buffer_info_init_bh(tb, &bi, S_new[i]);
+                                       if ((old_len - sbytes[i]) > zeros_num) {
+                                               r_zeros_number = 0;
+@@ -1266,10 +1245,7 @@ static int balance_leaf(struct tree_bala
+                                                       S_new[i]);
+                                       /* Insert new item into S_new[i] */
+-                                      bi.tb = tb;
+-                                      bi.bi_bh = S_new[i];
+-                                      bi.bi_parent = NULL;
+-                                      bi.bi_position = 0;
++                                      buffer_info_init_bh(tb, &bi, S_new[i]);
+                                       leaf_insert_into_buf(&bi,
+                                                            item_pos - n +
+                                                            snum[i] - 1, ih,
+@@ -1326,10 +1302,7 @@ static int balance_leaf(struct tree_bala
+                                                            sbytes[i] - 1,
+                                                            S_new[i]);
+                                                       /* Paste given directory entry to directory item */
+-                                                      bi.tb = tb;
+-                                                      bi.bi_bh = S_new[i];
+-                                                      bi.bi_parent = NULL;
+-                                                      bi.bi_position = 0;
++                                                      buffer_info_init_bh(tb, &bi, S_new[i]);
+                                                       leaf_paste_in_buffer
+                                                           (&bi, 0,
+                                                            pos_in_item -
+@@ -1399,11 +1372,7 @@ static int balance_leaf(struct tree_bala
+                                               if (n_rem < 0)
+                                                       n_rem = 0;
+                                               /* Append part of body into S_new[0] */
+-                                              bi.tb = tb;
+-                                              bi.bi_bh = S_new[i];
+-                                              bi.bi_parent = NULL;
+-                                              bi.bi_position = 0;
+-
++                                              buffer_info_init_bh(tb, &bi, S_new[i]);
+                                               if (n_rem > zeros_num) {
+                                                       r_zeros_number = 0;
+                                                       r_body =
+@@ -1490,10 +1459,7 @@ static int balance_leaf(struct tree_bala
+                                              leaf_mi);
+                                       /* paste into item */
+-                                      bi.tb = tb;
+-                                      bi.bi_bh = S_new[i];
+-                                      bi.bi_parent = NULL;
+-                                      bi.bi_position = 0;
++                                      buffer_info_init_bh(tb, &bi, S_new[i]);
+                                       leaf_paste_in_buffer(&bi,
+                                                            item_pos - n +
+                                                            snum[i],
+@@ -1560,10 +1526,7 @@ static int balance_leaf(struct tree_bala
+               switch (flag) {
+               case M_INSERT:  /* insert item into S[0] */
+-                      bi.tb = tb;
+-                      bi.bi_bh = tbS0;
+-                      bi.bi_parent = PATH_H_PPARENT(tb->tb_path, 0);
+-                      bi.bi_position = PATH_H_POSITION(tb->tb_path, 1);
++                      buffer_info_init_tbS0(tb, &bi);
+                       leaf_insert_into_buf(&bi, item_pos, ih, body,
+                                            zeros_num);
+@@ -1590,14 +1553,7 @@ static int balance_leaf(struct tree_bala
+                                                      "PAP-12260: insert_size is 0 already");
+                                               /* prepare space */
+-                                              bi.tb = tb;
+-                                              bi.bi_bh = tbS0;
+-                                              bi.bi_parent =
+-                                                  PATH_H_PPARENT(tb->tb_path,
+-                                                                 0);
+-                                              bi.bi_position =
+-                                                  PATH_H_POSITION(tb->tb_path,
+-                                                                  1);
++                                              buffer_info_init_tbS0(tb, &bi);
+                                               leaf_paste_in_buffer(&bi,
+                                                                    item_pos,
+                                                                    pos_in_item,
+@@ -1645,14 +1601,7 @@ static int balance_leaf(struct tree_bala
+                                               RFALSE(tb->insert_size[0] <= 0,
+                                                      "PAP-12275: insert size must not be %d",
+                                                      tb->insert_size[0]);
+-                                              bi.tb = tb;
+-                                              bi.bi_bh = tbS0;
+-                                              bi.bi_parent =
+-                                                  PATH_H_PPARENT(tb->tb_path,
+-                                                                 0);
+-                                              bi.bi_position =
+-                                                  PATH_H_POSITION(tb->tb_path,
+-                                                                  1);
++                                              buffer_info_init_tbS0(tb, &bi);
+                                               leaf_paste_in_buffer(&bi,
+                                                                    item_pos,
+                                                                    pos_in_item,
+@@ -1725,7 +1674,6 @@ void make_empty_node(struct buffer_info
+ struct buffer_head *get_FEB(struct tree_balance *tb)
+ {
+       int i;
+-      struct buffer_head *first_b;
+       struct buffer_info bi;
+       for (i = 0; i < MAX_FEB_SIZE; i++)
+@@ -1735,16 +1683,13 @@ struct buffer_head *get_FEB(struct tree_
+       if (i == MAX_FEB_SIZE)
+               reiserfs_panic(tb->tb_sb, "vs-12300", "FEB list is empty");
+-      bi.tb = tb;
+-      bi.bi_bh = first_b = tb->FEB[i];
+-      bi.bi_parent = NULL;
+-      bi.bi_position = 0;
++      buffer_info_init_bh(tb, &bi, tb->FEB[i]);
+       make_empty_node(&bi);
+-      set_buffer_uptodate(first_b);
++      set_buffer_uptodate(tb->FEB[i]);
++      tb->used[i] = tb->FEB[i];
+       tb->FEB[i] = NULL;
+-      tb->used[i] = first_b;
+-      return (first_b);
++      return tb->used[i];
+ }
+ /* This is now used because reiserfs_free_block has to be able to