[dm-devel] [PATCH 10/12] block: update request stacking methods to support discards
Mike Snitzer
snitzer at redhat.com
Fri Jul 23 23:24:01 UTC 2010
Propagate REQ_DISCARD in cmd_flags when cloning a discard request.
Skip blk_rq_check_limits's existing checks for discard requests because
discard limits will have already been checked in blkdev_issue_discard.
Signed-off-by: Mike Snitzer <snitzer at redhat.com>
Cc: Jens Axboe <jaxboe at fusionio.com>
Cc: Christoph Hellwig <hch at lst.de>
Cc: Kiyoshi Ueda <k-ueda at ct.jp.nec.com>
---
block/blk-core.c | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/block/blk-core.c b/block/blk-core.c
index 9922a9b..292fc58 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -1655,6 +1655,9 @@ EXPORT_SYMBOL(submit_bio);
*/
int blk_rq_check_limits(struct request_queue *q, struct request *rq)
{
+ if (blk_discard_rq(rq))
+ return 0;
+
if (blk_rq_sectors(rq) > queue_max_sectors(q) ||
blk_rq_bytes(rq) > queue_max_hw_sectors(q) << 9) {
printk(KERN_ERR "%s: over max size limit.\n", __func__);
@@ -2499,6 +2502,8 @@ static void __blk_rq_prep_clone(struct request *dst, struct request *src)
{
dst->cpu = src->cpu;
dst->cmd_flags = (rq_data_dir(src) | REQ_NOMERGE);
+ if (blk_discard_rq(src))
+ dst->cmd_flags |= REQ_DISCARD;
dst->cmd_type = src->cmd_type;
dst->__sector = blk_rq_pos(src);
dst->__data_len = blk_rq_bytes(src);
--
1.6.6.1
More information about the dm-devel
mailing list