提交 091694a5 编写于 作者: S Swen Schillig 提交者: James Bottomley

[SCSI] zfcp: wait on SCSI work to be finished before proceeding with init dev

Due to the character of a scheduled work we cannot guarantee the
LUN register to be finished before an initial device tries to use it.
Therefor we have to wait for PENDING_SCSI_WORK flag to be cleared
before proceeding.
Signed-off-by: NSwen Schillig <swen@vnet.ibm.com>
Signed-off-by: NChristof Schmitt <christof.schmitt@de.ibm.com>
Signed-off-by: NJames Bottomley <James.Bottomley@HansenPartnership.com>
上级 9fb3cd86
...@@ -129,7 +129,12 @@ static void __init zfcp_init_device_configure(void) ...@@ -129,7 +129,12 @@ static void __init zfcp_init_device_configure(void)
goto out_unit; goto out_unit;
up(&zfcp_data.config_sema); up(&zfcp_data.config_sema);
ccw_device_set_online(adapter->ccw_device); ccw_device_set_online(adapter->ccw_device);
zfcp_erp_wait(adapter); zfcp_erp_wait(adapter);
wait_event(adapter->erp_done_wqh,
!(atomic_read(&unit->status) &
ZFCP_STATUS_UNIT_SCSI_WORK_PENDING));
down(&zfcp_data.config_sema); down(&zfcp_data.config_sema);
zfcp_unit_put(unit); zfcp_unit_put(unit);
out_unit: out_unit:
......
...@@ -1189,6 +1189,7 @@ static void zfcp_erp_scsi_scan(struct work_struct *work) ...@@ -1189,6 +1189,7 @@ static void zfcp_erp_scsi_scan(struct work_struct *work)
scsilun_to_int((struct scsi_lun *)&unit->fcp_lun), 0); scsilun_to_int((struct scsi_lun *)&unit->fcp_lun), 0);
atomic_clear_mask(ZFCP_STATUS_UNIT_SCSI_WORK_PENDING, &unit->status); atomic_clear_mask(ZFCP_STATUS_UNIT_SCSI_WORK_PENDING, &unit->status);
zfcp_unit_put(unit); zfcp_unit_put(unit);
wake_up(&unit->port->adapter->erp_done_wqh);
kfree(p); kfree(p);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册