diff options
author | Stephen M. Cameron <scameron@beardog.cce.hp.com> | 2009-09-17 20:47:19 +0200 |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2009-10-01 21:15:41 +0200 |
commit | 097d026453e7051a544722f4e05240085916499d (patch) | |
tree | 1a514901f3c3f38799b946b43bf30935802891d1 /drivers/block/cciss.c | |
parent | cciss: Dynamically allocate struct device for each logical drive as needed. (diff) | |
download | linux-097d026453e7051a544722f4e05240085916499d.tar.xz linux-097d026453e7051a544722f4e05240085916499d.zip |
cciss: Rearrange logical drive sysfs code to make the "changing a disk" path work.
Rearrange logical drive sysfs code to make the "changing a disk" path work.
Signed-off-by: Stephen M. Cameron <scameron@beardog.cce.hp.com>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'drivers/block/cciss.c')
-rw-r--r-- | drivers/block/cciss.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/drivers/block/cciss.c b/drivers/block/cciss.c index 30b328aefe7d..2810dd9805a9 100644 --- a/drivers/block/cciss.c +++ b/drivers/block/cciss.c @@ -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 |