aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormikem <mikem@beardog.cca.cpqcorp.net>2005-11-18 16:05:36 -0500
committerJens Axboe <axboe@suse.de>2005-11-18 16:05:36 -0500
commit6f5a0f7c955d3567f800fa36f978758cb5b99aa2 (patch)
treeae4c3e9c46c8c02bbcf97c40f6e2e09865327569
parent15534d3803993345d8db32246ec329d8f83502e1 (diff)
[PATCH 3/3] cciss: add put_disk into cleanup routines
Jeff Garzik pointed me to his code to see how to remove a disk from the system _properly_. Well, here it is... Every place we remove disks we are now testing before calling del_gendisk or blk_cleanup_queue and then call put_disk. Signed-off-by: Mike Miller <mike.miller@hp.com> Signed-off-by: Jens Axboe <axboe@suse.de>
-rw-r--r--drivers/block/cciss.c33
1 files changed, 24 insertions, 9 deletions
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c
index 33f8341887d0..a9e33db46e68 100644
--- a/drivers/block/cciss.c
+++ b/drivers/block/cciss.c
@@ -1139,8 +1139,15 @@ static int revalidate_allvol(ctlr_info_t *host)
1139 1139
1140 for(i=0; i< NWD; i++) { 1140 for(i=0; i< NWD; i++) {
1141 struct gendisk *disk = host->gendisk[i]; 1141 struct gendisk *disk = host->gendisk[i];
1142 if (disk->flags & GENHD_FL_UP) 1142 if (disk) {
1143 del_gendisk(disk); 1143 request_queue_t *q = disk->queue;
1144
1145 if (disk->flags & GENHD_FL_UP)
1146 del_gendisk(disk);
1147 if (q)
1148 blk_cleanup_queue(q);
1149 put_disk(disk);
1150 }
1144 } 1151 }
1145 1152
1146 /* 1153 /*
@@ -1454,10 +1461,13 @@ static int deregister_disk(struct gendisk *disk, drive_info_struct *drv,
1454 * allows us to delete disk zero but keep the controller registered. 1461 * allows us to delete disk zero but keep the controller registered.
1455 */ 1462 */
1456 if (h->gendisk[0] != disk){ 1463 if (h->gendisk[0] != disk){
1457 if (disk->flags & GENHD_FL_UP){ 1464 if (disk) {
1458 blk_cleanup_queue(disk->queue); 1465 request_queue_t *q = disk->queue;
1459 del_gendisk(disk); 1466 if (disk->flags & GENHD_FL_UP)
1460 drv->queue = NULL; 1467 del_gendisk(disk);
1468 if (q)
1469 blk_cleanup_queue(q);
1470 put_disk(disk);
1461 } 1471 }
1462 } 1472 }
1463 1473
@@ -3226,9 +3236,14 @@ static void __devexit cciss_remove_one (struct pci_dev *pdev)
3226 /* remove it from the disk list */ 3236 /* remove it from the disk list */
3227 for (j = 0; j < NWD; j++) { 3237 for (j = 0; j < NWD; j++) {
3228 struct gendisk *disk = hba[i]->gendisk[j]; 3238 struct gendisk *disk = hba[i]->gendisk[j];
3229 if (disk->flags & GENHD_FL_UP) { 3239 if (disk) {
3230 del_gendisk(disk); 3240 request_queue_t *q = disk->queue;
3231 blk_cleanup_queue(disk->queue); 3241
3242 if (disk->flags & GENHD_FL_UP)
3243 del_gendisk(disk);
3244 if (q)
3245 blk_cleanup_queue(q);
3246 put_disk(disk);
3232 } 3247 }
3233 } 3248 }
3234 3249