| // 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; | |
| } |