mirror of
https://github.com/torvalds/linux.git
synced 2024-11-28 15:11:31 +00:00
[SCSI] zfcp: Fix wka port processing
Under certain conditions it is possible that a WKA port ist not opened within the expected timeframe of half a second. In this situation the WKA port remains in the state OPENING preventing any succeding request to open the port. This led to unrecoverable remote ports. Fixing this by always setting an appropriate WKA port status before leaving the function and removing the timeout value here since it's not needed here because the general timeout processing would deal with it if required. Signed-off-by: Swen Schillig <swen@vnet.ibm.com> Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
parent
17a093ef01
commit
27f492ccec
@ -79,11 +79,9 @@ static int zfcp_wka_port_get(struct zfcp_wka_port *wka_port)
|
||||
|
||||
mutex_unlock(&wka_port->mutex);
|
||||
|
||||
wait_event_timeout(
|
||||
wka_port->completion_wq,
|
||||
wka_port->status == ZFCP_WKA_PORT_ONLINE ||
|
||||
wka_port->status == ZFCP_WKA_PORT_OFFLINE,
|
||||
HZ >> 1);
|
||||
wait_event(wka_port->completion_wq,
|
||||
wka_port->status == ZFCP_WKA_PORT_ONLINE ||
|
||||
wka_port->status == ZFCP_WKA_PORT_OFFLINE);
|
||||
|
||||
if (wka_port->status == ZFCP_WKA_PORT_ONLINE) {
|
||||
atomic_inc(&wka_port->refcount);
|
||||
|
@ -1627,10 +1627,10 @@ static void zfcp_fsf_open_wka_port_handler(struct zfcp_fsf_req *req)
|
||||
case FSF_ACCESS_DENIED:
|
||||
wka_port->status = ZFCP_WKA_PORT_OFFLINE;
|
||||
break;
|
||||
case FSF_PORT_ALREADY_OPEN:
|
||||
break;
|
||||
case FSF_GOOD:
|
||||
wka_port->handle = header->port_handle;
|
||||
/* fall through */
|
||||
case FSF_PORT_ALREADY_OPEN:
|
||||
wka_port->status = ZFCP_WKA_PORT_ONLINE;
|
||||
}
|
||||
out:
|
||||
|
Loading…
Reference in New Issue
Block a user