isert: Handle login pdu reception in more robust way

Properly handle case when login PDU is received before logi response has been sent

Signed-off-by: Yan Burman <yanb@mellanox.com>

git-svn-id: http://svn.code.sf.net/p/scst/svn/branches/iser@5655 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
Yan Burman
2014-07-01 12:05:46 +00:00
parent 771c980cd3
commit 426ff54331

View File

@@ -759,7 +759,34 @@ int isert_login_req_rx(struct iscsi_cmnd *login_req)
goto out;
}
sBUG_ON(dev->login_req != NULL);
switch (dev->state) {
case CS_INIT:
if (dev->login_req != NULL) {
sBUG();
res = -EINVAL;
goto out;
}
break;
case CS_REQ_BHS: /* Got login request before done handling old one */
break;
case CS_REQ_DATA:
case CS_REQ_FINISHED:
case CS_RSP_BHS:
case CS_RSP_DATA:
case CS_RSP_FINISHED:
PRINT_WARNING("%s",
"Received login PDU while handling previous one\n");
res = -EINVAL;
goto out;
default:
sBUG();
res = -EINVAL;
goto out;
}
spin_lock(&dev->pdu_lock);
dev->login_req = login_req;