From: Christoph Hellwig Date: Thu, 17 Jun 2021 07:38:54 +0000 (+0200) Subject: loop: rewrite loop_find_unbound using idr_for_each_entry X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=refs%2Fheads%2Floop;p=users%2Fhch%2Fblock.git 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 --- 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)