You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
83 lines
2.8 KiB
83 lines
2.8 KiB
/* |
|
* Copyright (C) 2008 Oracle. All rights reserved. |
|
* |
|
* This program is free software; you can redistribute it and/or |
|
* modify it under the terms of the GNU General Public |
|
* License v2 as published by the Free Software Foundation. |
|
* |
|
* This program is distributed in the hope that it will be useful, |
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
* General Public License for more details. |
|
* |
|
* You should have received a copy of the GNU General Public |
|
* License along with this program; if not, write to the |
|
* Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
|
* Boston, MA 021110-1307, USA. |
|
*/ |
|
|
|
#ifndef __BTRFS_COMPRESSION_ |
|
#define __BTRFS_COMPRESSION_ |
|
|
|
void btrfs_init_compress(void); |
|
void btrfs_exit_compress(void); |
|
|
|
int btrfs_compress_pages(int type, struct address_space *mapping, |
|
u64 start, unsigned long len, |
|
struct page **pages, |
|
unsigned long nr_dest_pages, |
|
unsigned long *out_pages, |
|
unsigned long *total_in, |
|
unsigned long *total_out, |
|
unsigned long max_out); |
|
int btrfs_decompress(int type, unsigned char *data_in, struct page *dest_page, |
|
unsigned long start_byte, size_t srclen, size_t destlen); |
|
int btrfs_decompress_buf2page(char *buf, unsigned long buf_start, |
|
unsigned long total_out, u64 disk_start, |
|
struct bio_vec *bvec, int vcnt, |
|
unsigned long *pg_index, |
|
unsigned long *pg_offset); |
|
|
|
int btrfs_submit_compressed_write(struct inode *inode, u64 start, |
|
unsigned long len, u64 disk_start, |
|
unsigned long compressed_len, |
|
struct page **compressed_pages, |
|
unsigned long nr_pages); |
|
int btrfs_submit_compressed_read(struct inode *inode, struct bio *bio, |
|
int mirror_num, unsigned long bio_flags); |
|
void btrfs_clear_biovec_end(struct bio_vec *bvec, int vcnt, |
|
unsigned long pg_index, |
|
unsigned long pg_offset); |
|
struct btrfs_compress_op { |
|
struct list_head *(*alloc_workspace)(void); |
|
|
|
void (*free_workspace)(struct list_head *workspace); |
|
|
|
int (*compress_pages)(struct list_head *workspace, |
|
struct address_space *mapping, |
|
u64 start, unsigned long len, |
|
struct page **pages, |
|
unsigned long nr_dest_pages, |
|
unsigned long *out_pages, |
|
unsigned long *total_in, |
|
unsigned long *total_out, |
|
unsigned long max_out); |
|
|
|
int (*decompress_biovec)(struct list_head *workspace, |
|
struct page **pages_in, |
|
u64 disk_start, |
|
struct bio_vec *bvec, |
|
int vcnt, |
|
size_t srclen); |
|
|
|
int (*decompress)(struct list_head *workspace, |
|
unsigned char *data_in, |
|
struct page *dest_page, |
|
unsigned long start_byte, |
|
size_t srclen, size_t destlen); |
|
}; |
|
|
|
extern struct btrfs_compress_op btrfs_zlib_compress; |
|
extern struct btrfs_compress_op btrfs_lzo_compress; |
|
|
|
#endif
|
|
|