diff options
Diffstat (limited to 'fs/btrfs/extent_io.c')
| -rw-r--r-- | fs/btrfs/extent_io.c | 8 | 
1 files changed, 8 insertions, 0 deletions
| diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 3258b6f01e85..9234d96a7fd5 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -6611,6 +6611,14 @@ int read_extent_buffer_pages(struct extent_buffer *eb, int wait, int mirror_num)  	if (test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags))  		return 0; +	/* +	 * We could have had EXTENT_BUFFER_UPTODATE cleared by the write +	 * operation, which could potentially still be in flight.  In this case +	 * we simply want to return an error. +	 */ +	if (unlikely(test_bit(EXTENT_BUFFER_WRITE_ERR, &eb->bflags))) +		return -EIO; +  	if (eb->fs_info->sectorsize < PAGE_SIZE)  		return read_extent_buffer_subpage(eb, wait, mirror_num); |