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

Commit 1f8ef380 authored by Mike Miller's avatar Mike Miller Committed by Linus Torvalds
Browse files

[PATCH] cciss: busy_initializing flag



This patch adds a flag called busy_initializing.  If there are multiple
controllers in a server AND the HP agents are running it's possible the agents
may try to poll a card that is still initializing if the driver is removed and
then added again.

Signed-off-by: default avatarDon Brace <dab@hp.com>
Signed-off-by: default avatarMike Miller <mike.miller@hp.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 9dc7a86e
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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);
}

+1 −0
Original line number Diff line number Diff line
@@ -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.