diff options
| author | gkostka <kostka.grzegorz@gmail.com> | 2017-05-20 09:23:54 +0200 |
|---|---|---|
| committer | gkostka <kostka.grzegorz@gmail.com> | 2017-05-20 10:12:47 +0200 |
| commit | dee6a10ab37fef64f47ddfadeae02a9449fb9294 (patch) | |
| tree | 3c955699e4a36b4cc325edd73bb975227a11fe23 /src | |
| parent | b1a34c56f4556f256fc16096190e77b69a715197 (diff) | |
ext4_dir_idx: make qsort as a default dir idx sort algorithm
Diffstat (limited to 'src')
| -rw-r--r-- | src/ext4_dir_idx.c | 43 |
1 files changed, 1 insertions, 42 deletions
diff --git a/src/ext4_dir_idx.c b/src/ext4_dir_idx.c index e1efa28..b56e9fe 100644 --- a/src/ext4_dir_idx.c +++ b/src/ext4_dir_idx.c @@ -830,42 +830,6 @@ cleanup: return rc; } -#if CONFIG_DIR_INDEX_COMB_SORT -#define SWAP_ENTRY(se1, se2) \ - do { \ - struct ext4_dx_sort_entry tmp = se1; \ - se1 = se2; \ - se2 = tmp; \ - \ -} while (0) - -static void comb_sort(struct ext4_dx_sort_entry *se, uint32_t count) -{ - struct ext4_dx_sort_entry *p, *q, *top = se + count - 1; - bool more; - /* Combsort */ - while (count > 2) { - count = (count * 10) / 13; - if (count - 9 < 2) - count = 11; - for (p = top, q = p - count; q >= se; p--, q--) - if (p->hash < q->hash) - SWAP_ENTRY(*p, *q); - } - /* Bubblesort */ - do { - more = 0; - q = top; - while (q-- > se) { - if (q[1].hash >= q[0].hash) - continue; - SWAP_ENTRY(*(q + 1), *q); - more = 1; - } - } while (more); -} -#else - /**@brief Compare function used to pass in quicksort implementation. * It can compare two entries by hash value. * @param arg1 First entry @@ -888,7 +852,6 @@ static int ext4_dir_dx_entry_comparator(const void *arg1, const void *arg2) else return 1; } -#endif /**@brief Insert new index entry to block. * Note that space for new entry must be checked by caller. @@ -996,13 +959,9 @@ static int ext4_dir_dx_split_data(struct ext4_inode_ref *inode_ref, de = (void *)((uint8_t *)de + elen); } -/* Sort all entries */ -#if CONFIG_DIR_INDEX_COMB_SORT - comb_sort(sort, idx); -#else qsort(sort, idx, sizeof(struct ext4_dx_sort_entry), ext4_dir_dx_entry_comparator); -#endif + /* Allocate new block for store the second part of entries */ ext4_fsblk_t new_fblock; uint32_t new_iblock; |
