diff options
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r-- | fs/btrfs/inode.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 7d10d1ccb0fe..3657925c2461 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c | |||
@@ -379,7 +379,8 @@ again: | |||
379 | * change at any time if we discover bad compression ratios. | 379 | * change at any time if we discover bad compression ratios. |
380 | */ | 380 | */ |
381 | if (!(BTRFS_I(inode)->flags & BTRFS_INODE_NOCOMPRESS) && | 381 | if (!(BTRFS_I(inode)->flags & BTRFS_INODE_NOCOMPRESS) && |
382 | btrfs_test_opt(root, COMPRESS)) { | 382 | (btrfs_test_opt(root, COMPRESS) || |
383 | (BTRFS_I(inode)->force_compress))) { | ||
383 | WARN_ON(pages); | 384 | WARN_ON(pages); |
384 | pages = kzalloc(sizeof(struct page *) * nr_pages, GFP_NOFS); | 385 | pages = kzalloc(sizeof(struct page *) * nr_pages, GFP_NOFS); |
385 | 386 | ||
@@ -483,8 +484,10 @@ again: | |||
483 | nr_pages_ret = 0; | 484 | nr_pages_ret = 0; |
484 | 485 | ||
485 | /* flag the file so we don't compress in the future */ | 486 | /* flag the file so we don't compress in the future */ |
486 | if (!btrfs_test_opt(root, FORCE_COMPRESS)) | 487 | if (!btrfs_test_opt(root, FORCE_COMPRESS) && |
488 | !(BTRFS_I(inode)->force_compress)) { | ||
487 | BTRFS_I(inode)->flags |= BTRFS_INODE_NOCOMPRESS; | 489 | BTRFS_I(inode)->flags |= BTRFS_INODE_NOCOMPRESS; |
490 | } | ||
488 | } | 491 | } |
489 | if (will_compress) { | 492 | if (will_compress) { |
490 | *num_added += 1; | 493 | *num_added += 1; |
@@ -1211,7 +1214,8 @@ static int run_delalloc_range(struct inode *inode, struct page *locked_page, | |||
1211 | else if (BTRFS_I(inode)->flags & BTRFS_INODE_PREALLOC) | 1214 | else if (BTRFS_I(inode)->flags & BTRFS_INODE_PREALLOC) |
1212 | ret = run_delalloc_nocow(inode, locked_page, start, end, | 1215 | ret = run_delalloc_nocow(inode, locked_page, start, end, |
1213 | page_started, 0, nr_written); | 1216 | page_started, 0, nr_written); |
1214 | else if (!btrfs_test_opt(root, COMPRESS)) | 1217 | else if (!btrfs_test_opt(root, COMPRESS) && |
1218 | !(BTRFS_I(inode)->force_compress)) | ||
1215 | ret = cow_file_range(inode, locked_page, start, end, | 1219 | ret = cow_file_range(inode, locked_page, start, end, |
1216 | page_started, nr_written, 1); | 1220 | page_started, nr_written, 1); |
1217 | else | 1221 | else |
@@ -3639,6 +3643,7 @@ static noinline void init_btrfs_i(struct inode *inode) | |||
3639 | bi->index_cnt = (u64)-1; | 3643 | bi->index_cnt = (u64)-1; |
3640 | bi->last_unlink_trans = 0; | 3644 | bi->last_unlink_trans = 0; |
3641 | bi->ordered_data_close = 0; | 3645 | bi->ordered_data_close = 0; |
3646 | bi->force_compress = 0; | ||
3642 | extent_map_tree_init(&BTRFS_I(inode)->extent_tree, GFP_NOFS); | 3647 | extent_map_tree_init(&BTRFS_I(inode)->extent_tree, GFP_NOFS); |
3643 | extent_io_tree_init(&BTRFS_I(inode)->io_tree, | 3648 | extent_io_tree_init(&BTRFS_I(inode)->io_tree, |
3644 | inode->i_mapping, GFP_NOFS); | 3649 | inode->i_mapping, GFP_NOFS); |