aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ext4/namei.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ext4/namei.c')
-rw-r--r--fs/ext4/namei.c52
1 files changed, 25 insertions, 27 deletions
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
index f98b9994e36c..8b1bd03d20f5 100644
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -241,13 +241,13 @@ static inline unsigned dx_node_limit (struct inode *dir)
241#ifdef DX_DEBUG 241#ifdef DX_DEBUG
242static void dx_show_index (char * label, struct dx_entry *entries) 242static void dx_show_index (char * label, struct dx_entry *entries)
243{ 243{
244 int i, n = dx_get_count (entries); 244 int i, n = dx_get_count (entries);
245 printk("%s index ", label); 245 printk("%s index ", label);
246 for (i = 0; i < n; i++) 246 for (i = 0; i < n; i++) {
247 { 247 printk("%x->%u ", i? dx_get_hash(entries + i) :
248 printk("%x->%u ", i? dx_get_hash(entries + i): 0, dx_get_block(entries + i)); 248 0, dx_get_block(entries + i));
249 } 249 }
250 printk("\n"); 250 printk("\n");
251} 251}
252 252
253struct stats 253struct stats
@@ -688,28 +688,26 @@ static int dx_make_map (struct ext4_dir_entry_2 *de, int size,
688 688
689static void dx_sort_map (struct dx_map_entry *map, unsigned count) 689static void dx_sort_map (struct dx_map_entry *map, unsigned count)
690{ 690{
691 struct dx_map_entry *p, *q, *top = map + count - 1; 691 struct dx_map_entry *p, *q, *top = map + count - 1;
692 int more; 692 int more;
693 /* Combsort until bubble sort doesn't suck */ 693 /* Combsort until bubble sort doesn't suck */
694 while (count > 2) 694 while (count > 2) {
695 { 695 count = count*10/13;
696 count = count*10/13; 696 if (count - 9 < 2) /* 9, 10 -> 11 */
697 if (count - 9 < 2) /* 9, 10 -> 11 */ 697 count = 11;
698 count = 11; 698 for (p = top, q = p - count; q >= map; p--, q--)
699 for (p = top, q = p - count; q >= map; p--, q--) 699 if (p->hash < q->hash)
700 if (p->hash < q->hash) 700 swap(*p, *q);
701 swap(*p, *q); 701 }
702 } 702 /* Garden variety bubble sort */
703 /* Garden variety bubble sort */ 703 do {
704 do { 704 more = 0;
705 more = 0; 705 q = top;
706 q = top; 706 while (q-- > map) {
707 while (q-- > map) 707 if (q[1].hash >= q[0].hash)
708 {
709 if (q[1].hash >= q[0].hash)
710 continue; 708 continue;
711 swap(*(q+1), *q); 709 swap(*(q+1), *q);
712 more = 1; 710 more = 1;
713 } 711 }
714 } while(more); 712 } while(more);
715} 713}