Commit b52aa8c9 authored by David Sterba's avatar David Sterba

btrfs: rename variable holding per-inode compression type

This is preparatory for separating inode compression requested by defrag
and set via properties. This will fix a usability bug when defrag will
reset compression type to NONE. If the file has compression set via
property, it will not apply anymore (until next mount or reset through
command line).

We're going to fix that by adding another variable just for the defrag
call and won't touch the property. The defrag will have higher priority
when deciding whether to compress the data.
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent c2fcdcdf
...@@ -179,9 +179,9 @@ struct btrfs_inode { ...@@ -179,9 +179,9 @@ struct btrfs_inode {
unsigned reserved_extents; unsigned reserved_extents;
/* /*
* always compress this one file * Cached values of inode properties
*/ */
unsigned force_compress; unsigned prop_compress; /* per-file compression algorithm */
struct btrfs_delayed_node *delayed_node; struct btrfs_delayed_node *delayed_node;
......
...@@ -404,7 +404,7 @@ static inline int inode_need_compress(struct inode *inode, u64 start, u64 end) ...@@ -404,7 +404,7 @@ static inline int inode_need_compress(struct inode *inode, u64 start, u64 end)
return 0; return 0;
if (btrfs_test_opt(fs_info, COMPRESS) || if (btrfs_test_opt(fs_info, COMPRESS) ||
BTRFS_I(inode)->flags & BTRFS_INODE_COMPRESS || BTRFS_I(inode)->flags & BTRFS_INODE_COMPRESS ||
BTRFS_I(inode)->force_compress) BTRFS_I(inode)->prop_compress)
return btrfs_compress_heuristic(inode, start, end); return btrfs_compress_heuristic(inode, start, end);
return 0; return 0;
} }
...@@ -511,8 +511,8 @@ static noinline void compress_file_range(struct inode *inode, ...@@ -511,8 +511,8 @@ static noinline void compress_file_range(struct inode *inode,
goto cont; goto cont;
} }
if (BTRFS_I(inode)->force_compress) if (BTRFS_I(inode)->prop_compress)
compress_type = BTRFS_I(inode)->force_compress; compress_type = BTRFS_I(inode)->prop_compress;
/* /*
* we need to call clear_page_dirty_for_io on each * we need to call clear_page_dirty_for_io on each
...@@ -645,7 +645,7 @@ static noinline void compress_file_range(struct inode *inode, ...@@ -645,7 +645,7 @@ static noinline void compress_file_range(struct inode *inode,
/* flag the file so we don't compress in the future */ /* flag the file so we don't compress in the future */
if (!btrfs_test_opt(fs_info, FORCE_COMPRESS) && if (!btrfs_test_opt(fs_info, FORCE_COMPRESS) &&
!(BTRFS_I(inode)->force_compress)) { !(BTRFS_I(inode)->prop_compress)) {
BTRFS_I(inode)->flags |= BTRFS_INODE_NOCOMPRESS; BTRFS_I(inode)->flags |= BTRFS_INODE_NOCOMPRESS;
} }
} }
...@@ -9433,7 +9433,7 @@ struct inode *btrfs_alloc_inode(struct super_block *sb) ...@@ -9433,7 +9433,7 @@ struct inode *btrfs_alloc_inode(struct super_block *sb)
ei->reserved_extents = 0; ei->reserved_extents = 0;
ei->runtime_flags = 0; ei->runtime_flags = 0;
ei->force_compress = BTRFS_COMPRESS_NONE; ei->prop_compress = BTRFS_COMPRESS_NONE;
ei->delayed_node = NULL; ei->delayed_node = NULL;
......
...@@ -1371,7 +1371,7 @@ int btrfs_defrag_file(struct inode *inode, struct file *file, ...@@ -1371,7 +1371,7 @@ int btrfs_defrag_file(struct inode *inode, struct file *file,
inode_lock(inode); inode_lock(inode);
if (range->flags & BTRFS_DEFRAG_RANGE_COMPRESS) if (range->flags & BTRFS_DEFRAG_RANGE_COMPRESS)
BTRFS_I(inode)->force_compress = compress_type; BTRFS_I(inode)->prop_compress = compress_type;
ret = cluster_pages_for_defrag(inode, pages, i, cluster); ret = cluster_pages_for_defrag(inode, pages, i, cluster);
if (ret < 0) { if (ret < 0) {
inode_unlock(inode); inode_unlock(inode);
...@@ -1442,7 +1442,7 @@ int btrfs_defrag_file(struct inode *inode, struct file *file, ...@@ -1442,7 +1442,7 @@ int btrfs_defrag_file(struct inode *inode, struct file *file,
out_ra: out_ra:
if (range->flags & BTRFS_DEFRAG_RANGE_COMPRESS) { if (range->flags & BTRFS_DEFRAG_RANGE_COMPRESS) {
inode_lock(inode); inode_lock(inode);
BTRFS_I(inode)->force_compress = BTRFS_COMPRESS_NONE; BTRFS_I(inode)->prop_compress = BTRFS_COMPRESS_NONE;
inode_unlock(inode); inode_unlock(inode);
} }
if (!file) if (!file)
......
...@@ -403,7 +403,7 @@ static int prop_compression_apply(struct inode *inode, ...@@ -403,7 +403,7 @@ static int prop_compression_apply(struct inode *inode,
if (len == 0) { if (len == 0) {
BTRFS_I(inode)->flags |= BTRFS_INODE_NOCOMPRESS; BTRFS_I(inode)->flags |= BTRFS_INODE_NOCOMPRESS;
BTRFS_I(inode)->flags &= ~BTRFS_INODE_COMPRESS; BTRFS_I(inode)->flags &= ~BTRFS_INODE_COMPRESS;
BTRFS_I(inode)->force_compress = BTRFS_COMPRESS_NONE; BTRFS_I(inode)->prop_compress = BTRFS_COMPRESS_NONE;
return 0; return 0;
} }
...@@ -417,14 +417,14 @@ static int prop_compression_apply(struct inode *inode, ...@@ -417,14 +417,14 @@ static int prop_compression_apply(struct inode *inode,
BTRFS_I(inode)->flags &= ~BTRFS_INODE_NOCOMPRESS; BTRFS_I(inode)->flags &= ~BTRFS_INODE_NOCOMPRESS;
BTRFS_I(inode)->flags |= BTRFS_INODE_COMPRESS; BTRFS_I(inode)->flags |= BTRFS_INODE_COMPRESS;
BTRFS_I(inode)->force_compress = type; BTRFS_I(inode)->prop_compress = type;
return 0; return 0;
} }
static const char *prop_compression_extract(struct inode *inode) static const char *prop_compression_extract(struct inode *inode)
{ {
switch (BTRFS_I(inode)->force_compress) { switch (BTRFS_I(inode)->prop_compress) {
case BTRFS_COMPRESS_ZLIB: case BTRFS_COMPRESS_ZLIB:
return "zlib"; return "zlib";
case BTRFS_COMPRESS_LZO: case BTRFS_COMPRESS_LZO:
......
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