Commit 31e748e4 authored by Matthew Wilcox (Oracle)'s avatar Matthew Wilcox (Oracle)
Browse files

squashfs: Return the actual error from squashfs_read_folio()



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: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
parent b7a6eb22
Loading
Loading
Loading
Loading
+8 −7
Original line number Diff line number Diff line
@@ -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 @@ 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;
}