diff options
Diffstat (limited to 'fs/btrfs/reada.c')
| -rw-r--r-- | fs/btrfs/reada.c | 22 | 
1 files changed, 14 insertions, 8 deletions
diff --git a/fs/btrfs/reada.c b/fs/btrfs/reada.c index 1031b69252c..09230cf3a24 100644 --- a/fs/btrfs/reada.c +++ b/fs/btrfs/reada.c @@ -189,8 +189,8 @@ static int __readahead_hook(struct btrfs_root *root, struct extent_buffer *eb,  			 */  #ifdef DEBUG  			if (rec->generation != generation) { -				printk(KERN_DEBUG "generation mismatch for " -						"(%llu,%d,%llu) %llu != %llu\n", +				btrfs_debug(root->fs_info, +					   "generation mismatch for (%llu,%d,%llu) %llu != %llu",  				       key.objectid, key.type, key.offset,  				       rec->generation, generation);  			} @@ -365,8 +365,9 @@ static struct reada_extent *reada_find_extent(struct btrfs_root *root,  		goto error;  	if (bbio->num_stripes > BTRFS_MAX_MIRRORS) { -		printk(KERN_ERR "btrfs readahead: more than %d copies not " -				"supported", BTRFS_MAX_MIRRORS); +		btrfs_err(root->fs_info, +			   "readahead: more than %d copies not supported", +			   BTRFS_MAX_MIRRORS);  		goto error;  	} @@ -427,8 +428,13 @@ static struct reada_extent *reada_find_extent(struct btrfs_root *root,  			continue;  		}  		if (!dev->bdev) { -			/* cannot read ahead on missing device */ -			continue; +			/* +			 * cannot read ahead on missing device, but for RAID5/6, +			 * REQ_GET_READ_MIRRORS return 1. So don't skip missing +			 * device for such case. +			 */ +			if (nzones > 1) +				continue;  		}  		if (dev_replace_is_ongoing &&  		    dev == fs_info->dev_replace.tgtdev) { @@ -792,10 +798,10 @@ static void reada_start_machine(struct btrfs_fs_info *fs_info)  		/* FIXME we cannot handle this properly right now */  		BUG();  	} -	rmw->work.func = reada_start_machine_worker; +	btrfs_init_work(&rmw->work, reada_start_machine_worker, NULL, NULL);  	rmw->fs_info = fs_info; -	btrfs_queue_worker(&fs_info->readahead_workers, &rmw->work); +	btrfs_queue_work(fs_info->readahead_workers, &rmw->work);  }  #ifdef DEBUG  | 
