squashfs: Return the actual error from squashfs_read_folio()
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Fri, 27 May 2022 03:33:43 +0000 (23:33 -0400)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Tue, 2 Aug 2022 16:34:02 +0000 (12:34 -0400)
Since we actually know what error happened, we can report it instead
of having the generic code return -EIO for pages that were unlocked
without being marked uptodate.  Also remove a test of PageError since
we have the return value at this point.

Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
fs/squashfs/file.c

index a8e495d8eb860098ed40d3199eb76bffb3a99e4b..7f0904b203294c61281bc588011981ba56937818 100644 (file)
@@ -454,7 +454,7 @@ static int squashfs_read_folio(struct file *file, struct folio *folio)
        int expected = index == file_end ?
                        (i_size_read(inode) & (msblk->block_size - 1)) :
                         msblk->block_size;
-       int res;
+       int res = 0;
        void *pageaddr;
 
        TRACE("Entered squashfs_readpage, page index %lx, start block %llx\n",
@@ -467,14 +467,15 @@ static int squashfs_read_folio(struct file *file, struct folio *folio)
        if (index < file_end || squashfs_i(inode)->fragment_block ==
                                        SQUASHFS_INVALID_BLK) {
                u64 block = 0;
-               int bsize = read_blocklist(inode, index, &block);
-               if (bsize < 0)
+
+               res = read_blocklist(inode, index, &block);
+               if (res < 0)
                        goto error_out;
 
-               if (bsize == 0)
+               if (res == 0)
                        res = squashfs_readpage_sparse(page, expected);
                else
-                       res = squashfs_readpage_block(page, block, bsize, expected);
+                       res = squashfs_readpage_block(page, block, res, expected);
        } else
                res = squashfs_readpage_fragment(page, expected);
 
@@ -488,11 +489,11 @@ out:
        memset(pageaddr, 0, PAGE_SIZE);
        kunmap_atomic(pageaddr);
        flush_dcache_page(page);
-       if (!PageError(page))
+       if (res == 0)
                SetPageUptodate(page);
        unlock_page(page);
 
-       return 0;
+       return res;
 }