提交 30c9afa6 编写于 作者: J Joe Eykholt 提交者: James Bottomley

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: NJoe Eykholt <jeykholt@cisco.com>
Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
上级 11198659
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
#include "scsi_logging.h" #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) 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) ...@@ -333,7 +333,11 @@ struct Scsi_Host *scsi_host_alloc(struct scsi_host_template *sht, int privsize)
mutex_init(&shost->scan_mutex); 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; shost->dma_channel = 0xff;
/* These three are default values which can be overridden */ /* These three are default values which can be overridden */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册