fs/ntfs3: Make binary search to search smaller chunks in beginning

We could try to optimize algorithm to first fill just small table and
after that use bigger table all the way up to ARRAY_SIZE(offs). This
way we can use bigger search array, but not lose benefits with entry
count smaller < ARRAY_SIZE(offs).

Signed-off-by: Kari Argillander <kari.argillander@gmail.com>
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
This commit is contained in:
Kari Argillander 2021-09-02 18:40:49 +03:00 committed by Konstantin Komarov
parent 162333efa8
commit ef9297007e
No known key found for this signature in database
GPG Key ID: A9B0331F832407B6

View File

@ -8,6 +8,7 @@
#include <linux/blkdev.h>
#include <linux/buffer_head.h>
#include <linux/fs.h>
#include <linux/kernel.h>
#include "debug.h"
#include "ntfs.h"
@ -679,8 +680,9 @@ static struct NTFS_DE *hdr_find_e(const struct ntfs_index *indx,
#ifdef NTFS3_INDEX_BINARY_SEARCH
struct NTFS_DE *found = NULL;
int min_idx = 0, mid_idx, max_idx = 0;
int table_size = 8;
int diff2;
u16 offs[64];
u16 offs[128];
if (end > 0x10000)
goto next;
@ -700,7 +702,7 @@ fill_table:
off += e_size;
max_idx++;
if (max_idx < ARRAY_SIZE(offs))
if (max_idx < table_size)
goto fill_table;
max_idx--;
@ -718,6 +720,7 @@ binary_search:
return NULL;
max_idx = 0;
table_size = min(table_size * 2, 128);
goto fill_table;
}
} else if (diff2 < 0) {