aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/fs/ntfs3/index.c
diff options
context:
space:
mode:
authorKari Argillander <kari.argillander@gmail.com>2021-09-02 18:40:50 +0300
committerKonstantin Komarov <almaz.alexandrovich@paragon-software.com>2021-09-13 19:41:47 +0300
commit8e69212253d320d4768071086b1111e6ab91d9bd (patch)
tree76b09c06f3f4532015cb87f80459956bb0504a45 /fs/ntfs3/index.c
parentfs/ntfs3: Make binary search to search smaller chunks in beginning (diff)
downloadwireguard-linux-8e69212253d320d4768071086b1111e6ab91d9bd.tar.xz
wireguard-linux-8e69212253d320d4768071086b1111e6ab91d9bd.zip
fs/ntfs3: Always use binary search with entry search
We do not have any reason to keep old linear search in. Before this was used for error path or if table was so big that it cannot be allocated. Current binary search implementation won't need error path. Remove old references to linear entry search. Signed-off-by: Kari Argillander <kari.argillander@gmail.com> Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
Diffstat (limited to 'fs/ntfs3/index.c')
-rw-r--r--fs/ntfs3/index.c50
1 files changed, 6 insertions, 44 deletions
diff --git a/fs/ntfs3/index.c b/fs/ntfs3/index.c
index 3ad1ee608e53..4f71a91f07d9 100644
--- a/fs/ntfs3/index.c
+++ b/fs/ntfs3/index.c
@@ -671,22 +671,16 @@ static struct NTFS_DE *hdr_find_e(const struct ntfs_index *indx,
const struct INDEX_HDR *hdr, const void *key,
size_t key_len, const void *ctx, int *diff)
{
- struct NTFS_DE *e;
+ struct NTFS_DE *e, *found = NULL;
NTFS_CMP_FUNC cmp = indx->cmp;
+ int min_idx = 0, mid_idx, max_idx = 0;
+ int diff2;
+ int table_size = 8;
u32 e_size, e_key_len;
u32 end = le32_to_cpu(hdr->used);
u32 off = le32_to_cpu(hdr->de_off);
-
-#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[128];
- if (end > 0x10000)
- goto next;
-
fill_table:
if (off + sizeof(struct NTFS_DE) > end)
return NULL;
@@ -720,7 +714,8 @@ binary_search:
return NULL;
max_idx = 0;
- table_size = min(table_size * 2, 128);
+ table_size = min(table_size * 2,
+ (int)ARRAY_SIZE(offs));
goto fill_table;
}
} else if (diff2 < 0) {
@@ -744,39 +739,6 @@ binary_search:
e = Add2Ptr(hdr, offs[mid_idx]);
goto binary_search;
-#endif
-
-next:
- /*
- * Entries index are sorted.
- * Enumerate all entries until we find entry
- * that is <= to the search value.
- */
- if (off + sizeof(struct NTFS_DE) > end)
- return NULL;
-
- e = Add2Ptr(hdr, off);
- e_size = le16_to_cpu(e->size);
-
- if (e_size < sizeof(struct NTFS_DE) || off + e_size > end)
- return NULL;
-
- off += e_size;
-
- e_key_len = le16_to_cpu(e->key_size);
-
- *diff = (*cmp)(key, key_len, e + 1, e_key_len, ctx);
- if (!*diff)
- return e;
-
- if (*diff <= 0)
- return e;
-
- if (de_is_last(e)) {
- *diff = 1;
- return e;
- }
- goto next;
}
/*