brd: return 0/-error from brd_insert_page()
authorJens Axboe <axboe@kernel.dk>
Thu, 16 Feb 2023 14:57:32 +0000 (07:57 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 10 Mar 2023 08:34:15 +0000 (09:34 +0100)
commit db0ccc44a20b4bb3039c0f6885a1f9c3323c7673 upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/block/brd.c

index 82419e345777e43be9b8d04e8855a2dc9488cb7c..39cad8b269716e94213413ec4de92868f5ee5ab6 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;
 }
 
 /*