From 4b9f2f00adbc903b59a6cb8673821a2bc86f98a5 Mon Sep 17 00:00:00 2001 From: Joe Lawrence Date: Tue, 5 Mar 2013 10:57:56 -0500 Subject: [PATCH] --- yaml --- r: 362479 b: refs/heads/master c: 2b5bebccd282f2527d17ac90cf3ad0d486dd89d8 h: refs/heads/master i: 362477: fab0c81a589422eeed3ef3470902441a0d3167ab 362475: 04c4e23ceb25f521865dc2bcaa02eeb91a0690fb 362471: 6a609d7b9040dcbd5dcdcb034750f570ba030b11 362463: f8a4c0ede5cba918a06750c71c7d9c6bb1c58cc1 v: v3 --- [refs] | 2 +- trunk/drivers/scsi/st.c | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index ca64bc3703c3..096c302cabee 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 95c9f4d4da6c4e445a9dd58c8382356520ea91a0 +refs/heads/master: 2b5bebccd282f2527d17ac90cf3ad0d486dd89d8 diff --git a/trunk/drivers/scsi/st.c b/trunk/drivers/scsi/st.c index 86974471af68..2a32036a9404 100644 --- a/trunk/drivers/scsi/st.c +++ b/trunk/drivers/scsi/st.c @@ -4112,6 +4112,10 @@ static int st_probe(struct device *dev) tpnt->disk = disk; disk->private_data = &tpnt->driver; disk->queue = SDp->request_queue; + /* SCSI tape doesn't register this gendisk via add_disk(). Manually + * take queue reference that release_disk() expects. */ + if (!blk_get_queue(disk->queue)) + goto out_put_disk; tpnt->driver = &st_template; tpnt->device = SDp; @@ -4185,7 +4189,7 @@ static int st_probe(struct device *dev) idr_preload_end(); if (error < 0) { pr_warn("st: idr allocation failed: %d\n", error); - goto out_put_disk; + goto out_put_queue; } tpnt->index = error; sprintf(disk->disk_name, "st%d", tpnt->index); @@ -4211,6 +4215,8 @@ static int st_probe(struct device *dev) spin_lock(&st_index_lock); idr_remove(&st_index_idr, tpnt->index); spin_unlock(&st_index_lock); +out_put_queue: + blk_put_queue(disk->queue); out_put_disk: put_disk(disk); kfree(tpnt);