From 426ff543312f9a159769c5d37a5426ba8fe84bbd Mon Sep 17 00:00:00 2001 From: Yan Burman Date: Tue, 1 Jul 2014 12:05:46 +0000 Subject: [PATCH] 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 git-svn-id: http://svn.code.sf.net/p/scst/svn/branches/iser@5655 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- iscsi-scst/kernel/isert-scst/isert_login.c | 29 +++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/iscsi-scst/kernel/isert-scst/isert_login.c b/iscsi-scst/kernel/isert-scst/isert_login.c index 993d00df7..774dc72e6 100644 --- a/iscsi-scst/kernel/isert-scst/isert_login.c +++ b/iscsi-scst/kernel/isert-scst/isert_login.c @@ -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;