diff options
Diffstat (limited to 'drivers/md/dm-raid1.c')
| -rw-r--r-- | drivers/md/dm-raid1.c | 11 | 
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c index d039de8322f0..bc5ddba8045b 100644 --- a/drivers/md/dm-raid1.c +++ b/drivers/md/dm-raid1.c @@ -1081,9 +1081,14 @@ static int mirror_ctr(struct dm_target *ti, unsigned int argc, char **argv)  	}  	ti->private = ms; -	ti->split_io = dm_rh_get_region_size(ms->rh); + +	r = dm_set_target_max_io_len(ti, dm_rh_get_region_size(ms->rh)); +	if (r) +		goto err_free_context; +  	ti->num_flush_requests = 1;  	ti->num_discard_requests = 1; +	ti->discard_zeroes_data_unsupported = true;  	ms->kmirrord_wq = alloc_workqueue("kmirrord",  					  WQ_NON_REENTRANT | WQ_MEM_RECLAIM, 0); @@ -1214,7 +1219,7 @@ static int mirror_end_io(struct dm_target *ti, struct bio *bio,  	 * We need to dec pending if this was a write.  	 */  	if (rw == WRITE) { -		if (!(bio->bi_rw & REQ_FLUSH)) +		if (!(bio->bi_rw & (REQ_FLUSH | REQ_DISCARD)))  			dm_rh_dec(ms->rh, map_context->ll);  		return error;  	} @@ -1362,7 +1367,7 @@ static char device_status_char(struct mirror *m)  static int mirror_status(struct dm_target *ti, status_type_t type, -			 char *result, unsigned int maxlen) +			 unsigned status_flags, char *result, unsigned maxlen)  {  	unsigned int m, sz = 0;  	struct mirror_set *ms = (struct mirror_set *) ti->private;  | 
