[PATCH 016 of 35] Centralise setting for REQ_NOMERGE.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Every error return from ll_{front,back}_merge_fn sets
REQ_NOMERGE.  So move this to after the call to these functions.
This is only a small saving here, but will help a future patch.

Signed-off-by: Neil Brown <[email protected]>

### Diffstat output
 ./block/ll_rw_blk.c |   43 +++++++++++++++++++------------------------
 1 file changed, 19 insertions(+), 24 deletions(-)

diff .prev/block/ll_rw_blk.c ./block/ll_rw_blk.c
--- .prev/block/ll_rw_blk.c	2007-07-31 11:21:00.000000000 +1000
+++ ./block/ll_rw_blk.c	2007-07-31 11:21:01.000000000 +1000
@@ -1373,12 +1373,8 @@ static inline int ll_new_mergeable(struc
 {
 
 	if (req->nr_phys_segments + nreq->nr_phys_segments
-	    > q->max_phys_segments) {
-		req->cmd_flags |= REQ_NOMERGE;
-		if (req == q->last_merge)
-			q->last_merge = NULL;
+	    > q->max_phys_segments)
 		return 0;
-	}
 
 	/*
 	 * A hw segment is just getting larger, bump just the phys
@@ -1395,12 +1391,8 @@ static inline int ll_new_hw_segment(stru
 
 	if (req->nr_hw_segments + nreq->nr_hw_segments > q->max_hw_segments
 	    || (req->nr_phys_segments + nreq->nr_phys_segments
-		> q->max_phys_segments)) {
-		req->cmd_flags |= REQ_NOMERGE;
-		if (req == q->last_merge)
-			q->last_merge = NULL;
+		> q->max_phys_segments))
 		return 0;
-	}
 
 	/*
 	 * This will form the start of a new hw segment.  Bump both
@@ -1422,12 +1414,9 @@ static int ll_back_merge_fn(struct reque
 	else
 		max_sectors = q->max_sectors;
 
-	if (req->nr_sectors + nreq->nr_sectors > max_sectors) {
-		req->cmd_flags |= REQ_NOMERGE;
-		if (req == q->last_merge)
-			q->last_merge = NULL;
+	if (req->nr_sectors + nreq->nr_sectors > max_sectors)
 		return 0;
-	}
+
 	len = req->hw_back_size + nreq->hw_front_size;
 	if (nreq->first_offset == 0 &&
 	    BIOVEC_VIRT_MERGEABLE(__BVEC_END(req->biotail),
@@ -1459,12 +1448,9 @@ static int ll_front_merge_fn(struct requ
 		max_sectors = q->max_sectors;
 
 
-	if (req->nr_sectors + nreq->nr_sectors > max_sectors) {
-		req->cmd_flags |= REQ_NOMERGE;
-		if (req == q->last_merge)
-			q->last_merge = NULL;
+	if (req->nr_sectors + nreq->nr_sectors > max_sectors)
 		return 0;
-	}
+
 	len = nreq->hw_back_size + req->hw_front_size;
 
 	if (BIOVEC_VIRT_MERGEABLE(__BVEC_END(nreq->biotail),
@@ -2347,9 +2333,10 @@ int blk_rq_append_bio(struct request_que
 
 	if (!rq->bio)
 		blk_rq_bio_prep(q, rq, bio);
-	else if (!ll_back_merge_fn(q, rq, &nreq))
+	else if (!ll_back_merge_fn(q, rq, &nreq)) {
+		rq->cmd_flags |= REQ_NOMERGE;
 		return -EINVAL;
-	else {
+	} else {
 		rq->biotail->bi_next = bio;
 		rq->biotail = bio;
 		rq->hw_back_size = nreq.hw_back_size;
@@ -2959,8 +2946,12 @@ static int __make_request(struct request
 		case ELEVATOR_BACK_MERGE:
 			BUG_ON(!rq_mergeable(req));
 
-			if (!ll_back_merge_fn(q, req, &nreq))
+			if (!ll_back_merge_fn(q, req, &nreq)) {
+				req->cmd_flags |= REQ_NOMERGE;
+				if (req == q->last_merge)
+					q->last_merge = NULL;
 				break;
+			}
 
 			blk_add_trace_bio(q, bio, BLK_TA_BACKMERGE);
 
@@ -2977,8 +2968,12 @@ static int __make_request(struct request
 		case ELEVATOR_FRONT_MERGE:
 			BUG_ON(!rq_mergeable(req));
 
-			if (!ll_front_merge_fn(q, req, &nreq))
+			if (!ll_front_merge_fn(q, req, &nreq)) {
+				req->cmd_flags |= REQ_NOMERGE;
+				if (req == q->last_merge)
+					q->last_merge = NULL;
 				break;
+			}
 
 			blk_add_trace_bio(q, bio, BLK_TA_FRONTMERGE);
 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux