]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - block/blk-core.c
[SCSI] fix crash in scsi_dispatch_cmd()
[karo-tx-linux.git] / block / blk-core.c
index c8303e9d919da239ec5f04a43e11dbe1ceeef111..1d49e1c7c905cd1dadd8daf286205cee24e055b9 100644 (file)
@@ -345,6 +345,7 @@ void blk_put_queue(struct request_queue *q)
 {
        kobject_put(&q->kobj);
 }
+EXPORT_SYMBOL(blk_put_queue);
 
 /*
  * Note: If a driver supplied the queue lock, it should not zap that lock
@@ -566,6 +567,7 @@ int blk_get_queue(struct request_queue *q)
 
        return 1;
 }
+EXPORT_SYMBOL(blk_get_queue);
 
 static inline void blk_free_request(struct request_queue *q, struct request *rq)
 {
@@ -837,6 +839,9 @@ struct request *blk_get_request(struct request_queue *q, int rw, gfp_t gfp_mask)
 {
        struct request *rq;
 
+       if (unlikely(test_bit(QUEUE_FLAG_DEAD, &q->queue_flags)))
+               return NULL;
+
        BUG_ON(rw != READ && rw != WRITE);
 
        spin_lock_irq(q->queue_lock);
@@ -1130,7 +1135,6 @@ static bool bio_attempt_front_merge(struct request_queue *q,
                                    struct request *req, struct bio *bio)
 {
        const int ff = bio->bi_rw & REQ_FAILFAST_MASK;
-       sector_t sector;
 
        if (!ll_front_merge_fn(q, req, bio))
                return false;
@@ -1140,8 +1144,6 @@ static bool bio_attempt_front_merge(struct request_queue *q,
        if ((req->cmd_flags & REQ_FAILFAST_MASK) != ff)
                blk_rq_set_mixed_merge(req);
 
-       sector = bio->bi_sector;
-
        bio->bi_next = req->bio;
        req->bio = bio;