lkml.org 
[lkml]   [2007]   [Jul]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Date
Subject[PATCH 016 of 35] Centralise setting for REQ_NOMERGE.

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 <neilb@suse.de>

### 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 majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
\
 
 \ /
  Last update: 2007-07-31 04:25    [W:0.187 / U:62.376 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site