linux/fs/erofs/compress.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 * Copyright (C) 2019 HUAWEI, Inc.
   4 *             http://www.huawei.com/
   5 * Created by Gao Xiang <gaoxiang25@huawei.com>
   6 */
   7#ifndef __EROFS_FS_COMPRESS_H
   8#define __EROFS_FS_COMPRESS_H
   9
  10#include "internal.h"
  11
  12enum {
  13        Z_EROFS_COMPRESSION_SHIFTED = Z_EROFS_COMPRESSION_MAX,
  14        Z_EROFS_COMPRESSION_RUNTIME_MAX
  15};
  16
  17struct z_erofs_decompress_req {
  18        struct super_block *sb;
  19        struct page **in, **out;
  20
  21        unsigned short pageofs_out;
  22        unsigned int inputsize, outputsize;
  23
  24        /* indicate the algorithm will be used for decompression */
  25        unsigned int alg;
  26        bool inplace_io, partial_decoding;
  27};
  28
  29/*
  30 * - 0x5A110C8D ('sallocated', Z_EROFS_MAPPING_STAGING) -
  31 * used to mark temporary allocated pages from other
  32 * file/cached pages and NULL mapping pages.
  33 */
  34#define Z_EROFS_MAPPING_STAGING         ((void *)0x5A110C8D)
  35
  36/* check if a page is marked as staging */
  37static inline bool z_erofs_page_is_staging(struct page *page)
  38{
  39        return page->mapping == Z_EROFS_MAPPING_STAGING;
  40}
  41
  42static inline bool z_erofs_put_stagingpage(struct list_head *pagepool,
  43                                           struct page *page)
  44{
  45        if (!z_erofs_page_is_staging(page))
  46                return false;
  47
  48        /* staging pages should not be used by others at the same time */
  49        if (page_ref_count(page) > 1)
  50                put_page(page);
  51        else
  52                list_add(&page->lru, pagepool);
  53        return true;
  54}
  55
  56int z_erofs_decompress(struct z_erofs_decompress_req *rq,
  57                       struct list_head *pagepool);
  58
  59#endif
  60
  61