Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6f5a0f7c authored by mikem's avatar mikem Committed by Jens Axboe
Browse files

[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: default avatarMike Miller <mike.miller@hp.com>
Signed-off-by: default avatarJens Axboe <axboe@suse.de>
parent 15534d38
Loading
Loading
Loading
Loading
+24 −9
Original line number Diff line number Diff line
@@ -1139,8 +1139,15 @@ static int revalidate_allvol(ctlr_info_t *host)

	for(i=0; i< NWD; i++) {
		struct gendisk *disk = host->gendisk[i];
		if (disk) {
			request_queue_t *q = disk->queue;

			if (disk->flags & GENHD_FL_UP)
				del_gendisk(disk);
			if (q)
				blk_cleanup_queue(q);
			put_disk(disk);
		}
	}

        /*
@@ -1454,10 +1461,13 @@ static int deregister_disk(struct gendisk *disk, drive_info_struct *drv,
	 * allows us to delete disk zero but keep the controller registered.
	*/
	if (h->gendisk[0] != disk){
		if (disk->flags & GENHD_FL_UP){
			blk_cleanup_queue(disk->queue);
		if (disk) {
			request_queue_t *q = disk->queue;
			if (disk->flags & GENHD_FL_UP)
				del_gendisk(disk);
			drv->queue = NULL;
			if (q)	
				blk_cleanup_queue(q);
			put_disk(disk);	
		}
	}

@@ -3226,9 +3236,14 @@ static void __devexit cciss_remove_one (struct pci_dev *pdev)
	/* remove it from the disk list */
	for (j = 0; j < NWD; j++) {
		struct gendisk *disk = hba[i]->gendisk[j];
		if (disk->flags & GENHD_FL_UP) {
		if (disk) {
			request_queue_t *q = disk->queue;

			if (disk->flags & GENHD_FL_UP) 
				del_gendisk(disk);
			blk_cleanup_queue(disk->queue);
			if (q)
				blk_cleanup_queue(q);
			put_disk(disk);
		}
	}