at for-next 1.6 kB view raw
1/* SPDX-License-Identifier: GPL-2.0-only */ 2#ifndef PAGE_ACTOR_H 3#define PAGE_ACTOR_H 4/* 5 * Copyright (c) 2013 6 * 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#endif