Skip to content

Commit

Permalink
squashfs: Return the actual error from squashfs_read_folio()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Matthew Wilcox (Oracle) committed Aug 2, 2022
1 parent b7a6eb2 commit 31e748e
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions fs/squashfs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand All @@ -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);

Expand All @@ -488,11 +489,11 @@ static int squashfs_read_folio(struct file *file, struct folio *folio)
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;
}


Expand Down

0 comments on commit 31e748e

Please sign in to comment.