mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	Btrfs: don't call readahead hook until we have read the entire eb
Martin Steigerwald reported a BUG_ON() where we were given a bogus bytenr to map. Turns out he is using > PAGESIZE leafsizes. The readahead stuff is called every time we do a completion, but we may not have finished reading in all the pages, so the bytenr we read off the node could be completely bogus. Fix this by only calling the readahead hook once all pages have been read in. Thanks, Reported-by: Martin Steigerwald <Martin@lichtvoll.de> Signed-off-by: Josef Bacik <jbacik@fusionio.com>
This commit is contained in:
		
							parent
							
								
									9bb91873e3
								
							
						
					
					
						commit
						79fb65a1f6
					
				
					 1 changed files with 2 additions and 3 deletions
				
			
		|  | @ -636,10 +636,9 @@ static int btree_readpage_end_io_hook(struct page *page, u64 start, u64 end, | |||
| 	if (!ret) | ||||
| 		set_extent_buffer_uptodate(eb); | ||||
| err: | ||||
| 	if (test_bit(EXTENT_BUFFER_READAHEAD, &eb->bflags)) { | ||||
| 		clear_bit(EXTENT_BUFFER_READAHEAD, &eb->bflags); | ||||
| 	if (reads_done && | ||||
| 	    test_and_clear_bit(EXTENT_BUFFER_READAHEAD, &eb->bflags)) | ||||
| 		btree_readahead_hook(root, eb, eb->start, ret); | ||||
| 	} | ||||
| 
 | ||||
| 	if (ret) { | ||||
| 		/*
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Josef Bacik
						Josef Bacik