diff options
| -rw-r--r-- | drivers/md/raid1.c | 7 | ||||
| -rw-r--r-- | drivers/md/raid10.c | 7 | 
2 files changed, 12 insertions, 2 deletions
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index c055b92d7eb..851023e2ba5 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -981,7 +981,12 @@ static void raid1_unplug(struct blk_plug_cb *cb, bool from_schedule)  	while (bio) { /* submit pending writes */  		struct bio *next = bio->bi_next;  		bio->bi_next = NULL; -		generic_make_request(bio); +		if (unlikely((bio->bi_rw & REQ_DISCARD) && +		    !blk_queue_discard(bdev_get_queue(bio->bi_bdev)))) +			/* Just ignore it */ +			bio_endio(bio, 0); +		else +			generic_make_request(bio);  		bio = next;  	}  	kfree(plug); diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index c35d912a7f9..018741ba931 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c @@ -1133,7 +1133,12 @@ static void raid10_unplug(struct blk_plug_cb *cb, bool from_schedule)  	while (bio) { /* submit pending writes */  		struct bio *next = bio->bi_next;  		bio->bi_next = NULL; -		generic_make_request(bio); +		if (unlikely((bio->bi_rw & REQ_DISCARD) && +		    !blk_queue_discard(bdev_get_queue(bio->bi_bdev)))) +			/* Just ignore it */ +			bio_endio(bio, 0); +		else +			generic_make_request(bio);  		bio = next;  	}  	kfree(plug);  |