Blame SOURCES/0053-fs-ntfs3-Make-binary-search-to-search-smaller-chunks.patch

Kmods SIG 63c143
From ef9297007e9904588682699e618c56401f61d1c2 Mon Sep 17 00:00:00 2001
Kmods SIG 63c143
From: Kari Argillander <kari.argillander@gmail.com>
Kmods SIG 63c143
Date: Thu, 2 Sep 2021 18:40:49 +0300
Kmods SIG 63c143
Subject: [Backport ef9297007e99] src: Make binary search to search
Kmods SIG 63c143
 smaller chunks in beginning
Kmods SIG 63c143
Kmods SIG 63c143
We could try to optimize algorithm to first fill just small table and
Kmods SIG 63c143
after that use bigger table all the way up to ARRAY_SIZE(offs). This
Kmods SIG 63c143
way we can use bigger search array, but not lose benefits with entry
Kmods SIG 63c143
count smaller < ARRAY_SIZE(offs).
Kmods SIG 63c143
Kmods SIG 63c143
Signed-off-by: Kari Argillander <kari.argillander@gmail.com>
Kmods SIG 63c143
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Kmods SIG 63c143
---
Kmods SIG 63c143
 src/index.c | 7 +++++--
Kmods SIG 63c143
 1 file changed, 5 insertions(+), 2 deletions(-)
Kmods SIG 63c143
Kmods SIG 63c143
diff --git a/src/index.c b/src/index.c
Kmods SIG 63c143
index a16256ab3e9ffd5bcc660c602194c9bd2de7cfc9..3ad1ee608e531ea7c7793e691fe706ee0a6c33a4 100644
Kmods SIG 63c143
--- a/src/index.c
Kmods SIG 63c143
+++ b/src/index.c
Kmods SIG 63c143
@@ -8,6 +8,7 @@
Kmods SIG 63c143
 #include <linux/blkdev.h>
Kmods SIG 63c143
 #include <linux/buffer_head.h>
Kmods SIG 63c143
 #include <linux/fs.h>
Kmods SIG 63c143
+#include <linux/kernel.h>
Kmods SIG 63c143
 
Kmods SIG 63c143
 #include "debug.h"
Kmods SIG 63c143
 #include "ntfs.h"
Kmods SIG 63c143
@@ -679,8 +680,9 @@ static struct NTFS_DE *hdr_find_e(const struct ntfs_index *indx,
Kmods SIG 63c143
 #ifdef NTFS3_INDEX_BINARY_SEARCH
Kmods SIG 63c143
 	struct NTFS_DE *found = NULL;
Kmods SIG 63c143
 	int min_idx = 0, mid_idx, max_idx = 0;
Kmods SIG 63c143
+	int table_size = 8;
Kmods SIG 63c143
 	int diff2;
Kmods SIG 63c143
-	u16 offs[64];
Kmods SIG 63c143
+	u16 offs[128];
Kmods SIG 63c143
 
Kmods SIG 63c143
 	if (end > 0x10000)
Kmods SIG 63c143
 		goto next;
Kmods SIG 63c143
@@ -700,7 +702,7 @@ static struct NTFS_DE *hdr_find_e(const struct ntfs_index *indx,
Kmods SIG 63c143
 		off += e_size;
Kmods SIG 63c143
 
Kmods SIG 63c143
 		max_idx++;
Kmods SIG 63c143
-		if (max_idx < ARRAY_SIZE(offs))
Kmods SIG 63c143
+		if (max_idx < table_size)
Kmods SIG 63c143
 			goto fill_table;
Kmods SIG 63c143
 
Kmods SIG 63c143
 		max_idx--;
Kmods SIG 63c143
@@ -718,6 +720,7 @@ static struct NTFS_DE *hdr_find_e(const struct ntfs_index *indx,
Kmods SIG 63c143
 				return NULL;
Kmods SIG 63c143
 
Kmods SIG 63c143
 			max_idx = 0;
Kmods SIG 63c143
+			table_size = min(table_size * 2, 128);
Kmods SIG 63c143
 			goto fill_table;
Kmods SIG 63c143
 		}
Kmods SIG 63c143
 	} else if (diff2 < 0) {
Kmods SIG 63c143
-- 
Kmods SIG 63c143
2.31.1
Kmods SIG 63c143