mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	Btrfs: get rid of unused orphan infrastructure
Now that we don't keep long-standing reservations for orphan items, root->orphan_block_rsv isn't used. We can git rid of it, along with: - root->orphan_lock, which was used to protect root->orphan_block_rsv - root->orphan_inodes, which was used as a refcount for root->orphan_block_rsv - BTRFS_INODE_ORPHAN_META_RESERVED, which was used to track reservations in root->orphan_block_rsv - btrfs_orphan_commit_root(), which was the last user of any of these and does nothing else Reviewed-by: Nikolay Borisov <nborisov@suse.com> Signed-off-by: Omar Sandoval <osandov@fb.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
		
							parent
							
								
									27919067f1
								
							
						
					
					
						commit
						a575ceeb13
					
				
					 6 changed files with 1 additions and 99 deletions
				
			
		| 
						 | 
					@ -20,7 +20,6 @@
 | 
				
			||||||
 * new data the application may have written before commit.
 | 
					 * new data the application may have written before commit.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define BTRFS_INODE_ORDERED_DATA_CLOSE		0
 | 
					#define BTRFS_INODE_ORDERED_DATA_CLOSE		0
 | 
				
			||||||
#define BTRFS_INODE_ORPHAN_META_RESERVED	1
 | 
					 | 
				
			||||||
#define BTRFS_INODE_DUMMY			2
 | 
					#define BTRFS_INODE_DUMMY			2
 | 
				
			||||||
#define BTRFS_INODE_IN_DEFRAG			3
 | 
					#define BTRFS_INODE_IN_DEFRAG			3
 | 
				
			||||||
#define BTRFS_INODE_HAS_ASYNC_EXTENT		5
 | 
					#define BTRFS_INODE_HAS_ASYNC_EXTENT		5
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1223,9 +1223,6 @@ struct btrfs_root {
 | 
				
			||||||
	spinlock_t log_extents_lock[2];
 | 
						spinlock_t log_extents_lock[2];
 | 
				
			||||||
	struct list_head logged_list[2];
 | 
						struct list_head logged_list[2];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spinlock_t orphan_lock;
 | 
					 | 
				
			||||||
	atomic_t orphan_inodes;
 | 
					 | 
				
			||||||
	struct btrfs_block_rsv *orphan_block_rsv;
 | 
					 | 
				
			||||||
	int orphan_cleanup_state;
 | 
						int orphan_cleanup_state;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	spinlock_t inode_lock;
 | 
						spinlock_t inode_lock;
 | 
				
			||||||
| 
						 | 
					@ -2768,9 +2765,6 @@ void btrfs_delalloc_release_space(struct inode *inode,
 | 
				
			||||||
void btrfs_free_reserved_data_space_noquota(struct inode *inode, u64 start,
 | 
					void btrfs_free_reserved_data_space_noquota(struct inode *inode, u64 start,
 | 
				
			||||||
					    u64 len);
 | 
										    u64 len);
 | 
				
			||||||
void btrfs_trans_release_chunk_metadata(struct btrfs_trans_handle *trans);
 | 
					void btrfs_trans_release_chunk_metadata(struct btrfs_trans_handle *trans);
 | 
				
			||||||
int btrfs_orphan_reserve_metadata(struct btrfs_trans_handle *trans,
 | 
					 | 
				
			||||||
				  struct btrfs_inode *inode);
 | 
					 | 
				
			||||||
void btrfs_orphan_release_metadata(struct btrfs_inode *inode);
 | 
					 | 
				
			||||||
int btrfs_subvolume_reserve_metadata(struct btrfs_root *root,
 | 
					int btrfs_subvolume_reserve_metadata(struct btrfs_root *root,
 | 
				
			||||||
				     struct btrfs_block_rsv *rsv,
 | 
									     struct btrfs_block_rsv *rsv,
 | 
				
			||||||
				     int nitems,
 | 
									     int nitems,
 | 
				
			||||||
| 
						 | 
					@ -3228,8 +3222,6 @@ int btrfs_update_inode_fallback(struct btrfs_trans_handle *trans,
 | 
				
			||||||
int btrfs_orphan_add(struct btrfs_trans_handle *trans,
 | 
					int btrfs_orphan_add(struct btrfs_trans_handle *trans,
 | 
				
			||||||
		struct btrfs_inode *inode);
 | 
							struct btrfs_inode *inode);
 | 
				
			||||||
int btrfs_orphan_cleanup(struct btrfs_root *root);
 | 
					int btrfs_orphan_cleanup(struct btrfs_root *root);
 | 
				
			||||||
void btrfs_orphan_commit_root(struct btrfs_trans_handle *trans,
 | 
					 | 
				
			||||||
			      struct btrfs_root *root);
 | 
					 | 
				
			||||||
int btrfs_cont_expand(struct inode *inode, loff_t oldsize, loff_t size);
 | 
					int btrfs_cont_expand(struct inode *inode, loff_t oldsize, loff_t size);
 | 
				
			||||||
void btrfs_add_delayed_iput(struct inode *inode);
 | 
					void btrfs_add_delayed_iput(struct inode *inode);
 | 
				
			||||||
void btrfs_run_delayed_iputs(struct btrfs_fs_info *fs_info);
 | 
					void btrfs_run_delayed_iputs(struct btrfs_fs_info *fs_info);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1184,7 +1184,6 @@ static void __setup_root(struct btrfs_root *root, struct btrfs_fs_info *fs_info,
 | 
				
			||||||
	root->inode_tree = RB_ROOT;
 | 
						root->inode_tree = RB_ROOT;
 | 
				
			||||||
	INIT_RADIX_TREE(&root->delayed_nodes_tree, GFP_ATOMIC);
 | 
						INIT_RADIX_TREE(&root->delayed_nodes_tree, GFP_ATOMIC);
 | 
				
			||||||
	root->block_rsv = NULL;
 | 
						root->block_rsv = NULL;
 | 
				
			||||||
	root->orphan_block_rsv = NULL;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	INIT_LIST_HEAD(&root->dirty_list);
 | 
						INIT_LIST_HEAD(&root->dirty_list);
 | 
				
			||||||
	INIT_LIST_HEAD(&root->root_list);
 | 
						INIT_LIST_HEAD(&root->root_list);
 | 
				
			||||||
| 
						 | 
					@ -1194,7 +1193,6 @@ static void __setup_root(struct btrfs_root *root, struct btrfs_fs_info *fs_info,
 | 
				
			||||||
	INIT_LIST_HEAD(&root->ordered_root);
 | 
						INIT_LIST_HEAD(&root->ordered_root);
 | 
				
			||||||
	INIT_LIST_HEAD(&root->logged_list[0]);
 | 
						INIT_LIST_HEAD(&root->logged_list[0]);
 | 
				
			||||||
	INIT_LIST_HEAD(&root->logged_list[1]);
 | 
						INIT_LIST_HEAD(&root->logged_list[1]);
 | 
				
			||||||
	spin_lock_init(&root->orphan_lock);
 | 
					 | 
				
			||||||
	spin_lock_init(&root->inode_lock);
 | 
						spin_lock_init(&root->inode_lock);
 | 
				
			||||||
	spin_lock_init(&root->delalloc_lock);
 | 
						spin_lock_init(&root->delalloc_lock);
 | 
				
			||||||
	spin_lock_init(&root->ordered_extent_lock);
 | 
						spin_lock_init(&root->ordered_extent_lock);
 | 
				
			||||||
| 
						 | 
					@ -1215,7 +1213,6 @@ static void __setup_root(struct btrfs_root *root, struct btrfs_fs_info *fs_info,
 | 
				
			||||||
	atomic_set(&root->log_commit[1], 0);
 | 
						atomic_set(&root->log_commit[1], 0);
 | 
				
			||||||
	atomic_set(&root->log_writers, 0);
 | 
						atomic_set(&root->log_writers, 0);
 | 
				
			||||||
	atomic_set(&root->log_batch, 0);
 | 
						atomic_set(&root->log_batch, 0);
 | 
				
			||||||
	atomic_set(&root->orphan_inodes, 0);
 | 
					 | 
				
			||||||
	refcount_set(&root->refs, 1);
 | 
						refcount_set(&root->refs, 1);
 | 
				
			||||||
	atomic_set(&root->will_be_snapshotted, 0);
 | 
						atomic_set(&root->will_be_snapshotted, 0);
 | 
				
			||||||
	root->log_transid = 0;
 | 
						root->log_transid = 0;
 | 
				
			||||||
| 
						 | 
					@ -3884,8 +3881,6 @@ static void free_fs_root(struct btrfs_root *root)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	iput(root->ino_cache_inode);
 | 
						iput(root->ino_cache_inode);
 | 
				
			||||||
	WARN_ON(!RB_EMPTY_ROOT(&root->inode_tree));
 | 
						WARN_ON(!RB_EMPTY_ROOT(&root->inode_tree));
 | 
				
			||||||
	btrfs_free_block_rsv(root->fs_info, root->orphan_block_rsv);
 | 
					 | 
				
			||||||
	root->orphan_block_rsv = NULL;
 | 
					 | 
				
			||||||
	if (root->anon_dev)
 | 
						if (root->anon_dev)
 | 
				
			||||||
		free_anon_bdev(root->anon_dev);
 | 
							free_anon_bdev(root->anon_dev);
 | 
				
			||||||
	if (root->subv_writers)
 | 
						if (root->subv_writers)
 | 
				
			||||||
| 
						 | 
					@ -3976,7 +3971,6 @@ int btrfs_commit_super(struct btrfs_fs_info *fs_info)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void close_ctree(struct btrfs_fs_info *fs_info)
 | 
					void close_ctree(struct btrfs_fs_info *fs_info)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct btrfs_root *root = fs_info->tree_root;
 | 
					 | 
				
			||||||
	int ret;
 | 
						int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	set_bit(BTRFS_FS_CLOSING_START, &fs_info->flags);
 | 
						set_bit(BTRFS_FS_CLOSING_START, &fs_info->flags);
 | 
				
			||||||
| 
						 | 
					@ -4072,9 +4066,6 @@ void close_ctree(struct btrfs_fs_info *fs_info)
 | 
				
			||||||
	btrfs_free_stripe_hash_table(fs_info);
 | 
						btrfs_free_stripe_hash_table(fs_info);
 | 
				
			||||||
	btrfs_free_ref_cache(fs_info);
 | 
						btrfs_free_ref_cache(fs_info);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	__btrfs_free_block_rsv(root->orphan_block_rsv);
 | 
					 | 
				
			||||||
	root->orphan_block_rsv = NULL;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	while (!list_empty(&fs_info->pinned_chunks)) {
 | 
						while (!list_empty(&fs_info->pinned_chunks)) {
 | 
				
			||||||
		struct extent_map *em;
 | 
							struct extent_map *em;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5949,44 +5949,6 @@ void btrfs_trans_release_chunk_metadata(struct btrfs_trans_handle *trans)
 | 
				
			||||||
	trans->chunk_bytes_reserved = 0;
 | 
						trans->chunk_bytes_reserved = 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Can only return 0 or -ENOSPC */
 | 
					 | 
				
			||||||
int btrfs_orphan_reserve_metadata(struct btrfs_trans_handle *trans,
 | 
					 | 
				
			||||||
				  struct btrfs_inode *inode)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb);
 | 
					 | 
				
			||||||
	struct btrfs_root *root = inode->root;
 | 
					 | 
				
			||||||
	/*
 | 
					 | 
				
			||||||
	 * We always use trans->block_rsv here as we will have reserved space
 | 
					 | 
				
			||||||
	 * for our orphan when starting the transaction, using get_block_rsv()
 | 
					 | 
				
			||||||
	 * here will sometimes make us choose the wrong block rsv as we could be
 | 
					 | 
				
			||||||
	 * doing a reloc inode for a non refcounted root.
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	struct btrfs_block_rsv *src_rsv = trans->block_rsv;
 | 
					 | 
				
			||||||
	struct btrfs_block_rsv *dst_rsv = root->orphan_block_rsv;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/*
 | 
					 | 
				
			||||||
	 * We need to hold space in order to delete our orphan item once we've
 | 
					 | 
				
			||||||
	 * added it, so this takes the reservation so we can release it later
 | 
					 | 
				
			||||||
	 * when we are truly done with the orphan item.
 | 
					 | 
				
			||||||
	 */
 | 
					 | 
				
			||||||
	u64 num_bytes = btrfs_calc_trans_metadata_size(fs_info, 1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	trace_btrfs_space_reservation(fs_info, "orphan", btrfs_ino(inode),
 | 
					 | 
				
			||||||
			num_bytes, 1);
 | 
					 | 
				
			||||||
	return btrfs_block_rsv_migrate(src_rsv, dst_rsv, num_bytes, 1);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
void btrfs_orphan_release_metadata(struct btrfs_inode *inode)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct btrfs_fs_info *fs_info = btrfs_sb(inode->vfs_inode.i_sb);
 | 
					 | 
				
			||||||
	struct btrfs_root *root = inode->root;
 | 
					 | 
				
			||||||
	u64 num_bytes = btrfs_calc_trans_metadata_size(fs_info, 1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	trace_btrfs_space_reservation(fs_info, "orphan", btrfs_ino(inode),
 | 
					 | 
				
			||||||
			num_bytes, 0);
 | 
					 | 
				
			||||||
	btrfs_block_rsv_release(fs_info, root->orphan_block_rsv, num_bytes);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * btrfs_subvolume_reserve_metadata() - reserve space for subvolume operation
 | 
					 * btrfs_subvolume_reserve_metadata() - reserve space for subvolume operation
 | 
				
			||||||
 * root: the root of the parent directory
 | 
					 * root: the root of the parent directory
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3297,42 +3297,6 @@ void btrfs_run_delayed_iputs(struct btrfs_fs_info *fs_info)
 | 
				
			||||||
	spin_unlock(&fs_info->delayed_iput_lock);
 | 
						spin_unlock(&fs_info->delayed_iput_lock);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * This is called in transaction commit time. If there are no orphan
 | 
					 | 
				
			||||||
 * files in the subvolume, it removes orphan item and frees block_rsv
 | 
					 | 
				
			||||||
 * structure.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
void btrfs_orphan_commit_root(struct btrfs_trans_handle *trans,
 | 
					 | 
				
			||||||
			      struct btrfs_root *root)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	struct btrfs_fs_info *fs_info = root->fs_info;
 | 
					 | 
				
			||||||
	struct btrfs_block_rsv *block_rsv;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (atomic_read(&root->orphan_inodes) ||
 | 
					 | 
				
			||||||
	    root->orphan_cleanup_state != ORPHAN_CLEANUP_DONE)
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	spin_lock(&root->orphan_lock);
 | 
					 | 
				
			||||||
	if (atomic_read(&root->orphan_inodes)) {
 | 
					 | 
				
			||||||
		spin_unlock(&root->orphan_lock);
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (root->orphan_cleanup_state != ORPHAN_CLEANUP_DONE) {
 | 
					 | 
				
			||||||
		spin_unlock(&root->orphan_lock);
 | 
					 | 
				
			||||||
		return;
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	block_rsv = root->orphan_block_rsv;
 | 
					 | 
				
			||||||
	root->orphan_block_rsv = NULL;
 | 
					 | 
				
			||||||
	spin_unlock(&root->orphan_lock);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (block_rsv) {
 | 
					 | 
				
			||||||
		WARN_ON(block_rsv->size > 0);
 | 
					 | 
				
			||||||
		btrfs_free_block_rsv(fs_info, block_rsv);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * This creates an orphan entry for the given inode in case something goes wrong
 | 
					 * This creates an orphan entry for the given inode in case something goes wrong
 | 
				
			||||||
 * in the middle of an unlink.
 | 
					 * in the middle of an unlink.
 | 
				
			||||||
| 
						 | 
					@ -3526,12 +3490,7 @@ int btrfs_orphan_cleanup(struct btrfs_root *root)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	root->orphan_cleanup_state = ORPHAN_CLEANUP_DONE;
 | 
						root->orphan_cleanup_state = ORPHAN_CLEANUP_DONE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (root->orphan_block_rsv)
 | 
						if (test_bit(BTRFS_ROOT_ORPHAN_ITEM_INSERTED, &root->state)) {
 | 
				
			||||||
		btrfs_block_rsv_release(fs_info, root->orphan_block_rsv,
 | 
					 | 
				
			||||||
					(u64)-1);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if (root->orphan_block_rsv ||
 | 
					 | 
				
			||||||
	    test_bit(BTRFS_ROOT_ORPHAN_ITEM_INSERTED, &root->state)) {
 | 
					 | 
				
			||||||
		trans = btrfs_join_transaction(root);
 | 
							trans = btrfs_join_transaction(root);
 | 
				
			||||||
		if (!IS_ERR(trans))
 | 
							if (!IS_ERR(trans))
 | 
				
			||||||
			btrfs_end_transaction(trans);
 | 
								btrfs_end_transaction(trans);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1245,7 +1245,6 @@ static noinline int commit_fs_roots(struct btrfs_trans_handle *trans)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			btrfs_free_log(trans, root);
 | 
								btrfs_free_log(trans, root);
 | 
				
			||||||
			btrfs_update_reloc_root(trans, root);
 | 
								btrfs_update_reloc_root(trans, root);
 | 
				
			||||||
			btrfs_orphan_commit_root(trans, root);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
			btrfs_save_ino_cache(root, trans);
 | 
								btrfs_save_ino_cache(root, trans);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue