From: gkostka Date: Sat, 20 May 2017 07:23:54 +0000 (+0200) Subject: ext4_dir_idx: make qsort as a default dir idx sort algorithm X-Git-Url: https://git.carlh.net/gitweb/?p=lwext4.git;a=commitdiff_plain;h=dee6a10ab37fef64f47ddfadeae02a9449fb9294 ext4_dir_idx: make qsort as a default dir idx sort algorithm --- diff --git a/include/ext4_config.h b/include/ext4_config.h index 8b8c6d8..56cabf2 100644 --- a/include/ext4_config.h +++ b/include/ext4_config.h @@ -88,11 +88,6 @@ extern "C" { #define CONFIG_JOURNALING_ENABLE 1 #endif -/**@brief Enable directory indexing comb sort*/ -#ifndef CONFIG_DIR_INDEX_COMB_SORT -#define CONFIG_DIR_INDEX_COMB_SORT 1 -#endif - /**@brief Include error codes from ext4_errno or standard library.*/ #ifndef CONFIG_HAVE_OWN_ERRNO #define CONFIG_HAVE_OWN_ERRNO 0 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;