brd: return 0/-error from brd_insert_page()
authorJens Axboe <axboe@kernel.dk>
Thu, 16 Feb 2023 14:57:32 +0000 (07:57 -0700)
committerJens Axboe <axboe@kernel.dk>
Thu, 16 Feb 2023 17:02:31 +0000 (10:02 -0700)
It currently returns a page, but callers just check for NULL/page to
gauge success. Clean this up and return the appropriate error directly
instead.

Cc: stable@vger.kernel.org # 5.10+
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/brd.c

index 20acc4a1fd6def4eddbbf63d6d581734f4f9dee9..15a148d5aad91f089aba70e93f601f60e052248e 100644 (file)
@@ -78,11 +78,9 @@ static struct page *brd_lookup_page(struct brd_device *brd, sector_t sector)
 }
 
 /*
- * Look up and return a brd's page for a given sector.
- * If one does not exist, allocate an empty page, and insert that. Then
- * return it.
+ * Insert a new page for a given sector, if one does not already exist.
  */
-static struct page *brd_insert_page(struct brd_device *brd, sector_t sector)
+static int brd_insert_page(struct brd_device *brd, sector_t sector)
 {
        pgoff_t idx;
        struct page *page;
@@ -90,7 +88,7 @@ static struct page *brd_insert_page(struct brd_device *brd, sector_t sector)
 
        page = brd_lookup_page(brd, sector);
        if (page)
-               return page;
+               return 0;
 
        /*
         * Must use NOIO because we don't want to recurse back into the
@@ -99,11 +97,11 @@ static struct page *brd_insert_page(struct brd_device *brd, sector_t sector)
        gfp_flags = GFP_NOIO | __GFP_ZERO | __GFP_HIGHMEM;
        page = alloc_page(gfp_flags);
        if (!page)
-               return NULL;
+               return -ENOMEM;
 
        if (radix_tree_preload(GFP_NOIO)) {
                __free_page(page);
-               return NULL;
+               return -ENOMEM;
        }
 
        spin_lock(&brd->brd_lock);
@@ -120,8 +118,7 @@ static struct page *brd_insert_page(struct brd_device *brd, sector_t sector)
        spin_unlock(&brd->brd_lock);
 
        radix_tree_preload_end();
-
-       return page;
+       return 0;
 }
 
 /*
@@ -174,16 +171,17 @@ static int copy_to_brd_setup(struct brd_device *brd, sector_t sector, size_t n)
 {
        unsigned int offset = (sector & (PAGE_SECTORS-1)) << SECTOR_SHIFT;
        size_t copy;
+       int ret;
 
        copy = min_t(size_t, n, PAGE_SIZE - offset);
-       if (!brd_insert_page(brd, sector))
-               return -ENOSPC;
+       ret = brd_insert_page(brd, sector);
+       if (ret)
+               return ret;
        if (copy < n) {
                sector += copy >> SECTOR_SHIFT;
-               if (!brd_insert_page(brd, sector))
-                       return -ENOSPC;
+               ret = brd_insert_page(brd, sector);
        }
-       return 0;
+       return ret;
 }
 
 /*