diff options
author | Shaohua Li <shli@kernel.org> | 2013-04-28 18:26:38 +0800 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2013-04-30 14:49:36 +1000 |
commit | 32f9f570d04461a41bdcd5c1d93b41ebc5ce182a (patch) | |
tree | 82fe7220a3d3ea346ad372f2c14bc590cf7ccb82 /drivers/md/raid10.c | |
parent | 486adf72ccc0c235754923d47a2270c5dcb0c98b (diff) | |
download | op-kernel-dev-32f9f570d04461a41bdcd5c1d93b41ebc5ce182a.zip op-kernel-dev-32f9f570d04461a41bdcd5c1d93b41ebc5ce182a.tar.gz |
MD: ignore discard request for hard disks of hybid raid1/raid10 array
In SSD/hard disk hybid storage, discard request should be ignored for hard
disk. We used to be doing this way, but the unplug path forgets it.
This is suitable for stable tree since v3.6.
Cc: stable@vger.kernel.org
Reported-and-tested-by: Markus <M4rkusXXL@web.de>
Signed-off-by: Shaohua Li <shli@fusionio.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md/raid10.c')
-rw-r--r-- | drivers/md/raid10.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index c35d912..018741b 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); |