powerpc/pseries/dlpar: Eliminate use after free
[safe/jmp/linux-2.6] / block / blk-merge.c
index 7c9ca01..5e7dc99 100644 (file)
@@ -206,8 +206,7 @@ static inline int ll_new_hw_segment(struct request_queue *q,
 {
        int nr_phys_segs = bio_phys_segments(q, bio);
 
-       if (req->nr_phys_segments + nr_phys_segs > queue_max_hw_segments(q) ||
-           req->nr_phys_segments + nr_phys_segs > queue_max_phys_segments(q)) {
+       if (req->nr_phys_segments + nr_phys_segs > queue_max_segments(q)) {
                req->cmd_flags |= REQ_NOMERGE;
                if (req == q->last_merge)
                        q->last_merge = NULL;
@@ -300,10 +299,7 @@ static int ll_merge_requests_fn(struct request_queue *q, struct request *req,
                total_phys_segments--;
        }
 
-       if (total_phys_segments > queue_max_phys_segments(q))
-               return 0;
-
-       if (total_phys_segments > queue_max_hw_segments(q))
+       if (total_phys_segments > queue_max_segments(q))
                return 0;
 
        /* Merge is OK... */
@@ -351,7 +347,7 @@ static void blk_account_io_merge(struct request *req)
                part = disk_map_sector_rcu(req->rq_disk, blk_rq_pos(req));
 
                part_round_stats(cpu, part);
-               part_dec_in_flight(part);
+               part_dec_in_flight(part, rq_data_dir(req));
 
                part_stat_unlock();
        }
@@ -380,12 +376,6 @@ static int attempt_merge(struct request_queue *q, struct request *req,
        if (blk_integrity_rq(req) != blk_integrity_rq(next))
                return 0;
 
-       /* don't merge requests of different failfast settings */
-       if (blk_failfast_dev(req)       != blk_failfast_dev(next)       ||
-           blk_failfast_transport(req) != blk_failfast_transport(next) ||
-           blk_failfast_driver(req)    != blk_failfast_driver(next))
-               return 0;
-
        /*
         * If we are allowed to merge, then append bio list
         * from next to rq and release next. merge_requests_fn