Btrfs: don't drop path when printing out tree errors in scrub
A user reported a panic where we were panicing somewhere in tree_backref_for_extent from scrub_print_warning. He only captured the trace but looking at scrub_print_warning we drop the path right before we mess with the extent buffer to print out a bunch of stuff, which isn't right. So fix this by dropping the path after we use the eb if we need to. Thanks, Cc: stable@vger.kernel.org Signed-off-by: Josef Bacik <jbacik@fusionio.com> Signed-off-by: Chris Mason <chris.mason@fusionio.com>
This commit is contained in:
		
							parent
							
								
									82d130ff39
								
							
						
					
					
						commit
						d8fe29e9de
					
				| @ -542,7 +542,6 @@ static void scrub_print_warning(const char *errstr, struct scrub_block *sblock) | ||||
| 	eb = path->nodes[0]; | ||||
| 	ei = btrfs_item_ptr(eb, path->slots[0], struct btrfs_extent_item); | ||||
| 	item_size = btrfs_item_size_nr(eb, path->slots[0]); | ||||
| 	btrfs_release_path(path); | ||||
| 
 | ||||
| 	if (flags & BTRFS_EXTENT_FLAG_TREE_BLOCK) { | ||||
| 		do { | ||||
| @ -558,7 +557,9 @@ static void scrub_print_warning(const char *errstr, struct scrub_block *sblock) | ||||
| 				ret < 0 ? -1 : ref_level, | ||||
| 				ret < 0 ? -1 : ref_root); | ||||
| 		} while (ret != 1); | ||||
| 		btrfs_release_path(path); | ||||
| 	} else { | ||||
| 		btrfs_release_path(path); | ||||
| 		swarn.path = path; | ||||
| 		swarn.dev = dev; | ||||
| 		iterate_extent_inodes(fs_info, found_key.objectid, | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user