brintos

brintos / linux-shallow public Read only

0
0
Text · 1.6 KiB · ffe25eb Raw
60 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2#ifndef PAGE_ACTOR_H3#define PAGE_ACTOR_H4/*5 * Copyright (c) 20136 * Phillip Lougher <phillip@squashfs.org.uk>7 */8 9struct squashfs_page_actor {10	union {11		void		**buffer;12		struct page	**page;13	};14	void	*pageaddr;15	void	*tmp_buffer;16	void    *(*squashfs_first_page)(struct squashfs_page_actor *);17	void    *(*squashfs_next_page)(struct squashfs_page_actor *);18	void    (*squashfs_finish_page)(struct squashfs_page_actor *);19	struct page *last_page;20	int	pages;21	int	length;22	int	next_page;23	int	alloc_buffer;24	int	returned_pages;25	pgoff_t	next_index;26};27 28extern struct squashfs_page_actor *squashfs_page_actor_init(void **buffer,29				int pages, int length);30extern struct squashfs_page_actor *squashfs_page_actor_init_special(31				struct squashfs_sb_info *msblk,32				struct page **page, int pages, int length,33				loff_t start_index);34static inline struct page *squashfs_page_actor_free(struct squashfs_page_actor *actor)35{36	struct page *last_page = actor->next_page == actor->pages ? actor->last_page : ERR_PTR(-EIO);37 38	kfree(actor->tmp_buffer);39	kfree(actor);40 41	return last_page;42}43static inline void *squashfs_first_page(struct squashfs_page_actor *actor)44{45	return actor->squashfs_first_page(actor);46}47static inline void *squashfs_next_page(struct squashfs_page_actor *actor)48{49	return actor->squashfs_next_page(actor);50}51static inline void squashfs_finish_page(struct squashfs_page_actor *actor)52{53	actor->squashfs_finish_page(actor);54}55static inline void squashfs_actor_nobuff(struct squashfs_page_actor *actor)56{57	actor->alloc_buffer = 0;58}59#endif60