fix race that can give duplicate host number
Just once, two fcoe instances got the same host number from scsi_add_host(). Use atomic_t and atomic_inc_return() to get next host number. Subtract 1, so that scsi_host still starts with 0. [jejb: added comment about unusual subtraction] Signed-off-by: Joe Eykholt <jeykholt@cisco.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
parent
1119865935
commit
30c9afa6cc
|
@ -40,7 +40,7 @@
|
|||
#include "scsi_logging.h"
|
||||
|
||||
|
||||
static int scsi_host_next_hn; /* host_no for next new host */
|
||||
static atomic_t scsi_host_next_hn; /* host_no for next new host */
|
||||
|
||||
|
||||
static void scsi_host_cls_release(struct device *dev)
|
||||
|
@ -333,7 +333,11 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)
|
|||
|
||||
mutex_init(&shost->scan_mutex);
|
||||
|
||||
shost->host_no = scsi_host_next_hn++; /* XXX(hch): still racy */
|
||||
/*
|
||||
* subtract one because we increment first then return, but we need to
|
||||
* know what the next host number was before increment
|
||||
*/
|
||||
shost->host_no = atomic_inc_return(&scsi_host_next_hn) - 1;
|
||||
shost->dma_channel = 0xff;
|
||||
|
||||
/* These three are default values which can be overridden */
|
||||
|
|
Loading…
Reference in New Issue