btrfs: remove crc_check logic from free space
Following removal of the ino cache io_ctl_init will be called only on behalf of the freespace inode. In this case we always want to check CRCs so conditional code that depended on io_ctl::check_crc can be removed. Signed-off-by: Nikolay Borisov <nborisov@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Родитель
5297199a8b
Коммит
7dbdb443a7
|
@ -305,16 +305,11 @@ static int io_ctl_init(struct btrfs_io_ctl *io_ctl, struct inode *inode,
|
|||
int write)
|
||||
{
|
||||
int num_pages;
|
||||
int check_crcs = 0;
|
||||
|
||||
num_pages = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
|
||||
|
||||
if (btrfs_ino(BTRFS_I(inode)) != BTRFS_FREE_INO_OBJECTID)
|
||||
check_crcs = 1;
|
||||
|
||||
/* Make sure we can fit our crcs and generation into the first page */
|
||||
if (write && check_crcs &&
|
||||
(num_pages * sizeof(u32) + sizeof(u64)) > PAGE_SIZE)
|
||||
if (write && (num_pages * sizeof(u32) + sizeof(u64)) > PAGE_SIZE)
|
||||
return -ENOSPC;
|
||||
|
||||
memset(io_ctl, 0, sizeof(struct btrfs_io_ctl));
|
||||
|
@ -325,7 +320,6 @@ static int io_ctl_init(struct btrfs_io_ctl *io_ctl, struct inode *inode,
|
|||
|
||||
io_ctl->num_pages = num_pages;
|
||||
io_ctl->fs_info = btrfs_sb(inode->i_sb);
|
||||
io_ctl->check_crcs = check_crcs;
|
||||
io_ctl->inode = inode;
|
||||
|
||||
return 0;
|
||||
|
@ -420,13 +414,8 @@ static void io_ctl_set_generation(struct btrfs_io_ctl *io_ctl, u64 generation)
|
|||
* Skip the csum areas. If we don't check crcs then we just have a
|
||||
* 64bit chunk at the front of the first page.
|
||||
*/
|
||||
if (io_ctl->check_crcs) {
|
||||
io_ctl->cur += (sizeof(u32) * io_ctl->num_pages);
|
||||
io_ctl->size -= sizeof(u64) + (sizeof(u32) * io_ctl->num_pages);
|
||||
} else {
|
||||
io_ctl->cur += sizeof(u64);
|
||||
io_ctl->size -= sizeof(u64) * 2;
|
||||
}
|
||||
io_ctl->cur += (sizeof(u32) * io_ctl->num_pages);
|
||||
io_ctl->size -= sizeof(u64) + (sizeof(u32) * io_ctl->num_pages);
|
||||
|
||||
put_unaligned_le64(generation, io_ctl->cur);
|
||||
io_ctl->cur += sizeof(u64);
|
||||
|
@ -440,14 +429,8 @@ static int io_ctl_check_generation(struct btrfs_io_ctl *io_ctl, u64 generation)
|
|||
* Skip the crc area. If we don't check crcs then we just have a 64bit
|
||||
* chunk at the front of the first page.
|
||||
*/
|
||||
if (io_ctl->check_crcs) {
|
||||
io_ctl->cur += sizeof(u32) * io_ctl->num_pages;
|
||||
io_ctl->size -= sizeof(u64) +
|
||||
(sizeof(u32) * io_ctl->num_pages);
|
||||
} else {
|
||||
io_ctl->cur += sizeof(u64);
|
||||
io_ctl->size -= sizeof(u64) * 2;
|
||||
}
|
||||
io_ctl->cur += sizeof(u32) * io_ctl->num_pages;
|
||||
io_ctl->size -= sizeof(u64) + (sizeof(u32) * io_ctl->num_pages);
|
||||
|
||||
cache_gen = get_unaligned_le64(io_ctl->cur);
|
||||
if (cache_gen != generation) {
|
||||
|
@ -467,11 +450,6 @@ static void io_ctl_set_crc(struct btrfs_io_ctl *io_ctl, int index)
|
|||
u32 crc = ~(u32)0;
|
||||
unsigned offset = 0;
|
||||
|
||||
if (!io_ctl->check_crcs) {
|
||||
io_ctl_unmap_page(io_ctl);
|
||||
return;
|
||||
}
|
||||
|
||||
if (index == 0)
|
||||
offset = sizeof(u32) * io_ctl->num_pages;
|
||||
|
||||
|
@ -489,11 +467,6 @@ static int io_ctl_check_crc(struct btrfs_io_ctl *io_ctl, int index)
|
|||
u32 crc = ~(u32)0;
|
||||
unsigned offset = 0;
|
||||
|
||||
if (!io_ctl->check_crcs) {
|
||||
io_ctl_map_page(io_ctl, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (index == 0)
|
||||
offset = sizeof(u32) * io_ctl->num_pages;
|
||||
|
||||
|
|
|
@ -76,7 +76,6 @@ struct btrfs_io_ctl {
|
|||
int num_pages;
|
||||
int entries;
|
||||
int bitmaps;
|
||||
unsigned check_crcs:1;
|
||||
};
|
||||
|
||||
struct inode *lookup_free_space_inode(struct btrfs_block_group *block_group,
|
||||
|
|
Загрузка…
Ссылка в новой задаче