mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	btrfs: do not BUG_ON() on tree mod log failure at insert_new_root()
At insert_new_root(), instead of doing a BUG_ON() in case we fail to record the tree mod log operation, just return the error to the callers after releasing the allocated tree block. At this point we haven't made any changes to the b+tree, so we haven't left it in an inconsistent state and therefore have no need to abort the transaction. All we need to do is to unlock and free the extent buffer we just allocated with the purpose of making it the new root. Reviewed-by: Qu Wenruo <wqu@suse.com> Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
		
							parent
							
								
									11d6ae0355
								
							
						
					
					
						commit
						f61aa7ba08
					
				
					 1 changed files with 6 additions and 1 deletions
				
			
		| 
						 | 
					@ -2964,7 +2964,12 @@ static noinline int insert_new_root(struct btrfs_trans_handle *trans,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	old = root->node;
 | 
						old = root->node;
 | 
				
			||||||
	ret = btrfs_tree_mod_log_insert_root(root->node, c, false);
 | 
						ret = btrfs_tree_mod_log_insert_root(root->node, c, false);
 | 
				
			||||||
	BUG_ON(ret < 0);
 | 
						if (ret < 0) {
 | 
				
			||||||
 | 
							btrfs_free_tree_block(trans, btrfs_root_id(root), c, 0, 1);
 | 
				
			||||||
 | 
							btrfs_tree_unlock(c);
 | 
				
			||||||
 | 
							free_extent_buffer(c);
 | 
				
			||||||
 | 
							return ret;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	rcu_assign_pointer(root->node, c);
 | 
						rcu_assign_pointer(root->node, c);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* the super has an extra ref to root->node */
 | 
						/* the super has an extra ref to root->node */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue