Commit 672a8515 authored by Luis de Bethencourt's avatar Luis de Bethencourt

befs: remove unused BEFS_BT_PARMATCH

befs_btree_find(), the only caller of befs_find_key(), only cares about if
the return from that function is BEFS_BT_MATCH or not. It never uses the
partial match given with BEFS_BT_PARMATCH. Make the overflow return clearer
by having BEFS_BT_OVERFLOW instead of BEFS_BT_PARMATCH.
Signed-off-by: default avatarLuis de Bethencourt <luisbg@osg.samsung.com>
Signed-off-by: default avatarSalah Triki <salah.triki@gmail.com>
parent 33c712b4
...@@ -79,7 +79,7 @@ enum befs_err { ...@@ -79,7 +79,7 @@ enum befs_err {
BEFS_BT_END, BEFS_BT_END,
BEFS_BT_EMPTY, BEFS_BT_EMPTY,
BEFS_BT_MATCH, BEFS_BT_MATCH,
BEFS_BT_PARMATCH, BEFS_BT_OVERFLOW,
BEFS_BT_NOT_FOUND BEFS_BT_NOT_FOUND
}; };
......
...@@ -281,9 +281,9 @@ befs_btree_find(struct super_block *sb, const befs_data_stream *ds, ...@@ -281,9 +281,9 @@ befs_btree_find(struct super_block *sb, const befs_data_stream *ds,
while (!befs_leafnode(this_node)) { while (!befs_leafnode(this_node)) {
res = befs_find_key(sb, this_node, key, &node_off); res = befs_find_key(sb, this_node, key, &node_off);
if (res == BEFS_BT_NOT_FOUND) /* if no key set, try the overflow node */
if (res == BEFS_BT_OVERFLOW)
node_off = this_node->head.overflow; node_off = this_node->head.overflow;
/* if no match, go to overflow node */
if (befs_bt_read_node(sb, ds, this_node, node_off) != BEFS_OK) { if (befs_bt_read_node(sb, ds, this_node, node_off) != BEFS_OK) {
befs_error(sb, "befs_btree_find() failed to read " befs_error(sb, "befs_btree_find() failed to read "
"node at %llu", node_off); "node at %llu", node_off);
...@@ -291,8 +291,7 @@ befs_btree_find(struct super_block *sb, const befs_data_stream *ds, ...@@ -291,8 +291,7 @@ befs_btree_find(struct super_block *sb, const befs_data_stream *ds,
} }
} }
/* at the correct leaf node now */ /* at a leaf node now, check if it is correct */
res = befs_find_key(sb, this_node, key, value); res = befs_find_key(sb, this_node, key, value);
brelse(this_node->bh); brelse(this_node->bh);
...@@ -323,16 +322,12 @@ befs_btree_find(struct super_block *sb, const befs_data_stream *ds, ...@@ -323,16 +322,12 @@ befs_btree_find(struct super_block *sb, const befs_data_stream *ds,
* @findkey: Keystring to search for * @findkey: Keystring to search for
* @value: If key is found, the value stored with the key is put here * @value: If key is found, the value stored with the key is put here
* *
* finds exact match if one exists, and returns BEFS_BT_MATCH * Finds exact match if one exists, and returns BEFS_BT_MATCH.
* If no exact match, finds first key in node that is greater * If there is no match and node's value array is too small for key, return
* (alphabetically) than the search key and returns BEFS_BT_PARMATCH * BEFS_BT_OVERFLOW.
* (for partial match, I guess). Can you think of something better to * If no match and node should countain this key, return BEFS_BT_NOT_FOUND.
* call it?
*
* If no key was a match or greater than the search key, return
* BEFS_BT_NOT_FOUND.
* *
* Use binary search instead of a linear. * Uses binary search instead of a linear.
*/ */
static int static int
befs_find_key(struct super_block *sb, struct befs_btree_node *node, befs_find_key(struct super_block *sb, struct befs_btree_node *node,
...@@ -355,9 +350,8 @@ befs_find_key(struct super_block *sb, struct befs_btree_node *node, ...@@ -355,9 +350,8 @@ befs_find_key(struct super_block *sb, struct befs_btree_node *node,
eq = befs_compare_strings(thiskey, keylen, findkey, findkey_len); eq = befs_compare_strings(thiskey, keylen, findkey, findkey_len);
if (eq < 0) { if (eq < 0) {
befs_error(sb, "<--- %s %s not found", __func__, findkey); befs_debug(sb, "<--- node can't contain %s", findkey);
befs_debug(sb, "<--- %s ERROR", __func__); return BEFS_BT_OVERFLOW;
return BEFS_BT_NOT_FOUND;
} }
valarray = befs_bt_valarray(node); valarray = befs_bt_valarray(node);
...@@ -385,12 +379,15 @@ befs_find_key(struct super_block *sb, struct befs_btree_node *node, ...@@ -385,12 +379,15 @@ befs_find_key(struct super_block *sb, struct befs_btree_node *node,
else else
first = mid + 1; first = mid + 1;
} }
/* return an existing value so caller can arrive to a leaf node */
if (eq < 0) if (eq < 0)
*value = fs64_to_cpu(sb, valarray[mid + 1]); *value = fs64_to_cpu(sb, valarray[mid + 1]);
else else
*value = fs64_to_cpu(sb, valarray[mid]); *value = fs64_to_cpu(sb, valarray[mid]);
befs_debug(sb, "<--- %s found %s at %d", __func__, thiskey, mid); befs_error(sb, "<--- %s %s not found", __func__, findkey);
return BEFS_BT_PARMATCH; befs_debug(sb, "<--- %s ERROR", __func__);
return BEFS_BT_NOT_FOUND;
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment