 5f55dbc0c5
			
		
	
	
	5f55dbc0c5
	
	
	
		
			
			Restructure squashfs_readpage() splitting it into separate functions for datablocks, fragments and sparse blocks. Move the memcpying (from squashfs cache entry) implementation of squashfs_readpage_block into file_cache.c This allows different implementations to be supported. Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk> Reviewed-by: Minchan Kim <minchan@kernel.org>
		
			
				
	
	
		
			38 lines
		
	
	
	
		
			961 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
	
		
			961 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2013
 | |
|  * Phillip Lougher <phillip@squashfs.org.uk>
 | |
|  *
 | |
|  * This work is licensed under the terms of the GNU GPL, version 2. See
 | |
|  * the COPYING file in the top-level directory.
 | |
|  */
 | |
| 
 | |
| #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)
 | |
| {
 | |
| 	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, buffer->length, 0);
 | |
| 
 | |
| 	squashfs_cache_put(buffer);
 | |
| 	return res;
 | |
| }
 |