Loading fs/btrfs/ctree.h +1 −0 Original line number Diff line number Diff line Loading @@ -354,6 +354,7 @@ struct btrfs_fs_info { spinlock_t new_trans_lock; u64 delalloc_bytes; u64 last_alloc; u64 last_data_alloc; }; /* * in ram representation of the tree. extent_root is used for all allocations Loading fs/btrfs/disk-io.c +1 −0 Original line number Diff line number Diff line Loading @@ -688,6 +688,7 @@ struct btrfs_root *open_ctree(struct super_block *sb) fs_info->closing = 0; fs_info->total_pinned = 0; fs_info->last_alloc = 0; fs_info->last_data_alloc = 0; #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,18) INIT_WORK(&fs_info->trans_work, btrfs_transaction_cleaner, fs_info); Loading fs/btrfs/extent-tree.c +16 −12 Original line number Diff line number Diff line Loading @@ -1410,6 +1410,7 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans, int ret; int slot = 0; u64 last_byte = 0; u64 *last_ptr = NULL; u64 orig_search_start = search_start; int start_found; struct extent_buffer *l; Loading @@ -1433,16 +1434,19 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans, /* for SSD, cluster allocations together as much as possible */ if (btrfs_test_opt(root, SSD)) { if (!data) { if (root->fs_info->last_alloc) hint_byte = root->fs_info->last_alloc; if (data) last_ptr = &root->fs_info->last_data_alloc; else last_ptr = &root->fs_info->last_alloc; if (*last_ptr) { hint_byte = *last_ptr; } else { hint_byte = hint_byte & ~((u64)BTRFS_BLOCK_GROUP_SIZE - 1); empty_size += 16 * 1024 * 1024; } } } search_end = min(search_end, btrfs_super_total_bytes(&info->super_copy)); Loading Loading @@ -1470,8 +1474,8 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans, search_start = find_search_start(root, &block_group, search_start, total_needed, data); if (!data && btrfs_test_opt(root, SSD) && info->last_alloc && search_start != info->last_alloc) { if (btrfs_test_opt(root, SSD) && *last_ptr && search_start != *last_ptr) { info->last_alloc = 0; if (!empty_size) { empty_size += 16 * 1024 * 1024; Loading Loading @@ -1609,6 +1613,8 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans, } ins->offset = num_bytes; btrfs_free_path(path); if (btrfs_test_opt(root, SSD)) *last_ptr = ins->objectid + ins->offset; return 0; new_group: Loading Loading @@ -1636,8 +1642,6 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans, error: btrfs_release_path(root, path); btrfs_free_path(path); if (btrfs_test_opt(root, SSD) && !ret && !data) info->last_alloc = ins->objectid + ins->offset; return ret; } /* Loading fs/btrfs/transaction.c +1 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ static int join_transaction(struct btrfs_root *root) root->fs_info->generation++; root->fs_info->running_transaction = cur_trans; root->fs_info->last_alloc = 0; root->fs_info->last_data_alloc = 0; cur_trans->num_writers = 1; cur_trans->num_joined = 0; cur_trans->transid = root->fs_info->generation; Loading Loading
fs/btrfs/ctree.h +1 −0 Original line number Diff line number Diff line Loading @@ -354,6 +354,7 @@ struct btrfs_fs_info { spinlock_t new_trans_lock; u64 delalloc_bytes; u64 last_alloc; u64 last_data_alloc; }; /* * in ram representation of the tree. extent_root is used for all allocations Loading
fs/btrfs/disk-io.c +1 −0 Original line number Diff line number Diff line Loading @@ -688,6 +688,7 @@ struct btrfs_root *open_ctree(struct super_block *sb) fs_info->closing = 0; fs_info->total_pinned = 0; fs_info->last_alloc = 0; fs_info->last_data_alloc = 0; #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,18) INIT_WORK(&fs_info->trans_work, btrfs_transaction_cleaner, fs_info); Loading
fs/btrfs/extent-tree.c +16 −12 Original line number Diff line number Diff line Loading @@ -1410,6 +1410,7 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans, int ret; int slot = 0; u64 last_byte = 0; u64 *last_ptr = NULL; u64 orig_search_start = search_start; int start_found; struct extent_buffer *l; Loading @@ -1433,16 +1434,19 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans, /* for SSD, cluster allocations together as much as possible */ if (btrfs_test_opt(root, SSD)) { if (!data) { if (root->fs_info->last_alloc) hint_byte = root->fs_info->last_alloc; if (data) last_ptr = &root->fs_info->last_data_alloc; else last_ptr = &root->fs_info->last_alloc; if (*last_ptr) { hint_byte = *last_ptr; } else { hint_byte = hint_byte & ~((u64)BTRFS_BLOCK_GROUP_SIZE - 1); empty_size += 16 * 1024 * 1024; } } } search_end = min(search_end, btrfs_super_total_bytes(&info->super_copy)); Loading Loading @@ -1470,8 +1474,8 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans, search_start = find_search_start(root, &block_group, search_start, total_needed, data); if (!data && btrfs_test_opt(root, SSD) && info->last_alloc && search_start != info->last_alloc) { if (btrfs_test_opt(root, SSD) && *last_ptr && search_start != *last_ptr) { info->last_alloc = 0; if (!empty_size) { empty_size += 16 * 1024 * 1024; Loading Loading @@ -1609,6 +1613,8 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans, } ins->offset = num_bytes; btrfs_free_path(path); if (btrfs_test_opt(root, SSD)) *last_ptr = ins->objectid + ins->offset; return 0; new_group: Loading Loading @@ -1636,8 +1642,6 @@ static int noinline find_free_extent(struct btrfs_trans_handle *trans, error: btrfs_release_path(root, path); btrfs_free_path(path); if (btrfs_test_opt(root, SSD) && !ret && !data) info->last_alloc = ins->objectid + ins->offset; return ret; } /* Loading
fs/btrfs/transaction.c +1 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,7 @@ static int join_transaction(struct btrfs_root *root) root->fs_info->generation++; root->fs_info->running_transaction = cur_trans; root->fs_info->last_alloc = 0; root->fs_info->last_data_alloc = 0; cur_trans->num_writers = 1; cur_trans->num_joined = 0; cur_trans->transid = root->fs_info->generation; Loading