* [PATCH V2 1/4] be2iscsi : Fix the retry count for boot targets
@ 2014-12-20 0:51 John Soni Jose
2014-12-22 23:47 ` Mike Christie
2015-02-28 21:07 ` Mike Christie
0 siblings, 2 replies; 5+ messages in thread
From: John Soni Jose @ 2014-12-20 0:51 UTC (permalink / raw)
To: linux-scsi, michaelc; +Cc: John Soni Jose, Minh Tran, Jayamohan Kallickal
Increment the retry count to get the boot target info when
port async event is received by the driver. Update sysfs enteries
with the boot target parameters.
Signed-off-by: Minh Tran <minhduc.tran@emulex.com>
Signed-off-by: John Soni Jose <sony.john-n@emulex.com>
Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
---
drivers/scsi/be2iscsi/be_cmds.c | 4 ++++
drivers/scsi/be2iscsi/be_main.c | 23 ++++++++++++++++++++---
drivers/scsi/be2iscsi/be_main.h | 4 ++++
3 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/drivers/scsi/be2iscsi/be_cmds.c b/drivers/scsi/be2iscsi/be_cmds.c
index 80d97f3..8e16c49 100644
--- a/drivers/scsi/be2iscsi/be_cmds.c
+++ b/drivers/scsi/be2iscsi/be_cmds.c
@@ -452,6 +452,7 @@ void beiscsi_async_link_state_process(struct beiscsi_hba *phba,
((evt->port_link_status & ASYNC_EVENT_LOGICAL) &&
(evt->port_fault == BEISCSI_PHY_LINK_FAULT_NONE))) {
phba->state = BE_ADAPTER_LINK_UP | BE_ADAPTER_CHECK_BOOT;
+ phba->get_boot = BE_GET_BOOT_RETRIES;
beiscsi_log(phba, KERN_ERR,
BEISCSI_LOG_CONFIG | BEISCSI_LOG_INIT,
@@ -480,6 +481,7 @@ int beiscsi_process_mcc(struct beiscsi_hba *phba)
case ASYNC_EVENT_NEW_ISCSI_CONN:
case ASYNC_EVENT_NEW_TCP_CONN:
phba->state |= BE_ADAPTER_CHECK_BOOT;
+ phba->get_boot = BE_GET_BOOT_RETRIES;
beiscsi_log(phba, KERN_ERR,
BEISCSI_LOG_CONFIG |
BEISCSI_LOG_MBOX,
@@ -488,6 +490,8 @@ int beiscsi_process_mcc(struct beiscsi_hba *phba)
compl->flags);
break;
default:
+ phba->state |= BE_ADAPTER_CHECK_BOOT;
+ phba->get_boot = BE_GET_BOOT_RETRIES;
beiscsi_log(phba, KERN_ERR,
BEISCSI_LOG_CONFIG |
BEISCSI_LOG_MBOX,
diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
index f319340..98490da 100644
--- a/drivers/scsi/be2iscsi/be_main.c
+++ b/drivers/scsi/be2iscsi/be_main.c
@@ -2039,11 +2039,16 @@ static void beiscsi_process_mcc_isr(struct beiscsi_hba *phba)
/* Interpret compl as a async link evt */
beiscsi_async_link_state_process(phba,
(struct be_async_event_link_state *) mcc_compl);
- else
+ else {
beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_MBOX,
"BM_%d : Unsupported Async Event, flags"
" = 0x%08x\n",
mcc_compl->flags);
+ if (phba->state & BE_ADAPTER_LINK_UP) {
+ phba->state |= BE_ADAPTER_CHECK_BOOT;
+ phba->get_boot = BE_GET_BOOT_RETRIES;
+ }
+ }
} else if (mcc_compl->flags & CQE_FLAGS_COMPLETED_MASK) {
be_mcc_compl_process_isr(&phba->ctrl, mcc_compl);
atomic_dec(&phba->ctrl.mcc_obj.q.used);
@@ -4330,8 +4335,14 @@ static int beiscsi_get_boot_info(struct beiscsi_hba *phba)
beiscsi_log(phba, KERN_ERR,
BEISCSI_LOG_INIT | BEISCSI_LOG_CONFIG,
"BM_%d : No boot session\n");
+
+ if (ret == -ENXIO)
+ phba->get_boot = 0;
+
+
return ret;
}
+ phba->get_boot = 0;
nonemb_cmd.va = pci_zalloc_consistent(phba->ctrl.pdev,
sizeof(*session_resp),
&nonemb_cmd.dma);
@@ -5376,8 +5387,14 @@ beiscsi_hw_health_check(struct work_struct *work)
be_eqd_update(phba);
if (phba->state & BE_ADAPTER_CHECK_BOOT) {
- phba->state &= ~BE_ADAPTER_CHECK_BOOT;
- be_check_boot_session(phba);
+ if ((phba->get_boot > 0) && (!phba->boot_kset)) {
+ phba->get_boot--;
+ if (!(phba->get_boot % BE_GET_BOOT_TO))
+ be_check_boot_session(phba);
+ } else {
+ phba->state &= ~BE_ADAPTER_CHECK_BOOT;
+ phba->get_boot = 0;
+ }
}
beiscsi_ue_detect(phba);
diff --git a/drivers/scsi/be2iscsi/be_main.h b/drivers/scsi/be2iscsi/be_main.h
index 7ee0ffc..0aa0cb3 100644
--- a/drivers/scsi/be2iscsi/be_main.h
+++ b/drivers/scsi/be2iscsi/be_main.h
@@ -109,6 +109,9 @@
#define BEISCSI_CLEAN_UNLOAD 0x01
#define BEISCSI_EEH_UNLOAD 0x02
+
+#define BE_GET_BOOT_RETRIES 45
+#define BE_GET_BOOT_TO 20
/**
* hardware needs the async PDU buffers to be posted in multiples of 8
* So have atleast 8 of them by default
@@ -413,6 +416,7 @@ struct beiscsi_hba {
} fw_config;
unsigned int state;
+ int get_boot;
bool fw_timeout;
bool ue_detected;
struct delayed_work beiscsi_hw_check_task;
--
1.7.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH V2 1/4] be2iscsi : Fix the retry count for boot targets
2014-12-20 0:51 [PATCH V2 1/4] be2iscsi : Fix the retry count for boot targets John Soni Jose
@ 2014-12-22 23:47 ` Mike Christie
2014-12-22 23:54 ` Mike Christie
2015-02-28 21:07 ` Mike Christie
1 sibling, 1 reply; 5+ messages in thread
From: Mike Christie @ 2014-12-22 23:47 UTC (permalink / raw)
To: John Soni Jose, linux-scsi; +Cc: Minh Tran, Jayamohan Kallickal
On 12/19/2014 06:51 PM, John Soni Jose wrote:
> @@ -5376,8 +5387,14 @@ beiscsi_hw_health_check(struct work_struct *work)
> be_eqd_update(phba);
>
> if (phba->state & BE_ADAPTER_CHECK_BOOT) {
> - phba->state &= ~BE_ADAPTER_CHECK_BOOT;
> - be_check_boot_session(phba);
> + if ((phba->get_boot > 0) && (!phba->boot_kset)) {
> + phba->get_boot--;
> + if (!(phba->get_boot % BE_GET_BOOT_TO))
> + be_check_boot_session(phba);
> + } else {
> + phba->state &= ~BE_ADAPTER_CHECK_BOOT;
> + phba->get_boot = 0;
> + }
> }
Hey, I just want to make sure I am reading this patch correctly. If the
user had the network up, but the target was not able to handle the login
for longer than the timeout we are adding in this patch, then we will
not be able to get any notification (the iscsi boot info would not show
up in sysfs) later when we can login.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH V2 1/4] be2iscsi : Fix the retry count for boot targets
2014-12-22 23:47 ` Mike Christie
@ 2014-12-22 23:54 ` Mike Christie
2014-12-24 7:38 ` Sony John-N
0 siblings, 1 reply; 5+ messages in thread
From: Mike Christie @ 2014-12-22 23:54 UTC (permalink / raw)
To: John Soni Jose, linux-scsi; +Cc: Minh Tran, Jayamohan Kallickal
On 12/22/2014 05:47 PM, Mike Christie wrote:
> On 12/19/2014 06:51 PM, John Soni Jose wrote:
>> @@ -5376,8 +5387,14 @@ beiscsi_hw_health_check(struct work_struct *work)
>> be_eqd_update(phba);
>>
>> if (phba->state & BE_ADAPTER_CHECK_BOOT) {
>> - phba->state &= ~BE_ADAPTER_CHECK_BOOT;
>> - be_check_boot_session(phba);
>> + if ((phba->get_boot > 0) && (!phba->boot_kset)) {
>> + phba->get_boot--;
>> + if (!(phba->get_boot % BE_GET_BOOT_TO))
>> + be_check_boot_session(phba);
>> + } else {
>> + phba->state &= ~BE_ADAPTER_CHECK_BOOT;
>> + phba->get_boot = 0;
>> + }
>> }
>
> Hey, I just want to make sure I am reading this patch correctly. If the
> user had the network up, but the target was not able to handle the login
> for longer than the timeout we are adding in this patch, then we will
> not be able to get any notification (the iscsi boot info would not show
> up in sysfs) later when we can login.
>
Actually, I think I am wrong. If we hit the above scenario, then
eventually the fw would log in and we would then get a
ASYNC_EVENT_NEW_ISCSI_CONN event right?
^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: [PATCH V2 1/4] be2iscsi : Fix the retry count for boot targets
2014-12-22 23:54 ` Mike Christie
@ 2014-12-24 7:38 ` Sony John-N
0 siblings, 0 replies; 5+ messages in thread
From: Sony John-N @ 2014-12-24 7:38 UTC (permalink / raw)
To: Mike Christie, linux-scsi@vger.kernel.org
Cc: Minh Duc Tran, Jayamohan Kallickal
________________________________________
From: Mike Christie [michaelc@cs.wisc.edu]
Sent: Monday, December 22, 2014 3:54 PM
To: Sony John-N; linux-scsi@vger.kernel.org
Cc: Minh Duc Tran; Jayamohan Kallickal
Subject: Re: [PATCH V2 1/4] be2iscsi : Fix the retry count for boot targets
On 12/22/2014 05:47 PM, Mike Christie wrote:
> On 12/19/2014 06:51 PM, John Soni Jose wrote:
>> @@ -5376,8 +5387,14 @@ beiscsi_hw_health_check(struct work_struct *work)
>> be_eqd_update(phba);
>>
>> if (phba->state & BE_ADAPTER_CHECK_BOOT) {
>> - phba->state &= ~BE_ADAPTER_CHECK_BOOT;
>> - be_check_boot_session(phba);
>> + if ((phba->get_boot > 0) && (!phba->boot_kset)) {
>> + phba->get_boot--;
>> + if (!(phba->get_boot % BE_GET_BOOT_TO))
>> + be_check_boot_session(phba);
>> + } else {
>> + phba->state &= ~BE_ADAPTER_CHECK_BOOT;
>> + phba->get_boot = 0;
>> + }
>> }
>
> Hey, I just want to make sure I am reading this patch correctly. If the
> user had the network up, but the target was not able to handle the login
> for longer than the timeout we are adding in this patch, then we will
> not be able to get any notification (the iscsi boot info would not show
> up in sysfs) later when we can login.
>
> Actually, I think I am wrong. If we hit the above scenario, then
> eventually the fw would log in and we would then get a
> ASYNC_EVENT_NEW_ISCSI_CONN event right?
Yeah you are right Mike.
When FW logs to any persistent target on the adapter, an ASYNC_EVENT is sent to the driver. In this case when login to boot-target happens driver gets the ASYNC_EVENT and iscsi-boot info will be populated in the sysfs.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH V2 1/4] be2iscsi : Fix the retry count for boot targets
2014-12-20 0:51 [PATCH V2 1/4] be2iscsi : Fix the retry count for boot targets John Soni Jose
2014-12-22 23:47 ` Mike Christie
@ 2015-02-28 21:07 ` Mike Christie
1 sibling, 0 replies; 5+ messages in thread
From: Mike Christie @ 2015-02-28 21:07 UTC (permalink / raw)
To: John Soni Jose, linux-scsi; +Cc: Minh Tran, Jayamohan Kallickal
On 12/19/14, 6:51 PM, John Soni Jose wrote:
> Increment the retry count to get the boot target info when
> port async event is received by the driver. Update sysfs enteries
> with the boot target parameters.
>
> Signed-off-by: Minh Tran <minhduc.tran@emulex.com>
> Signed-off-by: John Soni Jose <sony.john-n@emulex.com>
> Signed-off-by: Jayamohan Kallickal <jayamohan.kallickal@emulex.com>
> ---
> drivers/scsi/be2iscsi/be_cmds.c | 4 ++++
> drivers/scsi/be2iscsi/be_main.c | 23 ++++++++++++++++++++---
> drivers/scsi/be2iscsi/be_main.h | 4 ++++
> 3 files changed, 28 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/scsi/be2iscsi/be_cmds.c b/drivers/scsi/be2iscsi/be_cmds.c
> index 80d97f3..8e16c49 100644
> --- a/drivers/scsi/be2iscsi/be_cmds.c
> +++ b/drivers/scsi/be2iscsi/be_cmds.c
> @@ -452,6 +452,7 @@ void beiscsi_async_link_state_process(struct beiscsi_hba *phba,
> ((evt->port_link_status & ASYNC_EVENT_LOGICAL) &&
> (evt->port_fault == BEISCSI_PHY_LINK_FAULT_NONE))) {
> phba->state = BE_ADAPTER_LINK_UP | BE_ADAPTER_CHECK_BOOT;
> + phba->get_boot = BE_GET_BOOT_RETRIES;
>
> beiscsi_log(phba, KERN_ERR,
> BEISCSI_LOG_CONFIG | BEISCSI_LOG_INIT,
> @@ -480,6 +481,7 @@ int beiscsi_process_mcc(struct beiscsi_hba *phba)
> case ASYNC_EVENT_NEW_ISCSI_CONN:
> case ASYNC_EVENT_NEW_TCP_CONN:
> phba->state |= BE_ADAPTER_CHECK_BOOT;
> + phba->get_boot = BE_GET_BOOT_RETRIES;
> beiscsi_log(phba, KERN_ERR,
> BEISCSI_LOG_CONFIG |
> BEISCSI_LOG_MBOX,
> @@ -488,6 +490,8 @@ int beiscsi_process_mcc(struct beiscsi_hba *phba)
> compl->flags);
> break;
> default:
> + phba->state |= BE_ADAPTER_CHECK_BOOT;
> + phba->get_boot = BE_GET_BOOT_RETRIES;
> beiscsi_log(phba, KERN_ERR,
> BEISCSI_LOG_CONFIG |
> BEISCSI_LOG_MBOX,
> diff --git a/drivers/scsi/be2iscsi/be_main.c b/drivers/scsi/be2iscsi/be_main.c
> index f319340..98490da 100644
> --- a/drivers/scsi/be2iscsi/be_main.c
> +++ b/drivers/scsi/be2iscsi/be_main.c
> @@ -2039,11 +2039,16 @@ static void beiscsi_process_mcc_isr(struct beiscsi_hba *phba)
> /* Interpret compl as a async link evt */
> beiscsi_async_link_state_process(phba,
> (struct be_async_event_link_state *) mcc_compl);
> - else
> + else {
> beiscsi_log(phba, KERN_ERR, BEISCSI_LOG_MBOX,
> "BM_%d : Unsupported Async Event, flags"
> " = 0x%08x\n",
> mcc_compl->flags);
> + if (phba->state & BE_ADAPTER_LINK_UP) {
> + phba->state |= BE_ADAPTER_CHECK_BOOT;
> + phba->get_boot = BE_GET_BOOT_RETRIES;
> + }
> + }
> } else if (mcc_compl->flags & CQE_FLAGS_COMPLETED_MASK) {
> be_mcc_compl_process_isr(&phba->ctrl, mcc_compl);
> atomic_dec(&phba->ctrl.mcc_obj.q.used);
> @@ -4330,8 +4335,14 @@ static int beiscsi_get_boot_info(struct beiscsi_hba *phba)
> beiscsi_log(phba, KERN_ERR,
> BEISCSI_LOG_INIT | BEISCSI_LOG_CONFIG,
> "BM_%d : No boot session\n");
> +
> + if (ret == -ENXIO)
> + phba->get_boot = 0;
> +
> +
> return ret;
> }
> + phba->get_boot = 0;
> nonemb_cmd.va = pci_zalloc_consistent(phba->ctrl.pdev,
> sizeof(*session_resp),
> &nonemb_cmd.dma);
> @@ -5376,8 +5387,14 @@ beiscsi_hw_health_check(struct work_struct *work)
> be_eqd_update(phba);
>
> if (phba->state & BE_ADAPTER_CHECK_BOOT) {
> - phba->state &= ~BE_ADAPTER_CHECK_BOOT;
> - be_check_boot_session(phba);
> + if ((phba->get_boot > 0) && (!phba->boot_kset)) {
> + phba->get_boot--;
> + if (!(phba->get_boot % BE_GET_BOOT_TO))
> + be_check_boot_session(phba);
> + } else {
> + phba->state &= ~BE_ADAPTER_CHECK_BOOT;
> + phba->get_boot = 0;
> + }
> }
>
> beiscsi_ue_detect(phba);
> diff --git a/drivers/scsi/be2iscsi/be_main.h b/drivers/scsi/be2iscsi/be_main.h
> index 7ee0ffc..0aa0cb3 100644
> --- a/drivers/scsi/be2iscsi/be_main.h
> +++ b/drivers/scsi/be2iscsi/be_main.h
> @@ -109,6 +109,9 @@
>
> #define BEISCSI_CLEAN_UNLOAD 0x01
> #define BEISCSI_EEH_UNLOAD 0x02
> +
> +#define BE_GET_BOOT_RETRIES 45
> +#define BE_GET_BOOT_TO 20
> /**
> * hardware needs the async PDU buffers to be posted in multiples of 8
> * So have atleast 8 of them by default
> @@ -413,6 +416,7 @@ struct beiscsi_hba {
> } fw_config;
>
> unsigned int state;
> + int get_boot;
> bool fw_timeout;
> bool ue_detected;
> struct delayed_work beiscsi_hw_check_task;
>
Looks ok to me.
Reviewed-by: Mike Christie <michaelc@cs.wisc.edu>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2015-02-28 21:07 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-12-20 0:51 [PATCH V2 1/4] be2iscsi : Fix the retry count for boot targets John Soni Jose
2014-12-22 23:47 ` Mike Christie
2014-12-22 23:54 ` Mike Christie
2014-12-24 7:38 ` Sony John-N
2015-02-28 21:07 ` Mike Christie
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox