Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp> --- include/sheep.h | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-) diff --git a/include/sheep.h b/include/sheep.h index 5e0d8b4..31f1159 100644 --- a/include/sheep.h +++ b/include/sheep.h @@ -166,6 +166,8 @@ static inline int get_nth_node(struct sheepdog_vnode_list_entry *entries, nodes[nr++] = idx; next: idx = (idx + 1) % nr_entries; + if (idx == base) + return -1; /* not found */ for (i = 0; i < nr; i++) if (same_node(entries, idx, nodes[i])) /* this node is already selected, so skip here */ @@ -178,7 +180,7 @@ next: static inline int hval_to_sheep(struct sheepdog_vnode_list_entry *entries, int nr_entries, uint64_t id, int idx) { - int i; + int i, ret; struct sheepdog_vnode_list_entry *e = entries, *n; for (i = 0; i < nr_entries - 1; i++, e++) { @@ -186,7 +188,13 @@ static inline int hval_to_sheep(struct sheepdog_vnode_list_entry *entries, if (id > e->id && id <= n->id) break; } - return get_nth_node(entries, nr_entries, (i + 1) % nr_entries, idx); + ret = get_nth_node(entries, nr_entries, (i + 1) % nr_entries, idx); + if (ret < 0) { + printf("bug\n"); + abort(); + } + + return ret; } static inline int obj_to_sheep(struct sheepdog_vnode_list_entry *entries, -- 1.5.6.5 |