| // SPDX-License-Identifier: GPL-2.0-only |
| /* |
| * Copyright (c) 2013 |
| * Phillip Lougher <phillip@squashfs.org.uk> |
| */ |
| |
| #include <linux/fs.h> |
| #include <linux/vfs.h> |
| #include <linux/kernel.h> |
| #include <linux/slab.h> |
| #include <linux/string.h> |
| #include <linux/pagemap.h> |
| #include <linux/mutex.h> |
| |
| #include "squashfs_fs.h" |
| #include "squashfs_fs_sb.h" |
| #include "squashfs_fs_i.h" |
| #include "squashfs.h" |
| |
| /* Read separately compressed datablock and memcopy into page cache */ |
| int squashfs_readpage_block(struct page *page, u64 block, int bsize, int expected) |
| { |
| struct inode *i = page->mapping->host; |
| struct squashfs_cache_entry *buffer = squashfs_get_datablock(i->i_sb, |
| block, bsize); |
| int res = buffer->error; |
| |
| if (res) |
| ERROR("Unable to read page, block %llx, size %x\n", block, |
| bsize); |
| else |
| squashfs_copy_cache(page, buffer, expected, 0); |
| |
| squashfs_cache_put(buffer); |
| return res; |
| } |