page_actor.h 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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 <[email protected]>
  7. */
  8. struct squashfs_page_actor {
  9. union {
  10. void **buffer;
  11. struct page **page;
  12. };
  13. void *pageaddr;
  14. void *tmp_buffer;
  15. void *(*squashfs_first_page)(struct squashfs_page_actor *);
  16. void *(*squashfs_next_page)(struct squashfs_page_actor *);
  17. void (*squashfs_finish_page)(struct squashfs_page_actor *);
  18. struct page *last_page;
  19. int pages;
  20. int length;
  21. int next_page;
  22. int alloc_buffer;
  23. int returned_pages;
  24. pgoff_t next_index;
  25. };
  26. extern struct squashfs_page_actor *squashfs_page_actor_init(void **buffer,
  27. int pages, int length);
  28. extern struct squashfs_page_actor *squashfs_page_actor_init_special(
  29. struct squashfs_sb_info *msblk,
  30. struct page **page, int pages, int length);
  31. static inline struct page *squashfs_page_actor_free(struct squashfs_page_actor *actor)
  32. {
  33. struct page *last_page = actor->last_page;
  34. kfree(actor->tmp_buffer);
  35. kfree(actor);
  36. return last_page;
  37. }
  38. static inline void *squashfs_first_page(struct squashfs_page_actor *actor)
  39. {
  40. return actor->squashfs_first_page(actor);
  41. }
  42. static inline void *squashfs_next_page(struct squashfs_page_actor *actor)
  43. {
  44. return actor->squashfs_next_page(actor);
  45. }
  46. static inline void squashfs_finish_page(struct squashfs_page_actor *actor)
  47. {
  48. actor->squashfs_finish_page(actor);
  49. }
  50. static inline void squashfs_actor_nobuff(struct squashfs_page_actor *actor)
  51. {
  52. actor->alloc_buffer = 0;
  53. }
  54. #endif