forked from mirrors/linux
		
	btrfs: split alloc_log_tree()
This is a preparation patch for the next patch. Split alloc_log_tree() into two parts. The first one allocating the tree structure, remains in alloc_log_tree() and the second part allocating the tree node, which is moved into btrfs_alloc_log_tree_node(). Also export the latter part is to be used in the next patch. Reviewed-by: Josef Bacik <josef@toxicpanda.com> Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
		
							parent
							
								
									f7ef5287a6
								
							
						
					
					
						commit
						6ab6ebb760
					
				
					 2 changed files with 29 additions and 6 deletions
				
			
		| 
						 | 
					@ -1254,7 +1254,6 @@ static struct btrfs_root *alloc_log_tree(struct btrfs_trans_handle *trans,
 | 
				
			||||||
					 struct btrfs_fs_info *fs_info)
 | 
										 struct btrfs_fs_info *fs_info)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct btrfs_root *root;
 | 
						struct btrfs_root *root;
 | 
				
			||||||
	struct extent_buffer *leaf;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	root = btrfs_alloc_root(fs_info, BTRFS_TREE_LOG_OBJECTID, GFP_NOFS);
 | 
						root = btrfs_alloc_root(fs_info, BTRFS_TREE_LOG_OBJECTID, GFP_NOFS);
 | 
				
			||||||
	if (!root)
 | 
						if (!root)
 | 
				
			||||||
| 
						 | 
					@ -1264,6 +1263,14 @@ static struct btrfs_root *alloc_log_tree(struct btrfs_trans_handle *trans,
 | 
				
			||||||
	root->root_key.type = BTRFS_ROOT_ITEM_KEY;
 | 
						root->root_key.type = BTRFS_ROOT_ITEM_KEY;
 | 
				
			||||||
	root->root_key.offset = BTRFS_TREE_LOG_OBJECTID;
 | 
						root->root_key.offset = BTRFS_TREE_LOG_OBJECTID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return root;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int btrfs_alloc_log_tree_node(struct btrfs_trans_handle *trans,
 | 
				
			||||||
 | 
								      struct btrfs_root *root)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct extent_buffer *leaf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * DON'T set SHAREABLE bit for log trees.
 | 
						 * DON'T set SHAREABLE bit for log trees.
 | 
				
			||||||
	 *
 | 
						 *
 | 
				
			||||||
| 
						 | 
					@ -1276,26 +1283,33 @@ static struct btrfs_root *alloc_log_tree(struct btrfs_trans_handle *trans,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	leaf = btrfs_alloc_tree_block(trans, root, 0, BTRFS_TREE_LOG_OBJECTID,
 | 
						leaf = btrfs_alloc_tree_block(trans, root, 0, BTRFS_TREE_LOG_OBJECTID,
 | 
				
			||||||
			NULL, 0, 0, 0, BTRFS_NESTING_NORMAL);
 | 
								NULL, 0, 0, 0, BTRFS_NESTING_NORMAL);
 | 
				
			||||||
	if (IS_ERR(leaf)) {
 | 
						if (IS_ERR(leaf))
 | 
				
			||||||
		btrfs_put_root(root);
 | 
							return PTR_ERR(leaf);
 | 
				
			||||||
		return ERR_CAST(leaf);
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	root->node = leaf;
 | 
						root->node = leaf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	btrfs_mark_buffer_dirty(root->node);
 | 
						btrfs_mark_buffer_dirty(root->node);
 | 
				
			||||||
	btrfs_tree_unlock(root->node);
 | 
						btrfs_tree_unlock(root->node);
 | 
				
			||||||
	return root;
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int btrfs_init_log_root_tree(struct btrfs_trans_handle *trans,
 | 
					int btrfs_init_log_root_tree(struct btrfs_trans_handle *trans,
 | 
				
			||||||
			     struct btrfs_fs_info *fs_info)
 | 
								     struct btrfs_fs_info *fs_info)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct btrfs_root *log_root;
 | 
						struct btrfs_root *log_root;
 | 
				
			||||||
 | 
						int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	log_root = alloc_log_tree(trans, fs_info);
 | 
						log_root = alloc_log_tree(trans, fs_info);
 | 
				
			||||||
	if (IS_ERR(log_root))
 | 
						if (IS_ERR(log_root))
 | 
				
			||||||
		return PTR_ERR(log_root);
 | 
							return PTR_ERR(log_root);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ret = btrfs_alloc_log_tree_node(trans, log_root);
 | 
				
			||||||
 | 
						if (ret) {
 | 
				
			||||||
 | 
							btrfs_put_root(log_root);
 | 
				
			||||||
 | 
							return ret;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	WARN_ON(fs_info->log_root_tree);
 | 
						WARN_ON(fs_info->log_root_tree);
 | 
				
			||||||
	fs_info->log_root_tree = log_root;
 | 
						fs_info->log_root_tree = log_root;
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
| 
						 | 
					@ -1307,11 +1321,18 @@ int btrfs_add_log_tree(struct btrfs_trans_handle *trans,
 | 
				
			||||||
	struct btrfs_fs_info *fs_info = root->fs_info;
 | 
						struct btrfs_fs_info *fs_info = root->fs_info;
 | 
				
			||||||
	struct btrfs_root *log_root;
 | 
						struct btrfs_root *log_root;
 | 
				
			||||||
	struct btrfs_inode_item *inode_item;
 | 
						struct btrfs_inode_item *inode_item;
 | 
				
			||||||
 | 
						int ret;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	log_root = alloc_log_tree(trans, fs_info);
 | 
						log_root = alloc_log_tree(trans, fs_info);
 | 
				
			||||||
	if (IS_ERR(log_root))
 | 
						if (IS_ERR(log_root))
 | 
				
			||||||
		return PTR_ERR(log_root);
 | 
							return PTR_ERR(log_root);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ret = btrfs_alloc_log_tree_node(trans, log_root);
 | 
				
			||||||
 | 
						if (ret) {
 | 
				
			||||||
 | 
							btrfs_put_root(log_root);
 | 
				
			||||||
 | 
							return ret;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	log_root->last_trans = trans->transid;
 | 
						log_root->last_trans = trans->transid;
 | 
				
			||||||
	log_root->root_key.offset = root->root_key.objectid;
 | 
						log_root->root_key.offset = root->root_key.objectid;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -120,6 +120,8 @@ blk_status_t btrfs_wq_submit_bio(struct inode *inode, struct bio *bio,
 | 
				
			||||||
				 extent_submit_bio_start_t *submit_bio_start);
 | 
									 extent_submit_bio_start_t *submit_bio_start);
 | 
				
			||||||
blk_status_t btrfs_submit_bio_done(void *private_data, struct bio *bio,
 | 
					blk_status_t btrfs_submit_bio_done(void *private_data, struct bio *bio,
 | 
				
			||||||
			  int mirror_num);
 | 
								  int mirror_num);
 | 
				
			||||||
 | 
					int btrfs_alloc_log_tree_node(struct btrfs_trans_handle *trans,
 | 
				
			||||||
 | 
								      struct btrfs_root *root);
 | 
				
			||||||
int btrfs_init_log_root_tree(struct btrfs_trans_handle *trans,
 | 
					int btrfs_init_log_root_tree(struct btrfs_trans_handle *trans,
 | 
				
			||||||
			     struct btrfs_fs_info *fs_info);
 | 
								     struct btrfs_fs_info *fs_info);
 | 
				
			||||||
int btrfs_add_log_tree(struct btrfs_trans_handle *trans,
 | 
					int btrfs_add_log_tree(struct btrfs_trans_handle *trans,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue