From fcf7b0721ccf1a197252731f19bf990272eb0843 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Sat, 3 Jan 2015 13:40:16 -0700 Subject: [PATCH 1/1] Revert "axmap: fix deadlock" This reverts commit d555a23db84364ab942361a719a4379605bdbc41. --- lib/axmap.c | 4 +++- lib/axmap.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/axmap.c b/lib/axmap.c index 8247fc1a..e847a387 100644 --- a/lib/axmap.c +++ b/lib/axmap.c @@ -387,15 +387,17 @@ static uint64_t axmap_find_first_free(struct axmap *axmap, unsigned int level, return (uint64_t) -1ULL; } -static uint64_t axmap_first_free(struct axmap *axmap) +uint64_t axmap_first_free(struct axmap *axmap) { uint64_t ret; if (firstfree_valid(axmap)) return axmap->first_free; + fio_mutex_down(&axmap->lock); ret = axmap_find_first_free(axmap, axmap->nr_levels - 1, 0); axmap->first_free = ret; + fio_mutex_up(&axmap->lock); return ret; } diff --git a/lib/axmap.h b/lib/axmap.h index 3705a1db..edfeba80 100644 --- a/lib/axmap.h +++ b/lib/axmap.h @@ -11,6 +11,7 @@ void axmap_clear(struct axmap *axmap, uint64_t bit_nr); void axmap_set(struct axmap *axmap, uint64_t bit_nr); unsigned int axmap_set_nr(struct axmap *axmap, uint64_t bit_nr, unsigned int nr_bits); int axmap_isset(struct axmap *axmap, uint64_t bit_nr); +uint64_t axmap_first_free(struct axmap *axmap); uint64_t axmap_next_free(struct axmap *axmap, uint64_t bit_nr); void axmap_reset(struct axmap *axmap); -- 2.25.1