On Mon, Aug 08, 2016 at 03:21:20PM +0100, Luis de Bethencourt wrote: > 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: Luis de Bethencourt <lui...@osg.samsung.com> > --- > v3: check for BEFS_BT_OVERFLOW instead of value == 0 > > > Hi, > > Switching to using BEFS_BT_OVERFLOW. This makes logic of befs_find_key() > clearer. > > Thanks, > Luis > > fs/befs/befs.h | 2 +- > fs/befs/btree.c | 38 ++++++++++++++++---------------------- > 2 files changed, 17 insertions(+), 23 deletions(-) > > diff --git a/fs/befs/befs.h b/fs/befs/befs.h > index c5c6cd1..a8ca7fc 100644 > --- a/fs/befs/befs.h > +++ b/fs/befs/befs.h > @@ -79,7 +79,7 @@ enum befs_err { > BEFS_BT_END, > BEFS_BT_EMPTY, > BEFS_BT_MATCH, > - BEFS_BT_PARMATCH, > + BEFS_BT_OVERFLOW, > BEFS_BT_NOT_FOUND > }; > > diff --git a/fs/befs/btree.c b/fs/befs/btree.c > index 3f1a391..27b0336 100644 > --- a/fs/befs/btree.c > +++ b/fs/befs/btree.c > @@ -281,9 +281,9 @@ befs_btree_find(struct super_block *sb, const > befs_data_stream *ds, > > while (!befs_leafnode(this_node)) { > 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; > - /* if no match, go to overflow node */ > if (befs_bt_read_node(sb, ds, this_node, node_off) != BEFS_OK) { > befs_error(sb, "befs_btree_find() failed to read " > "node at %llu", node_off); > @@ -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); > > brelse(this_node->bh); > @@ -323,16 +322,12 @@ befs_btree_find(struct super_block *sb, const > befs_data_stream *ds, > * @findkey: Keystring to search for > * @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 > - * If no exact match, finds first key in node that is greater > - * (alphabetically) than the search key and returns BEFS_BT_PARMATCH > - * (for partial match, I guess). Can you think of something better to > - * call it? > - * > - * If no key was a match or greater than the search key, return > - * BEFS_BT_NOT_FOUND. > + * Finds exact match if one exists, and returns BEFS_BT_MATCH. > + * If there is no match and node's value array is too small for key, return > + * BEFS_BT_OVERFLOW. > + * If no match and node should countain this key, return BEFS_BT_NOT_FOUND. > * > - * Use binary search instead of a linear. > + * Uses binary search instead of a linear. > */ > static int > 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); > if (eq < 0) { > - befs_error(sb, "<--- %s %s not found", __func__, findkey); > - befs_debug(sb, "<--- %s ERROR", __func__); > - return BEFS_BT_NOT_FOUND; > + befs_debug(sb, "<--- node can't contain %s", findkey); > + return BEFS_BT_OVERFLOW; > } > > valarray = befs_bt_valarray(node); > @@ -385,12 +379,12 @@ befs_find_key(struct super_block *sb, struct > befs_btree_node *node, > else > first = mid + 1; > } > - if (eq < 0) > - *value = fs64_to_cpu(sb, valarray[mid + 1]); > - else > - *value = fs64_to_cpu(sb, valarray[mid]); > - befs_debug(sb, "<--- %s found %s at %d", __func__, thiskey, mid); > - return BEFS_BT_PARMATCH; > + > + /* return an existing value so caller can arrive to a leaf node */ > + *value = fs64_to_cpu(sb, valarray[mid]); > + befs_error(sb, "<--- %s %s not found", __func__, findkey); > + befs_debug(sb, "<--- %s ERROR", __func__); > + return BEFS_BT_NOT_FOUND; > } > > /** > -- > 2.5.1 >
Signed-off-by: Salah Triki <salah.tr...@gmail.com> Thanx :) Salah