source: src/linux/universal/linux-4.9/fs/squashfs/page_actor.h @ 31630

Last change on this file since 31630 was 31630, checked in by brainslayer, 4 months ago

new fs is compatible with standard squashfs, just smaller

File size: 1.9 KB
Line 
1#ifndef PAGE_ACTOR_H
2#define PAGE_ACTOR_H
3/*
4 * Copyright (c) 2013
5 * Phillip Lougher <phillip@squashfs.org.uk>
6 *
7 * This work is licensed under the terms of the GNU GPL, version 2. See
8 * the COPYING file in the top-level directory.
9 */
10
11#ifndef CONFIG_SQUASHFS_FILE_DIRECT
12struct squashfs_page_actor {
13        void    **page;
14        int     pages;
15        int     length;
16        int     next_page;
17};
18
19static inline struct squashfs_page_actor *squashfs_page_actor_init(void **page,
20        int pages, int length)
21{
22        struct squashfs_page_actor *actor = kmalloc(sizeof(*actor), GFP_KERNEL);
23
24        if (actor == NULL)
25                return NULL;
26
27        actor->length = length ? : pages * PAGE_SIZE;
28        actor->page = page;
29        actor->pages = pages;
30        actor->next_page = 0;
31        return actor;
32}
33
34static inline void *squashfs_first_page(struct squashfs_page_actor *actor)
35{
36        actor->next_page = 1;
37        return actor->page[0];
38}
39
40static inline void *squashfs_next_page(struct squashfs_page_actor *actor)
41{
42        return actor->next_page == actor->pages ? NULL :
43                actor->page[actor->next_page++];
44}
45
46static inline void squashfs_finish_page(struct squashfs_page_actor *actor)
47{
48        /* empty */
49}
50#else
51struct squashfs_page_actor {
52        union {
53                void            **buffer;
54                struct page     **page;
55        };
56        void    *pageaddr;
57        void    *(*squashfs_first_page)(struct squashfs_page_actor *);
58        void    *(*squashfs_next_page)(struct squashfs_page_actor *);
59        void    (*squashfs_finish_page)(struct squashfs_page_actor *);
60        int     pages;
61        int     length;
62        int     next_page;
63};
64
65extern struct squashfs_page_actor *squashfs_page_actor_init(void **, int, int);
66extern struct squashfs_page_actor *squashfs_page_actor_init_special(struct page
67                                                         **, int, int);
68static inline void *squashfs_first_page(struct squashfs_page_actor *actor)
69{
70        return actor->squashfs_first_page(actor);
71}
72static inline void *squashfs_next_page(struct squashfs_page_actor *actor)
73{
74        return actor->squashfs_next_page(actor);
75}
76static inline void squashfs_finish_page(struct squashfs_page_actor *actor)
77{
78        actor->squashfs_finish_page(actor);
79}
80#endif
81#endif
Note: See TracBrowser for help on using the repository browser.