blk-merge.c (8fe0d473f5477e9916d3ac581a226acfe83142be) blk-merge.c (288dab8a35a0bde426a09870943c8d3ee3a50dab)
1/*
2 * Functions related to segment and merge handling
3 */
4#include <linux/kernel.h>
5#include <linux/module.h>
6#include <linux/bio.h>
7#include <linux/blkdev.h>
8#include <linux/scatterlist.h>

--- 635 unchanged lines hidden (view full) ---

644 * Has to be called with the request spinlock acquired
645 */
646static int attempt_merge(struct request_queue *q, struct request *req,
647 struct request *next)
648{
649 if (!rq_mergeable(req) || !rq_mergeable(next))
650 return 0;
651
1/*
2 * Functions related to segment and merge handling
3 */
4#include <linux/kernel.h>
5#include <linux/module.h>
6#include <linux/bio.h>
7#include <linux/blkdev.h>
8#include <linux/scatterlist.h>

--- 635 unchanged lines hidden (view full) ---

644 * Has to be called with the request spinlock acquired
645 */
646static int attempt_merge(struct request_queue *q, struct request *req,
647 struct request *next)
648{
649 if (!rq_mergeable(req) || !rq_mergeable(next))
650 return 0;
651
652 if (!blk_check_merge_flags(req->cmd_flags, req_op(req), next->cmd_flags,
653 req_op(next)))
652 if (req_op(req) != req_op(next))
654 return 0;
655
656 /*
657 * not contiguous
658 */
659 if (blk_rq_pos(req) + blk_rq_sectors(req) != blk_rq_pos(next))
660 return 0;
661

--- 85 unchanged lines hidden (view full) ---

747 return attempt_merge(q, rq, next);
748}
749
750bool blk_rq_merge_ok(struct request *rq, struct bio *bio)
751{
752 if (!rq_mergeable(rq) || !bio_mergeable(bio))
753 return false;
754
653 return 0;
654
655 /*
656 * not contiguous
657 */
658 if (blk_rq_pos(req) + blk_rq_sectors(req) != blk_rq_pos(next))
659 return 0;
660

--- 85 unchanged lines hidden (view full) ---

746 return attempt_merge(q, rq, next);
747}
748
749bool blk_rq_merge_ok(struct request *rq, struct bio *bio)
750{
751 if (!rq_mergeable(rq) || !bio_mergeable(bio))
752 return false;
753
755 if (!blk_check_merge_flags(rq->cmd_flags, req_op(rq), bio->bi_rw,
756 bio_op(bio)))
754 if (req_op(rq) != bio_op(bio))
757 return false;
758
759 /* different data direction or already started, don't merge */
760 if (bio_data_dir(bio) != rq_data_dir(rq))
761 return false;
762
763 /* must be same device and not a special request */
764 if (rq->rq_disk != bio->bi_bdev->bd_disk || req_no_special_merge(rq))

--- 22 unchanged lines hidden ---
755 return false;
756
757 /* different data direction or already started, don't merge */
758 if (bio_data_dir(bio) != rq_data_dir(rq))
759 return false;
760
761 /* must be same device and not a special request */
762 if (rq->rq_disk != bio->bi_bdev->bd_disk || req_no_special_merge(rq))

--- 22 unchanged lines hidden ---