Commit c4bf665a authored by David Sterba's avatar David Sterba

btrfs: export compression and decompression callbacks

Export compress_pages, decompress_bio and decompress callbacks for all
compression algos. The indirect calls will be replaced by a switch.
Reviewed-by: default avatarJohannes Thumshirn <jthumshirn@suse.de>
Reviewed-by: default avatarNikolay Borisov <nborisov@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent a60adce8
...@@ -29,6 +29,30 @@ ...@@ -29,6 +29,30 @@
#include "extent_io.h" #include "extent_io.h"
#include "extent_map.h" #include "extent_map.h"
int zlib_compress_pages(struct list_head *ws, struct address_space *mapping,
u64 start, struct page **pages, unsigned long *out_pages,
unsigned long *total_in, unsigned long *total_out);
int zlib_decompress_bio(struct list_head *ws, struct compressed_bio *cb);
int zlib_decompress(struct list_head *ws, unsigned char *data_in,
struct page *dest_page, unsigned long start_byte, size_t srclen,
size_t destlen);
int lzo_compress_pages(struct list_head *ws, struct address_space *mapping,
u64 start, struct page **pages, unsigned long *out_pages,
unsigned long *total_in, unsigned long *total_out);
int lzo_decompress_bio(struct list_head *ws, struct compressed_bio *cb);
int lzo_decompress(struct list_head *ws, unsigned char *data_in,
struct page *dest_page, unsigned long start_byte, size_t srclen,
size_t destlen);
int zstd_compress_pages(struct list_head *ws, struct address_space *mapping,
u64 start, struct page **pages, unsigned long *out_pages,
unsigned long *total_in, unsigned long *total_out);
int zstd_decompress_bio(struct list_head *ws, struct compressed_bio *cb);
int zstd_decompress(struct list_head *ws, unsigned char *data_in,
struct page *dest_page, unsigned long start_byte, size_t srclen,
size_t destlen);
static const char* const btrfs_compress_types[] = { "", "zlib", "lzo", "zstd" }; static const char* const btrfs_compress_types[] = { "", "zlib", "lzo", "zstd" };
const char* btrfs_compress_type2str(enum btrfs_compression_type type) const char* btrfs_compress_type2str(enum btrfs_compression_type type)
......
...@@ -131,13 +131,9 @@ static inline size_t read_compress_length(const char *buf) ...@@ -131,13 +131,9 @@ static inline size_t read_compress_length(const char *buf)
return le32_to_cpu(dlen); return le32_to_cpu(dlen);
} }
static int lzo_compress_pages(struct list_head *ws, int lzo_compress_pages(struct list_head *ws, struct address_space *mapping,
struct address_space *mapping, u64 start, struct page **pages, unsigned long *out_pages,
u64 start, unsigned long *total_in, unsigned long *total_out)
struct page **pages,
unsigned long *out_pages,
unsigned long *total_in,
unsigned long *total_out)
{ {
struct workspace *workspace = list_entry(ws, struct workspace, list); struct workspace *workspace = list_entry(ws, struct workspace, list);
int ret = 0; int ret = 0;
...@@ -303,7 +299,7 @@ static int lzo_compress_pages(struct list_head *ws, ...@@ -303,7 +299,7 @@ static int lzo_compress_pages(struct list_head *ws,
return ret; return ret;
} }
static int lzo_decompress_bio(struct list_head *ws, struct compressed_bio *cb) int lzo_decompress_bio(struct list_head *ws, struct compressed_bio *cb)
{ {
struct workspace *workspace = list_entry(ws, struct workspace, list); struct workspace *workspace = list_entry(ws, struct workspace, list);
int ret = 0, ret2; int ret = 0, ret2;
...@@ -444,10 +440,9 @@ static int lzo_decompress_bio(struct list_head *ws, struct compressed_bio *cb) ...@@ -444,10 +440,9 @@ static int lzo_decompress_bio(struct list_head *ws, struct compressed_bio *cb)
return ret; return ret;
} }
static int lzo_decompress(struct list_head *ws, unsigned char *data_in, int lzo_decompress(struct list_head *ws, unsigned char *data_in,
struct page *dest_page, struct page *dest_page, unsigned long start_byte, size_t srclen,
unsigned long start_byte, size_t destlen)
size_t srclen, size_t destlen)
{ {
struct workspace *workspace = list_entry(ws, struct workspace, list); struct workspace *workspace = list_entry(ws, struct workspace, list);
size_t in_len; size_t in_len;
......
...@@ -88,13 +88,9 @@ static struct list_head *zlib_alloc_workspace(unsigned int level) ...@@ -88,13 +88,9 @@ static struct list_head *zlib_alloc_workspace(unsigned int level)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
} }
static int zlib_compress_pages(struct list_head *ws, int zlib_compress_pages(struct list_head *ws, struct address_space *mapping,
struct address_space *mapping, u64 start, struct page **pages, unsigned long *out_pages,
u64 start, unsigned long *total_in, unsigned long *total_out)
struct page **pages,
unsigned long *out_pages,
unsigned long *total_in,
unsigned long *total_out)
{ {
struct workspace *workspace = list_entry(ws, struct workspace, list); struct workspace *workspace = list_entry(ws, struct workspace, list);
int ret; int ret;
...@@ -228,7 +224,7 @@ static int zlib_compress_pages(struct list_head *ws, ...@@ -228,7 +224,7 @@ static int zlib_compress_pages(struct list_head *ws,
return ret; return ret;
} }
static int zlib_decompress_bio(struct list_head *ws, struct compressed_bio *cb) int zlib_decompress_bio(struct list_head *ws, struct compressed_bio *cb)
{ {
struct workspace *workspace = list_entry(ws, struct workspace, list); struct workspace *workspace = list_entry(ws, struct workspace, list);
int ret = 0, ret2; int ret = 0, ret2;
...@@ -319,10 +315,9 @@ static int zlib_decompress_bio(struct list_head *ws, struct compressed_bio *cb) ...@@ -319,10 +315,9 @@ static int zlib_decompress_bio(struct list_head *ws, struct compressed_bio *cb)
return ret; return ret;
} }
static int zlib_decompress(struct list_head *ws, unsigned char *data_in, int zlib_decompress(struct list_head *ws, unsigned char *data_in,
struct page *dest_page, struct page *dest_page, unsigned long start_byte, size_t srclen,
unsigned long start_byte, size_t destlen)
size_t srclen, size_t destlen)
{ {
struct workspace *workspace = list_entry(ws, struct workspace, list); struct workspace *workspace = list_entry(ws, struct workspace, list);
int ret = 0; int ret = 0;
......
...@@ -367,13 +367,9 @@ static struct list_head *zstd_alloc_workspace(unsigned int level) ...@@ -367,13 +367,9 @@ static struct list_head *zstd_alloc_workspace(unsigned int level)
return ERR_PTR(-ENOMEM); return ERR_PTR(-ENOMEM);
} }
static int zstd_compress_pages(struct list_head *ws, int zstd_compress_pages(struct list_head *ws, struct address_space *mapping,
struct address_space *mapping, u64 start, struct page **pages, unsigned long *out_pages,
u64 start, unsigned long *total_in, unsigned long *total_out)
struct page **pages,
unsigned long *out_pages,
unsigned long *total_in,
unsigned long *total_out)
{ {
struct workspace *workspace = list_entry(ws, struct workspace, list); struct workspace *workspace = list_entry(ws, struct workspace, list);
ZSTD_CStream *stream; ZSTD_CStream *stream;
...@@ -548,7 +544,7 @@ static int zstd_compress_pages(struct list_head *ws, ...@@ -548,7 +544,7 @@ static int zstd_compress_pages(struct list_head *ws,
return ret; return ret;
} }
static int zstd_decompress_bio(struct list_head *ws, struct compressed_bio *cb) int zstd_decompress_bio(struct list_head *ws, struct compressed_bio *cb)
{ {
struct workspace *workspace = list_entry(ws, struct workspace, list); struct workspace *workspace = list_entry(ws, struct workspace, list);
struct page **pages_in = cb->compressed_pages; struct page **pages_in = cb->compressed_pages;
...@@ -626,10 +622,9 @@ static int zstd_decompress_bio(struct list_head *ws, struct compressed_bio *cb) ...@@ -626,10 +622,9 @@ static int zstd_decompress_bio(struct list_head *ws, struct compressed_bio *cb)
return ret; return ret;
} }
static int zstd_decompress(struct list_head *ws, unsigned char *data_in, int zstd_decompress(struct list_head *ws, unsigned char *data_in,
struct page *dest_page, struct page *dest_page, unsigned long start_byte, size_t srclen,
unsigned long start_byte, size_t destlen)
size_t srclen, size_t destlen)
{ {
struct workspace *workspace = list_entry(ws, struct workspace, list); struct workspace *workspace = list_entry(ws, struct workspace, list);
ZSTD_DStream *stream; ZSTD_DStream *stream;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment