From 1886aa52d6d06480cac24eae12da95631ca819c5 Mon Sep 17 00:00:00 2001 From: Mike Miller Date: Tue, 13 Sep 2005 01:25:21 -0700 Subject: [PATCH] --- yaml --- r: 8762 b: refs/heads/master c: 1f8ef3806c40e74733f45f436d44b3d8e9a2fa48 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/block/cciss.c | 8 ++++++++ trunk/drivers/block/cciss.h | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 8a9e770e6787..a7bb30ed080a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9dc7a86e85593c834bb930f5d5aba3a19ee7a350 +refs/heads/master: 1f8ef3806c40e74733f45f436d44b3d8e9a2fa48 diff --git a/trunk/drivers/block/cciss.c b/trunk/drivers/block/cciss.c index 4a49d7972126..8bcd6c498c60 100644 --- a/trunk/drivers/block/cciss.c +++ b/trunk/drivers/block/cciss.c @@ -468,6 +468,9 @@ static int cciss_open(struct inode *inode, struct file *filep) printk(KERN_DEBUG "cciss_open %s\n", inode->i_bdev->bd_disk->disk_name); #endif /* CCISS_DEBUG */ + if (host->busy_initializing) + return -EBUSY; + /* * Root is allowed to open raw volume zero even if it's not configured * so array config can still work. Root is also allowed to open any @@ -2742,6 +2745,9 @@ static int __devinit cciss_init_one(struct pci_dev *pdev, i = alloc_cciss_hba(); if(i < 0) return (-1); + + hba[i]->busy_initializing = 1; + if (cciss_pci_init(hba[i], pdev) != 0) goto clean1; @@ -2864,6 +2870,7 @@ static int __devinit cciss_init_one(struct pci_dev *pdev, add_disk(disk); } + hba[i]->busy_initializing = 0; return(1); clean4: @@ -2884,6 +2891,7 @@ static int __devinit cciss_init_one(struct pci_dev *pdev, clean1: release_io_mem(hba[i]); free_hba(i); + hba[i]->busy_initializing = 0; return(-1); } diff --git a/trunk/drivers/block/cciss.h b/trunk/drivers/block/cciss.h index 566587d0a500..11ee83504b38 100644 --- a/trunk/drivers/block/cciss.h +++ b/trunk/drivers/block/cciss.h @@ -83,6 +83,7 @@ struct ctlr_info int nr_allocs; int nr_frees; int busy_configuring; + int busy_initializing; /* This element holds the zero based queue number of the last * queue to be started. It is used for fairness.