From d3cb02c73173db62632abaa14605a53034f21587 Mon Sep 17 00:00:00 2001 From: Christoph Hellwig Date: Thu, 17 Jun 2021 09:38:54 +0200 Subject: [PATCH] loop: rewrite loop_find_unbound using idr_for_each_entry Use idr_for_each_entry to simplify the search for an unbound loop device. Signed-off-by: Christoph Hellwig --- drivers/block/loop.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/drivers/block/loop.c b/drivers/block/loop.c index bd1fb894154c..8cca8c574940 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -2190,23 +2190,17 @@ static void loop_remove(struct loop_device *lo) kfree(lo); } -static int find_unbound_cb(int id, void *ptr, void *data) -{ - struct loop_device *lo = ptr; - int *ret = data; - - if (lo->lo_state != Lo_unbound) - return 0; - *ret = lo->lo_number; - return 1; -} - static int loop_find_unbound(void) { - int ret = -ENODEV; + struct loop_device *lo; + int id; - idr_for_each(&loop_index_idr, &find_unbound_cb, &ret); - return ret; + idr_for_each_entry(&loop_index_idr, lo, id) { + if (lo->lo_state == Lo_unbound) + return lo->lo_number; + } + + return -ENODEV; } static void loop_probe(dev_t dev) -- 2.50.1