aboutsummaryrefslogtreecommitdiffstats
path: root/fs/reiserfs/stree.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/reiserfs/stree.c')
-rw-r--r--fs/reiserfs/stree.c370
1 files changed, 183 insertions, 187 deletions
diff --git a/fs/reiserfs/stree.c b/fs/reiserfs/stree.c
index fd769c8dac32..e23303daa868 100644
--- a/fs/reiserfs/stree.c
+++ b/fs/reiserfs/stree.c
@@ -136,11 +136,11 @@ inline int comp_short_le_keys(const struct reiserfs_key *key1,
136 const struct reiserfs_key *key2) 136 const struct reiserfs_key *key2)
137{ 137{
138 __u32 *k1_u32, *k2_u32; 138 __u32 *k1_u32, *k2_u32;
139 int n_key_length = REISERFS_SHORT_KEY_LEN; 139 int key_length = REISERFS_SHORT_KEY_LEN;
140 140
141 k1_u32 = (__u32 *) key1; 141 k1_u32 = (__u32 *) key1;
142 k2_u32 = (__u32 *) key2; 142 k2_u32 = (__u32 *) key2;
143 for (; n_key_length--; ++k1_u32, ++k2_u32) { 143 for (; key_length--; ++k1_u32, ++k2_u32) {
144 if (le32_to_cpu(*k1_u32) < le32_to_cpu(*k2_u32)) 144 if (le32_to_cpu(*k1_u32) < le32_to_cpu(*k2_u32))
145 return -1; 145 return -1;
146 if (le32_to_cpu(*k1_u32) > le32_to_cpu(*k2_u32)) 146 if (le32_to_cpu(*k1_u32) > le32_to_cpu(*k2_u32))
@@ -177,10 +177,10 @@ inline int comp_le_keys(const struct reiserfs_key *k1,
177 * *pos = number of the searched element if found, else the * 177 * *pos = number of the searched element if found, else the *
178 * number of the first element that is larger than key. * 178 * number of the first element that is larger than key. *
179 **************************************************************************/ 179 **************************************************************************/
180/* For those not familiar with binary search: n_lbound is the leftmost item that it 180/* For those not familiar with binary search: lbound is the leftmost item that it
181 could be, n_rbound the rightmost item that it could be. We examine the item 181 could be, rbound the rightmost item that it could be. We examine the item
182 halfway between n_lbound and n_rbound, and that tells us either that we can increase 182 halfway between lbound and rbound, and that tells us either that we can increase
183 n_lbound, or decrease n_rbound, or that we have found it, or if n_lbound <= n_rbound that 183 lbound, or decrease rbound, or that we have found it, or if lbound <= rbound that
184 there are no possible items, and we have not found it. With each examination we 184 there are no possible items, and we have not found it. With each examination we
185 cut the number of possible items it could be by one more than half rounded down, 185 cut the number of possible items it could be by one more than half rounded down,
186 or we find it. */ 186 or we find it. */
@@ -198,28 +198,27 @@ static inline int bin_search(const void *key, /* Key to search for. */
198 int *pos /* Number of the searched for element. */ 198 int *pos /* Number of the searched for element. */
199 ) 199 )
200{ 200{
201 int n_rbound, n_lbound, n_j; 201 int rbound, lbound, j;
202 202
203 for (n_j = ((n_rbound = num - 1) + (n_lbound = 0)) / 2; 203 for (j = ((rbound = num - 1) + (lbound = 0)) / 2;
204 n_lbound <= n_rbound; n_j = (n_rbound + n_lbound) / 2) 204 lbound <= rbound; j = (rbound + lbound) / 2)
205 switch (comp_keys 205 switch (comp_keys
206 ((struct reiserfs_key *)((char *)base + 206 ((struct reiserfs_key *)((char *)base + j * width),
207 n_j * width),
208 (struct cpu_key *)key)) { 207 (struct cpu_key *)key)) {
209 case -1: 208 case -1:
210 n_lbound = n_j + 1; 209 lbound = j + 1;
211 continue; 210 continue;
212 case 1: 211 case 1:
213 n_rbound = n_j - 1; 212 rbound = j - 1;
214 continue; 213 continue;
215 case 0: 214 case 0:
216 *pos = n_j; 215 *pos = j;
217 return ITEM_FOUND; /* Key found in the array. */ 216 return ITEM_FOUND; /* Key found in the array. */
218 } 217 }
219 218
220 /* bin_search did not find given key, it returns position of key, 219 /* bin_search did not find given key, it returns position of key,
221 that is minimal and greater than the given one. */ 220 that is minimal and greater than the given one. */
222 *pos = n_lbound; 221 *pos = lbound;
223 return ITEM_NOT_FOUND; 222 return ITEM_NOT_FOUND;
224} 223}
225 224
@@ -242,43 +241,41 @@ static const struct reiserfs_key MAX_KEY = {
242 of the path, and going upwards. We must check the path's validity at each step. If the key is not in 241 of the path, and going upwards. We must check the path's validity at each step. If the key is not in
243 the path, there is no delimiting key in the tree (buffer is first or last buffer in tree), and in this 242 the path, there is no delimiting key in the tree (buffer is first or last buffer in tree), and in this
244 case we return a special key, either MIN_KEY or MAX_KEY. */ 243 case we return a special key, either MIN_KEY or MAX_KEY. */
245static inline const struct reiserfs_key *get_lkey(const struct treepath 244static inline const struct reiserfs_key *get_lkey(const struct treepath *chk_path,
246 *chk_path, 245 const struct super_block *sb)
247 const struct super_block
248 *sb)
249{ 246{
250 int n_position, n_path_offset = chk_path->path_length; 247 int position, path_offset = chk_path->path_length;
251 struct buffer_head *parent; 248 struct buffer_head *parent;
252 249
253 RFALSE(n_path_offset < FIRST_PATH_ELEMENT_OFFSET, 250 RFALSE(path_offset < FIRST_PATH_ELEMENT_OFFSET,
254 "PAP-5010: invalid offset in the path"); 251 "PAP-5010: invalid offset in the path");
255 252
256 /* While not higher in path than first element. */ 253 /* While not higher in path than first element. */
257 while (n_path_offset-- > FIRST_PATH_ELEMENT_OFFSET) { 254 while (path_offset-- > FIRST_PATH_ELEMENT_OFFSET) {
258 255
259 RFALSE(!buffer_uptodate 256 RFALSE(!buffer_uptodate
260 (PATH_OFFSET_PBUFFER(chk_path, n_path_offset)), 257 (PATH_OFFSET_PBUFFER(chk_path, path_offset)),
261 "PAP-5020: parent is not uptodate"); 258 "PAP-5020: parent is not uptodate");
262 259
263 /* Parent at the path is not in the tree now. */ 260 /* Parent at the path is not in the tree now. */
264 if (!B_IS_IN_TREE 261 if (!B_IS_IN_TREE
265 (parent = 262 (parent =
266 PATH_OFFSET_PBUFFER(chk_path, n_path_offset))) 263 PATH_OFFSET_PBUFFER(chk_path, path_offset)))
267 return &MAX_KEY; 264 return &MAX_KEY;
268 /* Check whether position in the parent is correct. */ 265 /* Check whether position in the parent is correct. */
269 if ((n_position = 266 if ((position =
270 PATH_OFFSET_POSITION(chk_path, 267 PATH_OFFSET_POSITION(chk_path,
271 n_path_offset)) > 268 path_offset)) >
272 B_NR_ITEMS(parent)) 269 B_NR_ITEMS(parent))
273 return &MAX_KEY; 270 return &MAX_KEY;
274 /* Check whether parent at the path really points to the child. */ 271 /* Check whether parent at the path really points to the child. */
275 if (B_N_CHILD_NUM(parent, n_position) != 272 if (B_N_CHILD_NUM(parent, position) !=
276 PATH_OFFSET_PBUFFER(chk_path, 273 PATH_OFFSET_PBUFFER(chk_path,
277 n_path_offset + 1)->b_blocknr) 274 path_offset + 1)->b_blocknr)
278 return &MAX_KEY; 275 return &MAX_KEY;
279 /* Return delimiting key if position in the parent is not equal to zero. */ 276 /* Return delimiting key if position in the parent is not equal to zero. */
280 if (n_position) 277 if (position)
281 return B_N_PDELIM_KEY(parent, n_position - 1); 278 return B_N_PDELIM_KEY(parent, position - 1);
282 } 279 }
283 /* Return MIN_KEY if we are in the root of the buffer tree. */ 280 /* Return MIN_KEY if we are in the root of the buffer tree. */
284 if (PATH_OFFSET_PBUFFER(chk_path, FIRST_PATH_ELEMENT_OFFSET)-> 281 if (PATH_OFFSET_PBUFFER(chk_path, FIRST_PATH_ELEMENT_OFFSET)->
@@ -291,37 +288,37 @@ static inline const struct reiserfs_key *get_lkey(const struct treepath
291inline const struct reiserfs_key *get_rkey(const struct treepath *chk_path, 288inline const struct reiserfs_key *get_rkey(const struct treepath *chk_path,
292 const struct super_block *sb) 289 const struct super_block *sb)
293{ 290{
294 int n_position, n_path_offset = chk_path->path_length; 291 int position, path_offset = chk_path->path_length;
295 struct buffer_head *parent; 292 struct buffer_head *parent;
296 293
297 RFALSE(n_path_offset < FIRST_PATH_ELEMENT_OFFSET, 294 RFALSE(path_offset < FIRST_PATH_ELEMENT_OFFSET,
298 "PAP-5030: invalid offset in the path"); 295 "PAP-5030: invalid offset in the path");
299 296
300 while (n_path_offset-- > FIRST_PATH_ELEMENT_OFFSET) { 297 while (path_offset-- > FIRST_PATH_ELEMENT_OFFSET) {
301 298
302 RFALSE(!buffer_uptodate 299 RFALSE(!buffer_uptodate
303 (PATH_OFFSET_PBUFFER(chk_path, n_path_offset)), 300 (PATH_OFFSET_PBUFFER(chk_path, path_offset)),
304 "PAP-5040: parent is not uptodate"); 301 "PAP-5040: parent is not uptodate");
305 302
306 /* Parent at the path is not in the tree now. */ 303 /* Parent at the path is not in the tree now. */
307 if (!B_IS_IN_TREE 304 if (!B_IS_IN_TREE
308 (parent = 305 (parent =
309 PATH_OFFSET_PBUFFER(chk_path, n_path_offset))) 306 PATH_OFFSET_PBUFFER(chk_path, path_offset)))
310 return &MIN_KEY; 307 return &MIN_KEY;
311 /* Check whether position in the parent is correct. */ 308 /* Check whether position in the parent is correct. */
312 if ((n_position = 309 if ((position =
313 PATH_OFFSET_POSITION(chk_path, 310 PATH_OFFSET_POSITION(chk_path,
314 n_path_offset)) > 311 path_offset)) >
315 B_NR_ITEMS(parent)) 312 B_NR_ITEMS(parent))
316 return &MIN_KEY; 313 return &MIN_KEY;
317 /* Check whether parent at the path really points to the child. */ 314 /* Check whether parent at the path really points to the child. */
318 if (B_N_CHILD_NUM(parent, n_position) != 315 if (B_N_CHILD_NUM(parent, position) !=
319 PATH_OFFSET_PBUFFER(chk_path, 316 PATH_OFFSET_PBUFFER(chk_path,
320 n_path_offset + 1)->b_blocknr) 317 path_offset + 1)->b_blocknr)
321 return &MIN_KEY; 318 return &MIN_KEY;
322 /* Return delimiting key if position in the parent is not the last one. */ 319 /* Return delimiting key if position in the parent is not the last one. */
323 if (n_position != B_NR_ITEMS(parent)) 320 if (position != B_NR_ITEMS(parent))
324 return B_N_PDELIM_KEY(parent, n_position); 321 return B_N_PDELIM_KEY(parent, position);
325 } 322 }
326 /* Return MAX_KEY if we are in the root of the buffer tree. */ 323 /* Return MAX_KEY if we are in the root of the buffer tree. */
327 if (PATH_OFFSET_PBUFFER(chk_path, FIRST_PATH_ELEMENT_OFFSET)-> 324 if (PATH_OFFSET_PBUFFER(chk_path, FIRST_PATH_ELEMENT_OFFSET)->
@@ -371,14 +368,14 @@ int reiserfs_check_path(struct treepath *p)
371void pathrelse_and_restore(struct super_block *sb, 368void pathrelse_and_restore(struct super_block *sb,
372 struct treepath *search_path) 369 struct treepath *search_path)
373{ 370{
374 int n_path_offset = search_path->path_length; 371 int path_offset = search_path->path_length;
375 372
376 RFALSE(n_path_offset < ILLEGAL_PATH_ELEMENT_OFFSET, 373 RFALSE(path_offset < ILLEGAL_PATH_ELEMENT_OFFSET,
377 "clm-4000: invalid path offset"); 374 "clm-4000: invalid path offset");
378 375
379 while (n_path_offset > ILLEGAL_PATH_ELEMENT_OFFSET) { 376 while (path_offset > ILLEGAL_PATH_ELEMENT_OFFSET) {
380 struct buffer_head *bh; 377 struct buffer_head *bh;
381 bh = PATH_OFFSET_PBUFFER(search_path, n_path_offset--); 378 bh = PATH_OFFSET_PBUFFER(search_path, path_offset--);
382 reiserfs_restore_prepared_buffer(sb, bh); 379 reiserfs_restore_prepared_buffer(sb, bh);
383 brelse(bh); 380 brelse(bh);
384 } 381 }
@@ -388,13 +385,13 @@ void pathrelse_and_restore(struct super_block *sb,
388/* Drop the reference to each buffer in a path */ 385/* Drop the reference to each buffer in a path */
389void pathrelse(struct treepath *search_path) 386void pathrelse(struct treepath *search_path)
390{ 387{
391 int n_path_offset = search_path->path_length; 388 int path_offset = search_path->path_length;
392 389
393 RFALSE(n_path_offset < ILLEGAL_PATH_ELEMENT_OFFSET, 390 RFALSE(path_offset < ILLEGAL_PATH_ELEMENT_OFFSET,
394 "PAP-5090: invalid path offset"); 391 "PAP-5090: invalid path offset");
395 392
396 while (n_path_offset > ILLEGAL_PATH_ELEMENT_OFFSET) 393 while (path_offset > ILLEGAL_PATH_ELEMENT_OFFSET)
397 brelse(PATH_OFFSET_PBUFFER(search_path, n_path_offset--)); 394 brelse(PATH_OFFSET_PBUFFER(search_path, path_offset--));
398 395
399 search_path->path_length = ILLEGAL_PATH_ELEMENT_OFFSET; 396 search_path->path_length = ILLEGAL_PATH_ELEMENT_OFFSET;
400} 397}
@@ -572,16 +569,16 @@ int search_by_key(struct super_block *sb, const struct cpu_key *key, /* Key to s
572 by the calling 569 by the calling
573 function. It is filled up 570 function. It is filled up
574 by this function. */ 571 by this function. */
575 int n_stop_level /* How far down the tree to search. To 572 int stop_level /* How far down the tree to search. To
576 stop at leaf level - set to 573 stop at leaf level - set to
577 DISK_LEAF_NODE_LEVEL */ 574 DISK_LEAF_NODE_LEVEL */
578 ) 575 )
579{ 576{
580 b_blocknr_t n_block_number; 577 b_blocknr_t block_number;
581 int expected_level; 578 int expected_level;
582 struct buffer_head *bh; 579 struct buffer_head *bh;
583 struct path_element *last_element; 580 struct path_element *last_element;
584 int n_node_level, n_retval; 581 int node_level, retval;
585 int right_neighbor_of_leaf_node; 582 int right_neighbor_of_leaf_node;
586 int fs_gen; 583 int fs_gen;
587 struct buffer_head *reada_bh[SEARCH_BY_KEY_READA]; 584 struct buffer_head *reada_bh[SEARCH_BY_KEY_READA];
@@ -589,7 +586,7 @@ int search_by_key(struct super_block *sb, const struct cpu_key *key, /* Key to s
589 int reada_count = 0; 586 int reada_count = 0;
590 587
591#ifdef CONFIG_REISERFS_CHECK 588#ifdef CONFIG_REISERFS_CHECK
592 int n_repeat_counter = 0; 589 int repeat_counter = 0;
593#endif 590#endif
594 591
595 PROC_INFO_INC(sb, search_by_key); 592 PROC_INFO_INC(sb, search_by_key);
@@ -605,16 +602,16 @@ int search_by_key(struct super_block *sb, const struct cpu_key *key, /* Key to s
605 /* With each iteration of this loop we search through the items in the 602 /* With each iteration of this loop we search through the items in the
606 current node, and calculate the next current node(next path element) 603 current node, and calculate the next current node(next path element)
607 for the next iteration of this loop.. */ 604 for the next iteration of this loop.. */
608 n_block_number = SB_ROOT_BLOCK(sb); 605 block_number = SB_ROOT_BLOCK(sb);
609 expected_level = -1; 606 expected_level = -1;
610 while (1) { 607 while (1) {
611 608
612#ifdef CONFIG_REISERFS_CHECK 609#ifdef CONFIG_REISERFS_CHECK
613 if (!(++n_repeat_counter % 50000)) 610 if (!(++repeat_counter % 50000))
614 reiserfs_warning(sb, "PAP-5100", 611 reiserfs_warning(sb, "PAP-5100",
615 "%s: there were %d iterations of " 612 "%s: there were %d iterations of "
616 "while loop looking for key %K", 613 "while loop looking for key %K",
617 current->comm, n_repeat_counter, 614 current->comm, repeat_counter,
618 key); 615 key);
619#endif 616#endif
620 617
@@ -627,7 +624,7 @@ int search_by_key(struct super_block *sb, const struct cpu_key *key, /* Key to s
627 /* Read the next tree node, and set the last element in the path to 624 /* Read the next tree node, and set the last element in the path to
628 have a pointer to it. */ 625 have a pointer to it. */
629 if ((bh = last_element->pe_buffer = 626 if ((bh = last_element->pe_buffer =
630 sb_getblk(sb, n_block_number))) { 627 sb_getblk(sb, block_number))) {
631 if (!buffer_uptodate(bh) && reada_count > 1) 628 if (!buffer_uptodate(bh) && reada_count > 1)
632 search_by_key_reada(sb, reada_bh, 629 search_by_key_reada(sb, reada_bh,
633 reada_blocks, reada_count); 630 reada_blocks, reada_count);
@@ -661,7 +658,7 @@ int search_by_key(struct super_block *sb, const struct cpu_key *key, /* Key to s
661 658
662 /* Get the root block number so that we can repeat the search 659 /* Get the root block number so that we can repeat the search
663 starting from the root. */ 660 starting from the root. */
664 n_block_number = SB_ROOT_BLOCK(sb); 661 block_number = SB_ROOT_BLOCK(sb);
665 expected_level = -1; 662 expected_level = -1;
666 right_neighbor_of_leaf_node = 0; 663 right_neighbor_of_leaf_node = 0;
667 664
@@ -694,26 +691,26 @@ int search_by_key(struct super_block *sb, const struct cpu_key *key, /* Key to s
694 } 691 }
695 692
696 /* ok, we have acquired next formatted node in the tree */ 693 /* ok, we have acquired next formatted node in the tree */
697 n_node_level = B_LEVEL(bh); 694 node_level = B_LEVEL(bh);
698 695
699 PROC_INFO_BH_STAT(sb, bh, n_node_level - 1); 696 PROC_INFO_BH_STAT(sb, bh, node_level - 1);
700 697
701 RFALSE(n_node_level < n_stop_level, 698 RFALSE(node_level < stop_level,
702 "vs-5152: tree level (%d) is less than stop level (%d)", 699 "vs-5152: tree level (%d) is less than stop level (%d)",
703 n_node_level, n_stop_level); 700 node_level, stop_level);
704 701
705 n_retval = bin_search(key, B_N_PITEM_HEAD(bh, 0), 702 retval = bin_search(key, B_N_PITEM_HEAD(bh, 0),
706 B_NR_ITEMS(bh), 703 B_NR_ITEMS(bh),
707 (n_node_level == 704 (node_level ==
708 DISK_LEAF_NODE_LEVEL) ? IH_SIZE : 705 DISK_LEAF_NODE_LEVEL) ? IH_SIZE :
709 KEY_SIZE, 706 KEY_SIZE,
710 &(last_element->pe_position)); 707 &(last_element->pe_position));
711 if (n_node_level == n_stop_level) { 708 if (node_level == stop_level) {
712 return n_retval; 709 return retval;
713 } 710 }
714 711
715 /* we are not in the stop level */ 712 /* we are not in the stop level */
716 if (n_retval == ITEM_FOUND) 713 if (retval == ITEM_FOUND)
717 /* item has been found, so we choose the pointer which is to the right of the found one */ 714 /* item has been found, so we choose the pointer which is to the right of the found one */
718 last_element->pe_position++; 715 last_element->pe_position++;
719 716
@@ -724,12 +721,12 @@ int search_by_key(struct super_block *sb, const struct cpu_key *key, /* Key to s
724 /* So we have chosen a position in the current node which is 721 /* So we have chosen a position in the current node which is
725 an internal node. Now we calculate child block number by 722 an internal node. Now we calculate child block number by
726 position in the node. */ 723 position in the node. */
727 n_block_number = 724 block_number =
728 B_N_CHILD_NUM(bh, last_element->pe_position); 725 B_N_CHILD_NUM(bh, last_element->pe_position);
729 726
730 /* if we are going to read leaf nodes, try for read ahead as well */ 727 /* if we are going to read leaf nodes, try for read ahead as well */
731 if ((search_path->reada & PATH_READA) && 728 if ((search_path->reada & PATH_READA) &&
732 n_node_level == DISK_LEAF_NODE_LEVEL + 1) { 729 node_level == DISK_LEAF_NODE_LEVEL + 1) {
733 int pos = last_element->pe_position; 730 int pos = last_element->pe_position;
734 int limit = B_NR_ITEMS(bh); 731 int limit = B_NR_ITEMS(bh);
735 struct reiserfs_key *le_key; 732 struct reiserfs_key *le_key;
@@ -781,7 +778,7 @@ int search_for_position_by_key(struct super_block *sb, /* Pointer to the super b
781 ) 778 )
782{ 779{
783 struct item_head *p_le_ih; /* pointer to on-disk structure */ 780 struct item_head *p_le_ih; /* pointer to on-disk structure */
784 int n_blk_size; 781 int blk_size;
785 loff_t item_offset, offset; 782 loff_t item_offset, offset;
786 struct reiserfs_dir_entry de; 783 struct reiserfs_dir_entry de;
787 int retval; 784 int retval;
@@ -816,7 +813,7 @@ int search_for_position_by_key(struct super_block *sb, /* Pointer to the super b
816 p_le_ih = 813 p_le_ih =
817 B_N_PITEM_HEAD(PATH_PLAST_BUFFER(search_path), 814 B_N_PITEM_HEAD(PATH_PLAST_BUFFER(search_path),
818 --PATH_LAST_POSITION(search_path)); 815 --PATH_LAST_POSITION(search_path));
819 n_blk_size = sb->s_blocksize; 816 blk_size = sb->s_blocksize;
820 817
821 if (comp_short_keys(&(p_le_ih->ih_key), p_cpu_key)) { 818 if (comp_short_keys(&(p_le_ih->ih_key), p_cpu_key)) {
822 return FILE_NOT_FOUND; 819 return FILE_NOT_FOUND;
@@ -828,10 +825,10 @@ int search_for_position_by_key(struct super_block *sb, /* Pointer to the super b
828 825
829 /* Needed byte is contained in the item pointed to by the path. */ 826 /* Needed byte is contained in the item pointed to by the path. */
830 if (item_offset <= offset && 827 if (item_offset <= offset &&
831 item_offset + op_bytes_number(p_le_ih, n_blk_size) > offset) { 828 item_offset + op_bytes_number(p_le_ih, blk_size) > offset) {
832 pos_in_item(search_path) = offset - item_offset; 829 pos_in_item(search_path) = offset - item_offset;
833 if (is_indirect_le_ih(p_le_ih)) { 830 if (is_indirect_le_ih(p_le_ih)) {
834 pos_in_item(search_path) /= n_blk_size; 831 pos_in_item(search_path) /= blk_size;
835 } 832 }
836 return POSITION_FOUND; 833 return POSITION_FOUND;
837 } 834 }
@@ -891,7 +888,7 @@ static inline int prepare_for_direct_item(struct treepath *path,
891 if (get_inode_item_key_version(inode) == KEY_FORMAT_3_6) { 888 if (get_inode_item_key_version(inode) == KEY_FORMAT_3_6) {
892 // 889 //
893 round_len = ROUND_UP(new_file_length); 890 round_len = ROUND_UP(new_file_length);
894 /* this was n_new_file_length < le_ih ... */ 891 /* this was new_file_length < le_ih ... */
895 if (round_len < le_ih_k_offset(le_ih)) { 892 if (round_len < le_ih_k_offset(le_ih)) {
896 *cut_size = -(IH_SIZE + ih_item_len(le_ih)); 893 *cut_size = -(IH_SIZE + ih_item_len(le_ih));
897 return M_DELETE; /* Delete this item. */ 894 return M_DELETE; /* Delete this item. */
@@ -953,7 +950,7 @@ static inline int prepare_for_direntry_item(struct treepath *path,
953 This function returns a determination of what balance mode the calling function should employ. */ 950 This function returns a determination of what balance mode the calling function should employ. */
954static char prepare_for_delete_or_cut(struct reiserfs_transaction_handle *th, struct inode *inode, struct treepath *path, const struct cpu_key *item_key, int *removed, /* Number of unformatted nodes which were removed 951static char prepare_for_delete_or_cut(struct reiserfs_transaction_handle *th, struct inode *inode, struct treepath *path, const struct cpu_key *item_key, int *removed, /* Number of unformatted nodes which were removed
955 from end of the file. */ 952 from end of the file. */
956 int *cut_size, unsigned long long n_new_file_length /* MAX_KEY_OFFSET in case of delete. */ 953 int *cut_size, unsigned long long new_file_length /* MAX_KEY_OFFSET in case of delete. */
957 ) 954 )
958{ 955{
959 struct super_block *sb = inode->i_sb; 956 struct super_block *sb = inode->i_sb;
@@ -965,7 +962,7 @@ static char prepare_for_delete_or_cut(struct reiserfs_transaction_handle *th, st
965 /* Stat_data item. */ 962 /* Stat_data item. */
966 if (is_statdata_le_ih(p_le_ih)) { 963 if (is_statdata_le_ih(p_le_ih)) {
967 964
968 RFALSE(n_new_file_length != max_reiserfs_offset(inode), 965 RFALSE(new_file_length != max_reiserfs_offset(inode),
969 "PAP-5210: mode must be M_DELETE"); 966 "PAP-5210: mode must be M_DELETE");
970 967
971 *cut_size = -(IH_SIZE + ih_item_len(p_le_ih)); 968 *cut_size = -(IH_SIZE + ih_item_len(p_le_ih));
@@ -975,13 +972,13 @@ static char prepare_for_delete_or_cut(struct reiserfs_transaction_handle *th, st
975 /* Directory item. */ 972 /* Directory item. */
976 if (is_direntry_le_ih(p_le_ih)) 973 if (is_direntry_le_ih(p_le_ih))
977 return prepare_for_direntry_item(path, p_le_ih, inode, 974 return prepare_for_direntry_item(path, p_le_ih, inode,
978 n_new_file_length, 975 new_file_length,
979 cut_size); 976 cut_size);
980 977
981 /* Direct item. */ 978 /* Direct item. */
982 if (is_direct_le_ih(p_le_ih)) 979 if (is_direct_le_ih(p_le_ih))
983 return prepare_for_direct_item(path, p_le_ih, inode, 980 return prepare_for_direct_item(path, p_le_ih, inode,
984 n_new_file_length, cut_size); 981 new_file_length, cut_size);
985 982
986 /* Case of an indirect item. */ 983 /* Case of an indirect item. */
987 { 984 {
@@ -992,10 +989,10 @@ static char prepare_for_delete_or_cut(struct reiserfs_transaction_handle *th, st
992 int result = M_CUT; 989 int result = M_CUT;
993 int pos = 0; 990 int pos = 0;
994 991
995 if ( n_new_file_length == max_reiserfs_offset (inode) ) { 992 if ( new_file_length == max_reiserfs_offset (inode) ) {
996 /* prepare_for_delete_or_cut() is called by 993 /* prepare_for_delete_or_cut() is called by
997 * reiserfs_delete_item() */ 994 * reiserfs_delete_item() */
998 n_new_file_length = 0; 995 new_file_length = 0;
999 delete = 1; 996 delete = 1;
1000 } 997 }
1001 998
@@ -1006,7 +1003,7 @@ static char prepare_for_delete_or_cut(struct reiserfs_transaction_handle *th, st
1006 copy_item_head(&s_ih, PATH_PITEM_HEAD(path)); 1003 copy_item_head(&s_ih, PATH_PITEM_HEAD(path));
1007 pos = I_UNFM_NUM(&s_ih); 1004 pos = I_UNFM_NUM(&s_ih);
1008 1005
1009 while (le_ih_k_offset (&s_ih) + (pos - 1) * blk_size > n_new_file_length) { 1006 while (le_ih_k_offset (&s_ih) + (pos - 1) * blk_size > new_file_length) {
1010 __le32 *unfm; 1007 __le32 *unfm;
1011 __u32 block; 1008 __u32 block;
1012 1009
@@ -1062,35 +1059,34 @@ static char prepare_for_delete_or_cut(struct reiserfs_transaction_handle *th, st
1062} 1059}
1063 1060
1064/* Calculate number of bytes which will be deleted or cut during balance */ 1061/* Calculate number of bytes which will be deleted or cut during balance */
1065static int calc_deleted_bytes_number(struct tree_balance *tb, char c_mode) 1062static int calc_deleted_bytes_number(struct tree_balance *tb, char mode)
1066{ 1063{
1067 int n_del_size; 1064 int del_size;
1068 struct item_head *p_le_ih = PATH_PITEM_HEAD(tb->tb_path); 1065 struct item_head *p_le_ih = PATH_PITEM_HEAD(tb->tb_path);
1069 1066
1070 if (is_statdata_le_ih(p_le_ih)) 1067 if (is_statdata_le_ih(p_le_ih))
1071 return 0; 1068 return 0;
1072 1069
1073 n_del_size = 1070 del_size =
1074 (c_mode == 1071 (mode ==
1075 M_DELETE) ? ih_item_len(p_le_ih) : -tb->insert_size[0]; 1072 M_DELETE) ? ih_item_len(p_le_ih) : -tb->insert_size[0];
1076 if (is_direntry_le_ih(p_le_ih)) { 1073 if (is_direntry_le_ih(p_le_ih)) {
1077 // return EMPTY_DIR_SIZE; /* We delete emty directoris only. */ 1074 /* return EMPTY_DIR_SIZE; We delete emty directoris only.
1078 // we can't use EMPTY_DIR_SIZE, as old format dirs have a different 1075 * we can't use EMPTY_DIR_SIZE, as old format dirs have a different
1079 // empty size. ick. FIXME, is this right? 1076 * empty size. ick. FIXME, is this right? */
1080 // 1077 return del_size;
1081 return n_del_size;
1082 } 1078 }
1083 1079
1084 if (is_indirect_le_ih(p_le_ih)) 1080 if (is_indirect_le_ih(p_le_ih))
1085 n_del_size = (n_del_size / UNFM_P_SIZE) * 1081 del_size = (del_size / UNFM_P_SIZE) *
1086 (PATH_PLAST_BUFFER(tb->tb_path)->b_size); 1082 (PATH_PLAST_BUFFER(tb->tb_path)->b_size);
1087 return n_del_size; 1083 return del_size;
1088} 1084}
1089 1085
1090static void init_tb_struct(struct reiserfs_transaction_handle *th, 1086static void init_tb_struct(struct reiserfs_transaction_handle *th,
1091 struct tree_balance *tb, 1087 struct tree_balance *tb,
1092 struct super_block *sb, 1088 struct super_block *sb,
1093 struct treepath *path, int n_size) 1089 struct treepath *path, int size)
1094{ 1090{
1095 1091
1096 BUG_ON(!th->t_trans_id); 1092 BUG_ON(!th->t_trans_id);
@@ -1101,7 +1097,7 @@ static void init_tb_struct(struct reiserfs_transaction_handle *th,
1101 tb->tb_path = path; 1097 tb->tb_path = path;
1102 PATH_OFFSET_PBUFFER(path, ILLEGAL_PATH_ELEMENT_OFFSET) = NULL; 1098 PATH_OFFSET_PBUFFER(path, ILLEGAL_PATH_ELEMENT_OFFSET) = NULL;
1103 PATH_OFFSET_POSITION(path, ILLEGAL_PATH_ELEMENT_OFFSET) = 0; 1099 PATH_OFFSET_POSITION(path, ILLEGAL_PATH_ELEMENT_OFFSET) = 0;
1104 tb->insert_size[0] = n_size; 1100 tb->insert_size[0] = size;
1105} 1101}
1106 1102
1107void padd_item(char *item, int total_length, int length) 1103void padd_item(char *item, int total_length, int length)
@@ -1156,11 +1152,11 @@ int reiserfs_delete_item(struct reiserfs_transaction_handle *th,
1156 struct item_head s_ih; 1152 struct item_head s_ih;
1157 struct item_head *q_ih; 1153 struct item_head *q_ih;
1158 int quota_cut_bytes; 1154 int quota_cut_bytes;
1159 int n_ret_value, n_del_size, n_removed; 1155 int ret_value, del_size, removed;
1160 1156
1161#ifdef CONFIG_REISERFS_CHECK 1157#ifdef CONFIG_REISERFS_CHECK
1162 char c_mode; 1158 char mode;
1163 int n_iter = 0; 1159 int iter = 0;
1164#endif 1160#endif
1165 1161
1166 BUG_ON(!th->t_trans_id); 1162 BUG_ON(!th->t_trans_id);
@@ -1169,34 +1165,34 @@ int reiserfs_delete_item(struct reiserfs_transaction_handle *th,
1169 0 /*size is unknown */ ); 1165 0 /*size is unknown */ );
1170 1166
1171 while (1) { 1167 while (1) {
1172 n_removed = 0; 1168 removed = 0;
1173 1169
1174#ifdef CONFIG_REISERFS_CHECK 1170#ifdef CONFIG_REISERFS_CHECK
1175 n_iter++; 1171 iter++;
1176 c_mode = 1172 mode =
1177#endif 1173#endif
1178 prepare_for_delete_or_cut(th, inode, path, 1174 prepare_for_delete_or_cut(th, inode, path,
1179 item_key, &n_removed, 1175 item_key, &removed,
1180 &n_del_size, 1176 &del_size,
1181 max_reiserfs_offset(inode)); 1177 max_reiserfs_offset(inode));
1182 1178
1183 RFALSE(c_mode != M_DELETE, "PAP-5320: mode must be M_DELETE"); 1179 RFALSE(mode != M_DELETE, "PAP-5320: mode must be M_DELETE");
1184 1180
1185 copy_item_head(&s_ih, PATH_PITEM_HEAD(path)); 1181 copy_item_head(&s_ih, PATH_PITEM_HEAD(path));
1186 s_del_balance.insert_size[0] = n_del_size; 1182 s_del_balance.insert_size[0] = del_size;
1187 1183
1188 n_ret_value = fix_nodes(M_DELETE, &s_del_balance, NULL, NULL); 1184 ret_value = fix_nodes(M_DELETE, &s_del_balance, NULL, NULL);
1189 if (n_ret_value != REPEAT_SEARCH) 1185 if (ret_value != REPEAT_SEARCH)
1190 break; 1186 break;
1191 1187
1192 PROC_INFO_INC(sb, delete_item_restarted); 1188 PROC_INFO_INC(sb, delete_item_restarted);
1193 1189
1194 // file system changed, repeat search 1190 // file system changed, repeat search
1195 n_ret_value = 1191 ret_value =
1196 search_for_position_by_key(sb, item_key, path); 1192 search_for_position_by_key(sb, item_key, path);
1197 if (n_ret_value == IO_ERROR) 1193 if (ret_value == IO_ERROR)
1198 break; 1194 break;
1199 if (n_ret_value == FILE_NOT_FOUND) { 1195 if (ret_value == FILE_NOT_FOUND) {
1200 reiserfs_warning(sb, "vs-5340", 1196 reiserfs_warning(sb, "vs-5340",
1201 "no items of the file %K found", 1197 "no items of the file %K found",
1202 item_key); 1198 item_key);
@@ -1204,12 +1200,12 @@ int reiserfs_delete_item(struct reiserfs_transaction_handle *th,
1204 } 1200 }
1205 } /* while (1) */ 1201 } /* while (1) */
1206 1202
1207 if (n_ret_value != CARRY_ON) { 1203 if (ret_value != CARRY_ON) {
1208 unfix_nodes(&s_del_balance); 1204 unfix_nodes(&s_del_balance);
1209 return 0; 1205 return 0;
1210 } 1206 }
1211 // reiserfs_delete_item returns item length when success 1207 // reiserfs_delete_item returns item length when success
1212 n_ret_value = calc_deleted_bytes_number(&s_del_balance, M_DELETE); 1208 ret_value = calc_deleted_bytes_number(&s_del_balance, M_DELETE);
1213 q_ih = get_ih(path); 1209 q_ih = get_ih(path);
1214 quota_cut_bytes = ih_item_len(q_ih); 1210 quota_cut_bytes = ih_item_len(q_ih);
1215 1211
@@ -1255,7 +1251,7 @@ int reiserfs_delete_item(struct reiserfs_transaction_handle *th,
1255 off = ((le_ih_k_offset(&s_ih) - 1) & (PAGE_CACHE_SIZE - 1)); 1251 off = ((le_ih_k_offset(&s_ih) - 1) & (PAGE_CACHE_SIZE - 1));
1256 memcpy(data + off, 1252 memcpy(data + off,
1257 B_I_PITEM(PATH_PLAST_BUFFER(path), &s_ih), 1253 B_I_PITEM(PATH_PLAST_BUFFER(path), &s_ih),
1258 n_ret_value); 1254 ret_value);
1259 kunmap_atomic(data, KM_USER0); 1255 kunmap_atomic(data, KM_USER0);
1260 } 1256 }
1261 /* Perform balancing after all resources have been collected at once. */ 1257 /* Perform balancing after all resources have been collected at once. */
@@ -1269,7 +1265,7 @@ int reiserfs_delete_item(struct reiserfs_transaction_handle *th,
1269 DQUOT_FREE_SPACE_NODIRTY(inode, quota_cut_bytes); 1265 DQUOT_FREE_SPACE_NODIRTY(inode, quota_cut_bytes);
1270 1266
1271 /* Return deleted body length */ 1267 /* Return deleted body length */
1272 return n_ret_value; 1268 return ret_value;
1273} 1269}
1274 1270
1275/* Summary Of Mechanisms For Handling Collisions Between Processes: 1271/* Summary Of Mechanisms For Handling Collisions Between Processes:
@@ -1432,13 +1428,13 @@ static int maybe_indirect_to_direct(struct reiserfs_transaction_handle *th,
1432 struct page *page, 1428 struct page *page,
1433 struct treepath *path, 1429 struct treepath *path,
1434 const struct cpu_key *item_key, 1430 const struct cpu_key *item_key,
1435 loff_t n_new_file_size, char *mode) 1431 loff_t new_file_size, char *mode)
1436{ 1432{
1437 struct super_block *sb = inode->i_sb; 1433 struct super_block *sb = inode->i_sb;
1438 int n_block_size = sb->s_blocksize; 1434 int block_size = sb->s_blocksize;
1439 int cut_bytes; 1435 int cut_bytes;
1440 BUG_ON(!th->t_trans_id); 1436 BUG_ON(!th->t_trans_id);
1441 BUG_ON(n_new_file_size != inode->i_size); 1437 BUG_ON(new_file_size != inode->i_size);
1442 1438
1443 /* the page being sent in could be NULL if there was an i/o error 1439 /* the page being sent in could be NULL if there was an i/o error
1444 ** reading in the last block. The user will hit problems trying to 1440 ** reading in the last block. The user will hit problems trying to
@@ -1450,15 +1446,15 @@ static int maybe_indirect_to_direct(struct reiserfs_transaction_handle *th,
1450 /* leave tail in an unformatted node */ 1446 /* leave tail in an unformatted node */
1451 *mode = M_SKIP_BALANCING; 1447 *mode = M_SKIP_BALANCING;
1452 cut_bytes = 1448 cut_bytes =
1453 n_block_size - (n_new_file_size & (n_block_size - 1)); 1449 block_size - (new_file_size & (block_size - 1));
1454 pathrelse(path); 1450 pathrelse(path);
1455 return cut_bytes; 1451 return cut_bytes;
1456 } 1452 }
1457 /* Perform the conversion to a direct_item. */ 1453 /* Perform the conversion to a direct_item. */
1458 /* return indirect_to_direct(inode, path, item_key, 1454 /* return indirect_to_direct(inode, path, item_key,
1459 n_new_file_size, mode); */ 1455 new_file_size, mode); */
1460 return indirect2direct(th, inode, page, path, item_key, 1456 return indirect2direct(th, inode, page, path, item_key,
1461 n_new_file_size, mode); 1457 new_file_size, mode);
1462} 1458}
1463 1459
1464/* we did indirect_to_direct conversion. And we have inserted direct 1460/* we did indirect_to_direct conversion. And we have inserted direct
@@ -1512,7 +1508,7 @@ int reiserfs_cut_from_item(struct reiserfs_transaction_handle *th,
1512 struct treepath *path, 1508 struct treepath *path,
1513 struct cpu_key *item_key, 1509 struct cpu_key *item_key,
1514 struct inode *inode, 1510 struct inode *inode,
1515 struct page *page, loff_t n_new_file_size) 1511 struct page *page, loff_t new_file_size)
1516{ 1512{
1517 struct super_block *sb = inode->i_sb; 1513 struct super_block *sb = inode->i_sb;
1518 /* Every function which is going to call do_balance must first 1514 /* Every function which is going to call do_balance must first
@@ -1521,10 +1517,10 @@ int reiserfs_cut_from_item(struct reiserfs_transaction_handle *th,
1521 After that we can make tree balancing. */ 1517 After that we can make tree balancing. */
1522 struct tree_balance s_cut_balance; 1518 struct tree_balance s_cut_balance;
1523 struct item_head *p_le_ih; 1519 struct item_head *p_le_ih;
1524 int n_cut_size = 0, /* Amount to be cut. */ 1520 int cut_size = 0, /* Amount to be cut. */
1525 n_ret_value = CARRY_ON, n_removed = 0, /* Number of the removed unformatted nodes. */ 1521 ret_value = CARRY_ON, removed = 0, /* Number of the removed unformatted nodes. */
1526 n_is_inode_locked = 0; 1522 is_inode_locked = 0;
1527 char c_mode; /* Mode of the balance. */ 1523 char mode; /* Mode of the balance. */
1528 int retval2 = -1; 1524 int retval2 = -1;
1529 int quota_cut_bytes; 1525 int quota_cut_bytes;
1530 loff_t tail_pos = 0; 1526 loff_t tail_pos = 0;
@@ -1532,7 +1528,7 @@ int reiserfs_cut_from_item(struct reiserfs_transaction_handle *th,
1532 BUG_ON(!th->t_trans_id); 1528 BUG_ON(!th->t_trans_id);
1533 1529
1534 init_tb_struct(th, &s_cut_balance, inode->i_sb, path, 1530 init_tb_struct(th, &s_cut_balance, inode->i_sb, path,
1535 n_cut_size); 1531 cut_size);
1536 1532
1537 /* Repeat this loop until we either cut the item without needing 1533 /* Repeat this loop until we either cut the item without needing
1538 to balance, or we fix_nodes without schedule occurring */ 1534 to balance, or we fix_nodes without schedule occurring */
@@ -1542,30 +1538,30 @@ int reiserfs_cut_from_item(struct reiserfs_transaction_handle *th,
1542 free unformatted nodes which are pointed to by the cut 1538 free unformatted nodes which are pointed to by the cut
1543 pointers. */ 1539 pointers. */
1544 1540
1545 c_mode = 1541 mode =
1546 prepare_for_delete_or_cut(th, inode, path, 1542 prepare_for_delete_or_cut(th, inode, path,
1547 item_key, &n_removed, 1543 item_key, &removed,
1548 &n_cut_size, n_new_file_size); 1544 &cut_size, new_file_size);
1549 if (c_mode == M_CONVERT) { 1545 if (mode == M_CONVERT) {
1550 /* convert last unformatted node to direct item or leave 1546 /* convert last unformatted node to direct item or leave
1551 tail in the unformatted node */ 1547 tail in the unformatted node */
1552 RFALSE(n_ret_value != CARRY_ON, 1548 RFALSE(ret_value != CARRY_ON,
1553 "PAP-5570: can not convert twice"); 1549 "PAP-5570: can not convert twice");
1554 1550
1555 n_ret_value = 1551 ret_value =
1556 maybe_indirect_to_direct(th, inode, page, 1552 maybe_indirect_to_direct(th, inode, page,
1557 path, item_key, 1553 path, item_key,
1558 n_new_file_size, &c_mode); 1554 new_file_size, &mode);
1559 if (c_mode == M_SKIP_BALANCING) 1555 if (mode == M_SKIP_BALANCING)
1560 /* tail has been left in the unformatted node */ 1556 /* tail has been left in the unformatted node */
1561 return n_ret_value; 1557 return ret_value;
1562 1558
1563 n_is_inode_locked = 1; 1559 is_inode_locked = 1;
1564 1560
1565 /* removing of last unformatted node will change value we 1561 /* removing of last unformatted node will change value we
1566 have to return to truncate. Save it */ 1562 have to return to truncate. Save it */
1567 retval2 = n_ret_value; 1563 retval2 = ret_value;
1568 /*retval2 = sb->s_blocksize - (n_new_file_size & (sb->s_blocksize - 1)); */ 1564 /*retval2 = sb->s_blocksize - (new_file_size & (sb->s_blocksize - 1)); */
1569 1565
1570 /* So, we have performed the first part of the conversion: 1566 /* So, we have performed the first part of the conversion:
1571 inserting the new direct item. Now we are removing the 1567 inserting the new direct item. Now we are removing the
@@ -1573,10 +1569,10 @@ int reiserfs_cut_from_item(struct reiserfs_transaction_handle *th,
1573 it. */ 1569 it. */
1574 set_cpu_key_k_type(item_key, TYPE_INDIRECT); 1570 set_cpu_key_k_type(item_key, TYPE_INDIRECT);
1575 item_key->key_length = 4; 1571 item_key->key_length = 4;
1576 n_new_file_size -= 1572 new_file_size -=
1577 (n_new_file_size & (sb->s_blocksize - 1)); 1573 (new_file_size & (sb->s_blocksize - 1));
1578 tail_pos = n_new_file_size; 1574 tail_pos = new_file_size;
1579 set_cpu_key_k_offset(item_key, n_new_file_size + 1); 1575 set_cpu_key_k_offset(item_key, new_file_size + 1);
1580 if (search_for_position_by_key 1576 if (search_for_position_by_key
1581 (sb, item_key, 1577 (sb, item_key,
1582 path) == POSITION_NOT_FOUND) { 1578 path) == POSITION_NOT_FOUND) {
@@ -1589,38 +1585,38 @@ int reiserfs_cut_from_item(struct reiserfs_transaction_handle *th,
1589 } 1585 }
1590 continue; 1586 continue;
1591 } 1587 }
1592 if (n_cut_size == 0) { 1588 if (cut_size == 0) {
1593 pathrelse(path); 1589 pathrelse(path);
1594 return 0; 1590 return 0;
1595 } 1591 }
1596 1592
1597 s_cut_balance.insert_size[0] = n_cut_size; 1593 s_cut_balance.insert_size[0] = cut_size;
1598 1594
1599 n_ret_value = fix_nodes(c_mode, &s_cut_balance, NULL, NULL); 1595 ret_value = fix_nodes(mode, &s_cut_balance, NULL, NULL);
1600 if (n_ret_value != REPEAT_SEARCH) 1596 if (ret_value != REPEAT_SEARCH)
1601 break; 1597 break;
1602 1598
1603 PROC_INFO_INC(sb, cut_from_item_restarted); 1599 PROC_INFO_INC(sb, cut_from_item_restarted);
1604 1600
1605 n_ret_value = 1601 ret_value =
1606 search_for_position_by_key(sb, item_key, path); 1602 search_for_position_by_key(sb, item_key, path);
1607 if (n_ret_value == POSITION_FOUND) 1603 if (ret_value == POSITION_FOUND)
1608 continue; 1604 continue;
1609 1605
1610 reiserfs_warning(sb, "PAP-5610", "item %K not found", 1606 reiserfs_warning(sb, "PAP-5610", "item %K not found",
1611 item_key); 1607 item_key);
1612 unfix_nodes(&s_cut_balance); 1608 unfix_nodes(&s_cut_balance);
1613 return (n_ret_value == IO_ERROR) ? -EIO : -ENOENT; 1609 return (ret_value == IO_ERROR) ? -EIO : -ENOENT;
1614 } /* while */ 1610 } /* while */
1615 1611
1616 // check fix_nodes results (IO_ERROR or NO_DISK_SPACE) 1612 // check fix_nodes results (IO_ERROR or NO_DISK_SPACE)
1617 if (n_ret_value != CARRY_ON) { 1613 if (ret_value != CARRY_ON) {
1618 if (n_is_inode_locked) { 1614 if (is_inode_locked) {
1619 // FIXME: this seems to be not needed: we are always able 1615 // FIXME: this seems to be not needed: we are always able
1620 // to cut item 1616 // to cut item
1621 indirect_to_direct_roll_back(th, inode, path); 1617 indirect_to_direct_roll_back(th, inode, path);
1622 } 1618 }
1623 if (n_ret_value == NO_DISK_SPACE) 1619 if (ret_value == NO_DISK_SPACE)
1624 reiserfs_warning(sb, "reiserfs-5092", 1620 reiserfs_warning(sb, "reiserfs-5092",
1625 "NO_DISK_SPACE"); 1621 "NO_DISK_SPACE");
1626 unfix_nodes(&s_cut_balance); 1622 unfix_nodes(&s_cut_balance);
@@ -1629,24 +1625,24 @@ int reiserfs_cut_from_item(struct reiserfs_transaction_handle *th,
1629 1625
1630 /* go ahead and perform balancing */ 1626 /* go ahead and perform balancing */
1631 1627
1632 RFALSE(c_mode == M_PASTE || c_mode == M_INSERT, "invalid mode"); 1628 RFALSE(mode == M_PASTE || mode == M_INSERT, "invalid mode");
1633 1629
1634 /* Calculate number of bytes that need to be cut from the item. */ 1630 /* Calculate number of bytes that need to be cut from the item. */
1635 quota_cut_bytes = 1631 quota_cut_bytes =
1636 (c_mode == 1632 (mode ==
1637 M_DELETE) ? ih_item_len(get_ih(path)) : -s_cut_balance. 1633 M_DELETE) ? ih_item_len(get_ih(path)) : -s_cut_balance.
1638 insert_size[0]; 1634 insert_size[0];
1639 if (retval2 == -1) 1635 if (retval2 == -1)
1640 n_ret_value = calc_deleted_bytes_number(&s_cut_balance, c_mode); 1636 ret_value = calc_deleted_bytes_number(&s_cut_balance, mode);
1641 else 1637 else
1642 n_ret_value = retval2; 1638 ret_value = retval2;
1643 1639
1644 /* For direct items, we only change the quota when deleting the last 1640 /* For direct items, we only change the quota when deleting the last
1645 ** item. 1641 ** item.
1646 */ 1642 */
1647 p_le_ih = PATH_PITEM_HEAD(s_cut_balance.tb_path); 1643 p_le_ih = PATH_PITEM_HEAD(s_cut_balance.tb_path);
1648 if (!S_ISLNK(inode->i_mode) && is_direct_le_ih(p_le_ih)) { 1644 if (!S_ISLNK(inode->i_mode) && is_direct_le_ih(p_le_ih)) {
1649 if (c_mode == M_DELETE && 1645 if (mode == M_DELETE &&
1650 (le_ih_k_offset(p_le_ih) & (sb->s_blocksize - 1)) == 1646 (le_ih_k_offset(p_le_ih) & (sb->s_blocksize - 1)) ==
1651 1) { 1647 1) {
1652 // FIXME: this is to keep 3.5 happy 1648 // FIXME: this is to keep 3.5 happy
@@ -1657,7 +1653,7 @@ int reiserfs_cut_from_item(struct reiserfs_transaction_handle *th,
1657 } 1653 }
1658 } 1654 }
1659#ifdef CONFIG_REISERFS_CHECK 1655#ifdef CONFIG_REISERFS_CHECK
1660 if (n_is_inode_locked) { 1656 if (is_inode_locked) {
1661 struct item_head *le_ih = 1657 struct item_head *le_ih =
1662 PATH_PITEM_HEAD(s_cut_balance.tb_path); 1658 PATH_PITEM_HEAD(s_cut_balance.tb_path);
1663 /* we are going to complete indirect2direct conversion. Make 1659 /* we are going to complete indirect2direct conversion. Make
@@ -1667,13 +1663,13 @@ int reiserfs_cut_from_item(struct reiserfs_transaction_handle *th,
1667 reiserfs_panic(sb, "vs-5652", 1663 reiserfs_panic(sb, "vs-5652",
1668 "item must be indirect %h", le_ih); 1664 "item must be indirect %h", le_ih);
1669 1665
1670 if (c_mode == M_DELETE && ih_item_len(le_ih) != UNFM_P_SIZE) 1666 if (mode == M_DELETE && ih_item_len(le_ih) != UNFM_P_SIZE)
1671 reiserfs_panic(sb, "vs-5653", "completing " 1667 reiserfs_panic(sb, "vs-5653", "completing "
1672 "indirect2direct conversion indirect " 1668 "indirect2direct conversion indirect "
1673 "item %h being deleted must be of " 1669 "item %h being deleted must be of "
1674 "4 byte long", le_ih); 1670 "4 byte long", le_ih);
1675 1671
1676 if (c_mode == M_CUT 1672 if (mode == M_CUT
1677 && s_cut_balance.insert_size[0] != -UNFM_P_SIZE) { 1673 && s_cut_balance.insert_size[0] != -UNFM_P_SIZE) {
1678 reiserfs_panic(sb, "vs-5654", "can not complete " 1674 reiserfs_panic(sb, "vs-5654", "can not complete "
1679 "indirect2direct conversion of %h " 1675 "indirect2direct conversion of %h "
@@ -1685,8 +1681,8 @@ int reiserfs_cut_from_item(struct reiserfs_transaction_handle *th,
1685 } 1681 }
1686#endif 1682#endif
1687 1683
1688 do_balance(&s_cut_balance, NULL, NULL, c_mode); 1684 do_balance(&s_cut_balance, NULL, NULL, mode);
1689 if (n_is_inode_locked) { 1685 if (is_inode_locked) {
1690 /* we've done an indirect->direct conversion. when the data block 1686 /* we've done an indirect->direct conversion. when the data block
1691 ** was freed, it was removed from the list of blocks that must 1687 ** was freed, it was removed from the list of blocks that must
1692 ** be flushed before the transaction commits, make sure to 1688 ** be flushed before the transaction commits, make sure to
@@ -1701,7 +1697,7 @@ int reiserfs_cut_from_item(struct reiserfs_transaction_handle *th,
1701 quota_cut_bytes, inode->i_uid, '?'); 1697 quota_cut_bytes, inode->i_uid, '?');
1702#endif 1698#endif
1703 DQUOT_FREE_SPACE_NODIRTY(inode, quota_cut_bytes); 1699 DQUOT_FREE_SPACE_NODIRTY(inode, quota_cut_bytes);
1704 return n_ret_value; 1700 return ret_value;
1705} 1701}
1706 1702
1707static void truncate_directory(struct reiserfs_transaction_handle *th, 1703static void truncate_directory(struct reiserfs_transaction_handle *th,
@@ -1733,9 +1729,9 @@ int reiserfs_do_truncate(struct reiserfs_transaction_handle *th,
1733 INITIALIZE_PATH(s_search_path); /* Path to the current object item. */ 1729 INITIALIZE_PATH(s_search_path); /* Path to the current object item. */
1734 struct item_head *p_le_ih; /* Pointer to an item header. */ 1730 struct item_head *p_le_ih; /* Pointer to an item header. */
1735 struct cpu_key s_item_key; /* Key to search for a previous file item. */ 1731 struct cpu_key s_item_key; /* Key to search for a previous file item. */
1736 loff_t n_file_size, /* Old file size. */ 1732 loff_t file_size, /* Old file size. */
1737 n_new_file_size; /* New file size. */ 1733 new_file_size; /* New file size. */
1738 int n_deleted; /* Number of deleted or truncated bytes. */ 1734 int deleted; /* Number of deleted or truncated bytes. */
1739 int retval; 1735 int retval;
1740 int err = 0; 1736 int err = 0;
1741 1737
@@ -1752,7 +1748,7 @@ int reiserfs_do_truncate(struct reiserfs_transaction_handle *th,
1752 } 1748 }
1753 1749
1754 /* Get new file size. */ 1750 /* Get new file size. */
1755 n_new_file_size = inode->i_size; 1751 new_file_size = inode->i_size;
1756 1752
1757 // FIXME: note, that key type is unimportant here 1753 // FIXME: note, that key type is unimportant here
1758 make_cpu_key(&s_item_key, inode, max_reiserfs_offset(inode), 1754 make_cpu_key(&s_item_key, inode, max_reiserfs_offset(inode),
@@ -1782,7 +1778,7 @@ int reiserfs_do_truncate(struct reiserfs_transaction_handle *th,
1782 /* Get real file size (total length of all file items) */ 1778 /* Get real file size (total length of all file items) */
1783 p_le_ih = PATH_PITEM_HEAD(&s_search_path); 1779 p_le_ih = PATH_PITEM_HEAD(&s_search_path);
1784 if (is_statdata_le_ih(p_le_ih)) 1780 if (is_statdata_le_ih(p_le_ih))
1785 n_file_size = 0; 1781 file_size = 0;
1786 else { 1782 else {
1787 loff_t offset = le_ih_k_offset(p_le_ih); 1783 loff_t offset = le_ih_k_offset(p_le_ih);
1788 int bytes = 1784 int bytes =
@@ -1791,42 +1787,42 @@ int reiserfs_do_truncate(struct reiserfs_transaction_handle *th,
1791 /* this may mismatch with real file size: if last direct item 1787 /* this may mismatch with real file size: if last direct item
1792 had no padding zeros and last unformatted node had no free 1788 had no padding zeros and last unformatted node had no free
1793 space, this file would have this file size */ 1789 space, this file would have this file size */
1794 n_file_size = offset + bytes - 1; 1790 file_size = offset + bytes - 1;
1795 } 1791 }
1796 /* 1792 /*
1797 * are we doing a full truncate or delete, if so 1793 * are we doing a full truncate or delete, if so
1798 * kick in the reada code 1794 * kick in the reada code
1799 */ 1795 */
1800 if (n_new_file_size == 0) 1796 if (new_file_size == 0)
1801 s_search_path.reada = PATH_READA | PATH_READA_BACK; 1797 s_search_path.reada = PATH_READA | PATH_READA_BACK;
1802 1798
1803 if (n_file_size == 0 || n_file_size < n_new_file_size) { 1799 if (file_size == 0 || file_size < new_file_size) {
1804 goto update_and_out; 1800 goto update_and_out;
1805 } 1801 }
1806 1802
1807 /* Update key to search for the last file item. */ 1803 /* Update key to search for the last file item. */
1808 set_cpu_key_k_offset(&s_item_key, n_file_size); 1804 set_cpu_key_k_offset(&s_item_key, file_size);
1809 1805
1810 do { 1806 do {
1811 /* Cut or delete file item. */ 1807 /* Cut or delete file item. */
1812 n_deleted = 1808 deleted =
1813 reiserfs_cut_from_item(th, &s_search_path, &s_item_key, 1809 reiserfs_cut_from_item(th, &s_search_path, &s_item_key,
1814 inode, page, n_new_file_size); 1810 inode, page, new_file_size);
1815 if (n_deleted < 0) { 1811 if (deleted < 0) {
1816 reiserfs_warning(inode->i_sb, "vs-5665", 1812 reiserfs_warning(inode->i_sb, "vs-5665",
1817 "reiserfs_cut_from_item failed"); 1813 "reiserfs_cut_from_item failed");
1818 reiserfs_check_path(&s_search_path); 1814 reiserfs_check_path(&s_search_path);
1819 return 0; 1815 return 0;
1820 } 1816 }
1821 1817
1822 RFALSE(n_deleted > n_file_size, 1818 RFALSE(deleted > file_size,
1823 "PAP-5670: reiserfs_cut_from_item: too many bytes deleted: deleted %d, file_size %lu, item_key %K", 1819 "PAP-5670: reiserfs_cut_from_item: too many bytes deleted: deleted %d, file_size %lu, item_key %K",
1824 n_deleted, n_file_size, &s_item_key); 1820 deleted, file_size, &s_item_key);
1825 1821
1826 /* Change key to search the last file item. */ 1822 /* Change key to search the last file item. */
1827 n_file_size -= n_deleted; 1823 file_size -= deleted;
1828 1824
1829 set_cpu_key_k_offset(&s_item_key, n_file_size); 1825 set_cpu_key_k_offset(&s_item_key, file_size);
1830 1826
1831 /* While there are bytes to truncate and previous file item is presented in the tree. */ 1827 /* While there are bytes to truncate and previous file item is presented in the tree. */
1832 1828
@@ -1857,13 +1853,13 @@ int reiserfs_do_truncate(struct reiserfs_transaction_handle *th,
1857 goto out; 1853 goto out;
1858 reiserfs_update_inode_transaction(inode); 1854 reiserfs_update_inode_transaction(inode);
1859 } 1855 }
1860 } while (n_file_size > ROUND_UP(n_new_file_size) && 1856 } while (file_size > ROUND_UP(new_file_size) &&
1861 search_for_position_by_key(inode->i_sb, &s_item_key, 1857 search_for_position_by_key(inode->i_sb, &s_item_key,
1862 &s_search_path) == POSITION_FOUND); 1858 &s_search_path) == POSITION_FOUND);
1863 1859
1864 RFALSE(n_file_size > ROUND_UP(n_new_file_size), 1860 RFALSE(file_size > ROUND_UP(new_file_size),
1865 "PAP-5680: truncate did not finish: new_file_size %Ld, current %Ld, oid %d", 1861 "PAP-5680: truncate did not finish: new_file_size %Ld, current %Ld, oid %d",
1866 n_new_file_size, n_file_size, s_item_key.on_disk_key.k_objectid); 1862 new_file_size, file_size, s_item_key.on_disk_key.k_objectid);
1867 1863
1868 update_and_out: 1864 update_and_out:
1869 if (update_timestamps) { 1865 if (update_timestamps) {
@@ -1918,7 +1914,7 @@ int reiserfs_paste_into_item(struct reiserfs_transaction_handle *th, struct tree
1918 const struct cpu_key *key, /* Key to search for the needed item. */ 1914 const struct cpu_key *key, /* Key to search for the needed item. */
1919 struct inode *inode, /* Inode item belongs to */ 1915 struct inode *inode, /* Inode item belongs to */
1920 const char *body, /* Pointer to the bytes to paste. */ 1916 const char *body, /* Pointer to the bytes to paste. */
1921 int n_pasted_size) 1917 int pasted_size)
1922{ /* Size of pasted bytes. */ 1918{ /* Size of pasted bytes. */
1923 struct tree_balance s_paste_balance; 1919 struct tree_balance s_paste_balance;
1924 int retval; 1920 int retval;
@@ -1931,16 +1927,16 @@ int reiserfs_paste_into_item(struct reiserfs_transaction_handle *th, struct tree
1931#ifdef REISERQUOTA_DEBUG 1927#ifdef REISERQUOTA_DEBUG
1932 reiserfs_debug(inode->i_sb, REISERFS_DEBUG_CODE, 1928 reiserfs_debug(inode->i_sb, REISERFS_DEBUG_CODE,
1933 "reiserquota paste_into_item(): allocating %u id=%u type=%c", 1929 "reiserquota paste_into_item(): allocating %u id=%u type=%c",
1934 n_pasted_size, inode->i_uid, 1930 pasted_size, inode->i_uid,
1935 key2type(&(key->on_disk_key))); 1931 key2type(&(key->on_disk_key)));
1936#endif 1932#endif
1937 1933
1938 if (DQUOT_ALLOC_SPACE_NODIRTY(inode, n_pasted_size)) { 1934 if (DQUOT_ALLOC_SPACE_NODIRTY(inode, pasted_size)) {
1939 pathrelse(search_path); 1935 pathrelse(search_path);
1940 return -EDQUOT; 1936 return -EDQUOT;
1941 } 1937 }
1942 init_tb_struct(th, &s_paste_balance, th->t_super, search_path, 1938 init_tb_struct(th, &s_paste_balance, th->t_super, search_path,
1943 n_pasted_size); 1939 pasted_size);
1944#ifdef DISPLACE_NEW_PACKING_LOCALITIES 1940#ifdef DISPLACE_NEW_PACKING_LOCALITIES
1945 s_paste_balance.key = key->on_disk_key; 1941 s_paste_balance.key = key->on_disk_key;
1946#endif 1942#endif
@@ -1988,10 +1984,10 @@ int reiserfs_paste_into_item(struct reiserfs_transaction_handle *th, struct tree
1988#ifdef REISERQUOTA_DEBUG 1984#ifdef REISERQUOTA_DEBUG
1989 reiserfs_debug(inode->i_sb, REISERFS_DEBUG_CODE, 1985 reiserfs_debug(inode->i_sb, REISERFS_DEBUG_CODE,
1990 "reiserquota paste_into_item(): freeing %u id=%u type=%c", 1986 "reiserquota paste_into_item(): freeing %u id=%u type=%c",
1991 n_pasted_size, inode->i_uid, 1987 pasted_size, inode->i_uid,
1992 key2type(&(key->on_disk_key))); 1988 key2type(&(key->on_disk_key)));
1993#endif 1989#endif
1994 DQUOT_FREE_SPACE_NODIRTY(inode, n_pasted_size); 1990 DQUOT_FREE_SPACE_NODIRTY(inode, pasted_size);
1995 return retval; 1991 return retval;
1996} 1992}
1997 1993