|
@@ -1916,9 +1916,10 @@ static int cciss_add_gendisk(ctlr_info_t *h, __u32 lunid, int controller_node)
|
|
|
}
|
|
|
}
|
|
|
h->drv[drv_index].LunID = lunid;
|
|
|
- if (cciss_create_ld_sysfs_entry(h, drv_index))
|
|
|
- goto err_free_disk;
|
|
|
-
|
|
|
+ if (h->drv[drv_index].dev == NULL) {
|
|
|
+ if (cciss_create_ld_sysfs_entry(h, drv_index))
|
|
|
+ goto err_free_disk;
|
|
|
+ }
|
|
|
/* Don't need to mark this busy because nobody */
|
|
|
/* else knows about this disk yet to contend */
|
|
|
/* for access to it. */
|
|
@@ -2145,8 +2146,10 @@ static int deregister_disk(ctlr_info_t *h, int drv_index,
|
|
|
*/
|
|
|
if (h->gendisk[0] != disk) {
|
|
|
struct request_queue *q = disk->queue;
|
|
|
- if (disk->flags & GENHD_FL_UP)
|
|
|
+ if (disk->flags & GENHD_FL_UP) {
|
|
|
+ cciss_destroy_ld_sysfs_entry(h, drv_index);
|
|
|
del_gendisk(disk);
|
|
|
+ }
|
|
|
if (q) {
|
|
|
blk_cleanup_queue(q);
|
|
|
/* Set drv->queue to NULL so that we do not try
|
|
@@ -2190,7 +2193,6 @@ static int deregister_disk(ctlr_info_t *h, int drv_index,
|
|
|
* indicate that this element of the drive
|
|
|
* array is free.
|
|
|
*/
|
|
|
- cciss_destroy_ld_sysfs_entry(h, drv_index);
|
|
|
|
|
|
if (clear_all) {
|
|
|
/* check to see if it was the last disk */
|
|
@@ -4308,15 +4310,13 @@ static void __devexit cciss_remove_one(struct pci_dev *pdev)
|
|
|
if (disk) {
|
|
|
struct request_queue *q = disk->queue;
|
|
|
|
|
|
- if (disk->flags & GENHD_FL_UP)
|
|
|
+ if (disk->flags & GENHD_FL_UP) {
|
|
|
+ cciss_destroy_ld_sysfs_entry(hba[i], j);
|
|
|
del_gendisk(disk);
|
|
|
+ }
|
|
|
if (q)
|
|
|
blk_cleanup_queue(q);
|
|
|
}
|
|
|
- if (hba[i]->drv[j].dev != NULL &&
|
|
|
- (j == 0 || hba[i]->drv[j].raid_level != -1))
|
|
|
- cciss_destroy_ld_sysfs_entry(hba[i], j);
|
|
|
-
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_CISS_SCSI_TAPE
|