mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-01 16:14:13 +08:00
93e72b3c61
ll_rw_block() function has been deprecated in favor of BIO which appears to come with large performance improvements. This patch decreases boot time by close to 40% when using squashfs for the root file-system. This is observed at least in the context of starting an Android VM on Chrome OS using crosvm. The patch was tested on 4.19 as well as master. This patch is largely based on Adrien Schildknecht's patch that was originally sent as https://lkml.org/lkml/2017/9/22/814 though with some significant changes and simplifications while also taking Phillip Lougher's feedback into account, around preserving support for FILE_CACHE in particular. [akpm@linux-foundation.org: fix build error reported by Randy] Link: http://lkml.kernel.org/r/319997c2-5fc8-f889-2ea3-d913308a7c1f@infradead.org Signed-off-by: Philippe Liard <pliard@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Reviewed-by: Christoph Hellwig <hch@lst.de> Cc: Adrien Schildknecht <adrien+dev@schischi.me> Cc: Phillip Lougher <phillip@squashfs.org.uk> Cc: Guenter Roeck <groeck@chromium.org> Cc: Daniel Rosenberg <drosen@google.com> Link: https://chromium.googlesource.com/chromiumos/platform/crosvm Link: http://lkml.kernel.org/r/20191106074238.186023-1-pliard@google.com Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
102 lines
3.4 KiB
C
102 lines
3.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* Squashfs - a compressed read only filesystem for Linux
|
|
*
|
|
* Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008
|
|
* Phillip Lougher <phillip@squashfs.org.uk>
|
|
*
|
|
* squashfs.h
|
|
*/
|
|
|
|
#define TRACE(s, args...) pr_debug("SQUASHFS: "s, ## args)
|
|
|
|
#define ERROR(s, args...) pr_err("SQUASHFS error: "s, ## args)
|
|
|
|
#define WARNING(s, args...) pr_warn("SQUASHFS: "s, ## args)
|
|
|
|
/* block.c */
|
|
extern int squashfs_read_data(struct super_block *, u64, int, u64 *,
|
|
struct squashfs_page_actor *);
|
|
|
|
/* cache.c */
|
|
extern struct squashfs_cache *squashfs_cache_init(char *, int, int);
|
|
extern void squashfs_cache_delete(struct squashfs_cache *);
|
|
extern struct squashfs_cache_entry *squashfs_cache_get(struct super_block *,
|
|
struct squashfs_cache *, u64, int);
|
|
extern void squashfs_cache_put(struct squashfs_cache_entry *);
|
|
extern int squashfs_copy_data(void *, struct squashfs_cache_entry *, int, int);
|
|
extern int squashfs_read_metadata(struct super_block *, void *, u64 *,
|
|
int *, int);
|
|
extern struct squashfs_cache_entry *squashfs_get_fragment(struct super_block *,
|
|
u64, int);
|
|
extern struct squashfs_cache_entry *squashfs_get_datablock(struct super_block *,
|
|
u64, int);
|
|
extern void *squashfs_read_table(struct super_block *, u64, int);
|
|
|
|
/* decompressor.c */
|
|
extern const struct squashfs_decompressor *squashfs_lookup_decompressor(int);
|
|
extern void *squashfs_decompressor_setup(struct super_block *, unsigned short);
|
|
|
|
/* decompressor_xxx.c */
|
|
extern void *squashfs_decompressor_create(struct squashfs_sb_info *, void *);
|
|
extern void squashfs_decompressor_destroy(struct squashfs_sb_info *);
|
|
extern int squashfs_decompress(struct squashfs_sb_info *, struct bio *,
|
|
int, int, struct squashfs_page_actor *);
|
|
extern int squashfs_max_decompressors(void);
|
|
|
|
/* export.c */
|
|
extern __le64 *squashfs_read_inode_lookup_table(struct super_block *, u64, u64,
|
|
unsigned int);
|
|
|
|
/* fragment.c */
|
|
extern int squashfs_frag_lookup(struct super_block *, unsigned int, u64 *);
|
|
extern __le64 *squashfs_read_fragment_index_table(struct super_block *,
|
|
u64, u64, unsigned int);
|
|
|
|
/* file.c */
|
|
void squashfs_fill_page(struct page *, struct squashfs_cache_entry *, int, int);
|
|
void squashfs_copy_cache(struct page *, struct squashfs_cache_entry *, int,
|
|
int);
|
|
|
|
/* file_xxx.c */
|
|
extern int squashfs_readpage_block(struct page *, u64, int, int);
|
|
|
|
/* id.c */
|
|
extern int squashfs_get_id(struct super_block *, unsigned int, unsigned int *);
|
|
extern __le64 *squashfs_read_id_index_table(struct super_block *, u64, u64,
|
|
unsigned short);
|
|
|
|
/* inode.c */
|
|
extern struct inode *squashfs_iget(struct super_block *, long long,
|
|
unsigned int);
|
|
extern int squashfs_read_inode(struct inode *, long long);
|
|
|
|
/* xattr.c */
|
|
extern ssize_t squashfs_listxattr(struct dentry *, char *, size_t);
|
|
|
|
/*
|
|
* Inodes, files, decompressor and xattr operations
|
|
*/
|
|
|
|
/* dir.c */
|
|
extern const struct file_operations squashfs_dir_ops;
|
|
|
|
/* export.c */
|
|
extern const struct export_operations squashfs_export_ops;
|
|
|
|
/* file.c */
|
|
extern const struct address_space_operations squashfs_aops;
|
|
|
|
/* inode.c */
|
|
extern const struct inode_operations squashfs_inode_ops;
|
|
|
|
/* namei.c */
|
|
extern const struct inode_operations squashfs_dir_inode_ops;
|
|
|
|
/* symlink.c */
|
|
extern const struct address_space_operations squashfs_symlink_aops;
|
|
extern const struct inode_operations squashfs_symlink_inode_ops;
|
|
|
|
/* xattr.c */
|
|
extern const struct xattr_handler *squashfs_xattr_handlers[];
|