Skip to content

Commit 523b56e

Browse files
committed
btrfs-progs: do not generate checksum nor compress if the inode has
NODATACOW or NODATASUM Currently mkfs.btrfs --rootdir is implying data checksum, but soon we will support per-inode NODATACOW|NODATASUM flags. To support per-inode NODATACOW|NODATASUM flags: - Avoid compression if the inode has either NODATACOW|NODATASUM flag - Do not generate data checksum if the inode has either NODATACOW|NODATASUM flag. Both behaviors are the following the kernel ones. Signed-off-by: Qu Wenruo <[email protected]>
1 parent 4e5a190 commit 523b56e

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

mkfs/rootdir.c

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -716,12 +716,19 @@ static int add_file_item_extent(struct btrfs_trans_handle *trans,
716716
u64 buf_size;
717717
char *write_buf;
718718
bool do_comp = g_compression != BTRFS_COMPRESS_NONE;
719+
bool datasum = true;
719720
ssize_t comp_ret;
720721
u64 flags = btrfs_stack_inode_flags(btrfs_inode);
721722

722723
if (flags & BTRFS_INODE_NOCOMPRESS)
723724
do_comp = false;
724725

726+
if (flags & BTRFS_INODE_NODATACOW ||
727+
flags & BTRFS_INODE_NODATASUM) {
728+
datasum = false;
729+
do_comp = false;
730+
}
731+
725732
buf_size = do_comp ? BTRFS_MAX_COMPRESSED : MAX_EXTENT_SIZE;
726733
to_read = min(file_pos + buf_size, source->size) - file_pos;
727734

@@ -852,13 +859,15 @@ static int add_file_item_extent(struct btrfs_trans_handle *trans,
852859
return ret;
853860
}
854861

855-
for (unsigned int i = 0; i < to_write / sectorsize; i++) {
856-
ret = btrfs_csum_file_block(trans, first_block + (i * sectorsize),
862+
if (datasum) {
863+
for (unsigned int i = 0; i < to_write / sectorsize; i++) {
864+
ret = btrfs_csum_file_block(trans, first_block + (i * sectorsize),
857865
BTRFS_EXTENT_CSUM_OBJECTID,
858866
root->fs_info->csum_type,
859867
write_buf + (i * sectorsize));
860-
if (ret)
861-
return ret;
868+
if (ret)
869+
return ret;
870+
}
862871
}
863872

864873
btrfs_set_stack_file_extent_type(&stack_fi, BTRFS_FILE_EXTENT_REG);

0 commit comments

Comments
 (0)