]> www.infradead.org Git - users/hch/block.git/commitdiff
loop: rewrite loop_find_unbound using idr_for_each_entry loop
authorChristoph Hellwig <hch@lst.de>
Thu, 17 Jun 2021 07:38:54 +0000 (09:38 +0200)
committerChristoph Hellwig <hch@lst.de>
Thu, 17 Jun 2021 07:38:54 +0000 (09:38 +0200)
Use idr_for_each_entry to simplify the search for an unbound loop device.

Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/block/loop.c

index bd1fb894154c89c41cf11177bdad82c72220df37..8cca8c57494076db1a0afdf63d183a1323f36d0a 100644 (file)
@@ -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)