mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 05:04:02 +02:00
Implement the transparent compression codec ops for XPRESS (4K, 8K, 16K) and LZX (32K) algorithms. The xpress_scratch_size, lzx_scratch_size, xpress_decompress_chunk, and lzx_decompress_chunk wrappers provide unified interfaces and use per-call dynamic scratch state allocation (avoiding global mutexed singletons). Signed-off-by: Hyunchul Lee <hyc.lee@gmail.com> Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
55 lines
1.4 KiB
C
55 lines
1.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
/*
|
|
* Transparent compression codec interface.
|
|
*
|
|
* Copyright (c) 2026 LG Electronics Co., Ltd.
|
|
*/
|
|
|
|
#ifndef _NTFS_CODEC_H
|
|
#define _NTFS_CODEC_H
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/fs.h>
|
|
#include <linux/mm.h>
|
|
|
|
struct compress_context;
|
|
|
|
enum ntfs_codec_id {
|
|
NTFS_CODEC_LZNT1,
|
|
#ifdef CONFIG_NTFS_FS_WOF_COMPRESSION
|
|
NTFS_CODEC_XPRESS4K,
|
|
NTFS_CODEC_XPRESS8K,
|
|
NTFS_CODEC_XPRESS16K,
|
|
NTFS_CODEC_LZX32K,
|
|
#endif
|
|
};
|
|
|
|
struct ntfs_codec_ops {
|
|
enum ntfs_codec_id id;
|
|
const char *name;
|
|
size_t (*scratch_size)(u32 chunk_size);
|
|
int (*decompress_chunk)(void *scratch,
|
|
const void *src, size_t src_len,
|
|
void *dst, size_t dst_len,
|
|
u32 chunk_size);
|
|
int (*decompress_pages)(struct page *dest_pages[],
|
|
int completed_pages[],
|
|
int *dest_index, int *dest_ofs,
|
|
int dest_max_index, int dest_max_ofs,
|
|
int xpage, char *xpage_done,
|
|
u8 *cb_start, u32 cb_size,
|
|
loff_t i_size, s64 initialized_size);
|
|
int (*compress_subblock)(struct compress_context *pctx,
|
|
const char *inbuf, int bufsize, char *outbuf);
|
|
};
|
|
|
|
extern const struct ntfs_codec_ops ntfs_lznt1_codec_ops;
|
|
#ifdef CONFIG_NTFS_FS_WOF_COMPRESSION
|
|
extern const struct ntfs_codec_ops ntfs_xpress4k_codec_ops;
|
|
extern const struct ntfs_codec_ops ntfs_xpress8k_codec_ops;
|
|
extern const struct ntfs_codec_ops ntfs_xpress16k_codec_ops;
|
|
extern const struct ntfs_codec_ops ntfs_lzx32k_codec_ops;
|
|
#endif
|
|
|
|
#endif /* _NTFS_CODEC_H */
|