Skip to content

Commit

Permalink
Btrfs: check the nodatasum flag when writing compressed files
Browse files Browse the repository at this point in the history
If mounting with nodatasum option, we won't csum file data for
general write or direct-io write, and this rule should also be
applied when writing compressed files.

Signed-off-by: Li Zefan <lizf@cn.fujitsu.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>
  • Loading branch information
Li Zefan authored and Chris Mason committed Aug 1, 2011
1 parent 77906a5 commit e55179b
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions fs/btrfs/compression.c
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,7 @@ int btrfs_submit_compressed_write(struct inode *inode, u64 start,
u64 first_byte = disk_start;
struct block_device *bdev;
int ret;
int skip_sum = BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM;

WARN_ON(start & ((u64)PAGE_CACHE_SIZE - 1));
cb = kmalloc(compressed_bio_size(root, compressed_len), GFP_NOFS);
Expand Down Expand Up @@ -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);
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);
BUG_ON(ret);
Expand All @@ -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);
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);
BUG_ON(ret);
Expand Down

0 comments on commit e55179b

Please sign in to comment.