Unverified Commit ef929700 authored by Kari Argillander's avatar Kari Argillander Committed by Konstantin Komarov
Browse files

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: default avatarKari Argillander <kari.argillander@gmail.com>
Signed-off-by: default avatarKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
parent 162333ef
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -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 @@ static struct NTFS_DE *hdr_find_e(const struct ntfs_index *indx,
		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 @@ static struct NTFS_DE *hdr_find_e(const struct ntfs_index *indx,
				return NULL;

			max_idx = 0;
			table_size = min(table_size * 2, 128);
			goto fill_table;
		}
	} else if (diff2 < 0) {