瀏覽代碼

block: only honor SG gap prevention for merges that contain data

We can safely merge anything that wont generate an SG list entry,
so if the bio is data-less (discard), don't look at potential
SG gaps.

Signed-off-by: Jens Axboe <axboe@fb.com>
Jens Axboe 10 年之前
父節點
當前提交
beefa6ba7b
共有 1 個文件被更改,包括 2 次插入1 次删除
  1. 2 1
      block/blk-merge.c

+ 2 - 1
block/blk-merge.c

@@ -589,7 +589,8 @@ bool blk_rq_merge_ok(struct request *rq, struct bio *bio)
 	    !blk_write_same_mergeable(rq->bio, bio))
 	    !blk_write_same_mergeable(rq->bio, bio))
 		return false;
 		return false;
 
 
-	if (q->queue_flags & (1 << QUEUE_FLAG_SG_GAPS)) {
+	/* Only check gaps if the bio carries data */
+	if (q->queue_flags & (1 << QUEUE_FLAG_SG_GAPS) && bio_has_data(bio)) {
 		struct bio_vec *bprev;
 		struct bio_vec *bprev;
 
 
 		bprev = &rq->biotail->bi_io_vec[rq->biotail->bi_vcnt - 1];
 		bprev = &rq->biotail->bi_io_vec[rq->biotail->bi_vcnt - 1];