aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Jones <davej@redhat.com>2014-03-20 17:03:58 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-03-21 01:32:06 -0400
commit708f04d2abf4e90abee61d9ffb1f165038017ecf (patch)
treec9a25407c8011c821da54ea51a4965c0e2a4f44d
parent11d4616bd07f38d496bd489ed8fad1dc4d928823 (diff)
block: free q->flush_rq in blk_init_allocated_queue error paths
Commit 7982e90c3a57 ("block: fix q->flush_rq NULL pointer crash on dm-mpath flush") moved an allocation to blk_init_allocated_queue(), but neglected to free that allocation on the error paths that follow. Signed-off-by: Dave Jones <davej@fedoraproject.org> Acked-by: Mike Snitzer <snitzer@redhat.com> Signed-off-by: Jens Axboe <axboe@fb.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--block/blk-core.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/block/blk-core.c b/block/blk-core.c
index 4cd5ffc18442..bfe16d5af9f9 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -713,7 +713,7 @@ blk_init_allocated_queue(struct request_queue *q, request_fn_proc *rfn,
713 return NULL; 713 return NULL;
714 714
715 if (blk_init_rl(&q->root_rl, q, GFP_KERNEL)) 715 if (blk_init_rl(&q->root_rl, q, GFP_KERNEL))
716 return NULL; 716 goto fail;
717 717
718 q->request_fn = rfn; 718 q->request_fn = rfn;
719 q->prep_rq_fn = NULL; 719 q->prep_rq_fn = NULL;
@@ -737,12 +737,16 @@ blk_init_allocated_queue(struct request_queue *q, request_fn_proc *rfn,
737 /* init elevator */ 737 /* init elevator */
738 if (elevator_init(q, NULL)) { 738 if (elevator_init(q, NULL)) {
739 mutex_unlock(&q->sysfs_lock); 739 mutex_unlock(&q->sysfs_lock);
740 return NULL; 740 goto fail;
741 } 741 }
742 742
743 mutex_unlock(&q->sysfs_lock); 743 mutex_unlock(&q->sysfs_lock);
744 744
745 return q; 745 return q;
746
747fail:
748 kfree(q->flush_rq);
749 return NULL;
746} 750}
747EXPORT_SYMBOL(blk_init_allocated_queue); 751EXPORT_SYMBOL(blk_init_allocated_queue);
748 752