|
@@ -338,6 +338,7 @@ int btrfs_submit_compressed_write(struct inode *inode, u64 start,
|
|
u64 first_byte = disk_start;
|
|
u64 first_byte = disk_start;
|
|
struct block_device *bdev;
|
|
struct block_device *bdev;
|
|
int ret;
|
|
int ret;
|
|
|
|
+ int skip_sum = BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM;
|
|
|
|
|
|
WARN_ON(start & ((u64)PAGE_CACHE_SIZE - 1));
|
|
WARN_ON(start & ((u64)PAGE_CACHE_SIZE - 1));
|
|
cb = kmalloc(compressed_bio_size(root, compressed_len), GFP_NOFS);
|
|
cb = kmalloc(compressed_bio_size(root, compressed_len), GFP_NOFS);
|
|
@@ -392,8 +393,11 @@ int btrfs_submit_compressed_write(struct inode *inode, u64 start,
|
|
ret = btrfs_bio_wq_end_io(root->fs_info, bio, 0);
|
|
ret = btrfs_bio_wq_end_io(root->fs_info, bio, 0);
|
|
BUG_ON(ret);
|
|
BUG_ON(ret);
|
|
|
|
|
|
- ret = btrfs_csum_one_bio(root, inode, bio, start, 1);
|
|
|
|
- BUG_ON(ret);
|
|
|
|
|
|
+ if (!skip_sum) {
|
|
|
|
+ ret = btrfs_csum_one_bio(root, inode, bio,
|
|
|
|
+ start, 1);
|
|
|
|
+ BUG_ON(ret);
|
|
|
|
+ }
|
|
|
|
|
|
ret = btrfs_map_bio(root, WRITE, bio, 0, 1);
|
|
ret = btrfs_map_bio(root, WRITE, bio, 0, 1);
|
|
BUG_ON(ret);
|
|
BUG_ON(ret);
|
|
@@ -418,8 +422,10 @@ int btrfs_submit_compressed_write(struct inode *inode, u64 start,
|
|
ret = btrfs_bio_wq_end_io(root->fs_info, bio, 0);
|
|
ret = btrfs_bio_wq_end_io(root->fs_info, bio, 0);
|
|
BUG_ON(ret);
|
|
BUG_ON(ret);
|
|
|
|
|
|
- ret = btrfs_csum_one_bio(root, inode, bio, start, 1);
|
|
|
|
- BUG_ON(ret);
|
|
|
|
|
|
+ if (!skip_sum) {
|
|
|
|
+ ret = btrfs_csum_one_bio(root, inode, bio, start, 1);
|
|
|
|
+ BUG_ON(ret);
|
|
|
|
+ }
|
|
|
|
|
|
ret = btrfs_map_bio(root, WRITE, bio, 0, 1);
|
|
ret = btrfs_map_bio(root, WRITE, bio, 0, 1);
|
|
BUG_ON(ret);
|
|
BUG_ON(ret);
|