Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
-struct cds_ja_range *cds_ja_range_add(struct cds_ja *ja,
+int cds_ja_range_add(struct cds_ja *ja,
uint64_t start, /* inclusive */
uint64_t end, /* inclusive */
void *priv)
uint64_t start, /* inclusive */
uint64_t end, /* inclusive */
void *priv)
old_range = caa_container_of(old_node, struct cds_ja_range, ja_node);
switch (CMM_LOAD_SHARED(old_range->type)) {
case CDS_JA_RANGE_ALLOCATED:
old_range = caa_container_of(old_node, struct cds_ja_range, ja_node);
switch (CMM_LOAD_SHARED(old_range->type)) {
case CDS_JA_RANGE_ALLOCATED:
case CDS_JA_RANGE_FREE:
break;
case CDS_JA_RANGE_REMOVED:
case CDS_JA_RANGE_FREE:
break;
case CDS_JA_RANGE_REMOVED:
switch (CMM_LOAD_SHARED(old_range->type)) {
case CDS_JA_RANGE_ALLOCATED:
case CDS_JA_RANGE_FREE: /* fall-through */
switch (CMM_LOAD_SHARED(old_range->type)) {
case CDS_JA_RANGE_ALLOCATED:
case CDS_JA_RANGE_FREE: /* fall-through */
case CDS_JA_RANGE_REMOVED:
goto retry;
}
case CDS_JA_RANGE_REMOVED:
goto retry;
}
rcu_free_range(ja, old_range);
rcu_free_range(ja, old_range);
}
int cds_ja_range_del(struct cds_ja *ja, struct cds_ja_range *range)
}
int cds_ja_range_del(struct cds_ja *ja, struct cds_ja_range *range)
end = tmp;
}
rcu_read_lock();
end = tmp;
}
rcu_read_lock();
- range = cds_ja_range_add(test_ja, start, end, NULL);
- if (!range) {
- fprintf(stderr, "Error in cds_ja_range_add\n");
+ ret = cds_ja_range_add(test_ja, start, end, NULL);
+ if (ret) {
+ if (ret == -EEXIST) {
+ URCU_TLS(nr_addexist)++;
+ } else {
+ assert(0);
+ }
} else {
URCU_TLS(nr_add)++;
}
} else {
URCU_TLS(nr_add)++;
}
key = (unsigned long) iter;
key *= key_mul;
rcu_read_lock();
key = (unsigned long) iter;
key *= key_mul;
rcu_read_lock();
- range = cds_ja_range_add(test_ja, key, key, NULL);
+ ret = cds_ja_range_add(test_ja, key, key, NULL);
URCU_TLS(nr_add)++;
URCU_TLS(nr_writes)++;
rcu_read_unlock();
URCU_TLS(nr_add)++;
URCU_TLS(nr_writes)++;
rcu_read_unlock();
- if (!range) {
- fprintf(stderr, "Error adding range %" PRIu64 "\n",
- key);
+ if (ret) {
+ fprintf(stderr, "Error (%d) adding range %" PRIu64 "\n",
+ ret, key);
void cds_ja_range_unlock(struct cds_ja_range *range);
void cds_ja_range_unlock(struct cds_ja_range *range);
-struct cds_ja_range *cds_ja_range_add(struct cds_ja *ja,
+int cds_ja_range_add(struct cds_ja *ja,
uint64_t start, /* inclusive */
uint64_t end, /* inclusive */
void *priv);
uint64_t start, /* inclusive */
uint64_t end, /* inclusive */
void *priv);