axmap_first_free() is always called with axmap->lock held, so needn't to acquire the lock inside the function. The deadlock is introduced in commit 12bde3697fc230d7a(axmap: ensure we lock down the maps for shared access). Given axmap_first_free() is only called inside lib/axmap.c, this patch declares the function as static. In the future, if external users need the function, axmap lock can be considered at that time. Reported-by: Sedat Dilek <sedat.dilek@xxxxxxxxx> Signed-off-by: Ming Lei <ming.lei@xxxxxxxxxxxxx> --- lib/axmap.c | 4 +--- lib/axmap.h | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/axmap.c b/lib/axmap.c index e847a38..8247fc1 100644 --- a/lib/axmap.c +++ b/lib/axmap.c @@ -387,17 +387,15 @@ static uint64_t axmap_find_first_free(struct axmap *axmap, unsigned int level, return (uint64_t) -1ULL; } -uint64_t axmap_first_free(struct axmap *axmap) +static 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 edfeba8..3705a1d 100644 --- a/lib/axmap.h +++ b/lib/axmap.h @@ -11,7 +11,6 @@ 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); -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe fio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html