From: Hannes Reinecke <hare@suse.de>
To: James Bottomley <jbottomley@parallels.com>
Cc: linux-scsi@vger.kernel.org, Hannes Reinecke <hare@suse.de>,
Kashyap Desai <kashyap.desai@lsi.com>,
Adam Radford <aradford@gmail.com>
Subject: [PATCH 4/6] megaraid_sas: catch errors from megasas_get_map_info()
Date: Thu, 16 Jan 2014 11:25:34 +0100 [thread overview]
Message-ID: <1389867936-118685-5-git-send-email-hare@suse.de> (raw)
In-Reply-To: <1389867936-118685-1-git-send-email-hare@suse.de>
megasas_get_map_info() might fail, after which it'll be
pointless to call megasas_sync_map_info().
So update megasas_get_map_info() to correctly handle errors
and call megasas_sync_map_info() only if no error occurred.
Cc: Kashyap Desai <kashyap.desai@lsi.com>
Cc: Adam Radford <aradford@gmail.com>
Signed-off-by: Hannes Reinecke <hare@suse.de>
---
drivers/scsi/megaraid/megaraid_sas_base.c | 5 ++--
drivers/scsi/megaraid/megaraid_sas_fusion.c | 41 ++++++++++++++++-------------
2 files changed, 26 insertions(+), 20 deletions(-)
diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
index 95d4e5c..d17a097 100644
--- a/drivers/scsi/megaraid/megaraid_sas_base.c
+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
@@ -4689,8 +4689,9 @@ megasas_resume(struct pci_dev *pdev)
megasas_free_cmds_fusion(instance);
goto fail_init_mfi;
}
- if (!megasas_get_map_info(instance))
- megasas_sync_map_info(instance);
+ if (megasas_get_map_info(instance) < 0)
+ goto fail_init_mfi;
+ megasas_sync_map_info(instance);
}
break;
default:
diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c b/drivers/scsi/megaraid/megaraid_sas_fusion.c
index 5c30f9d..be6de80 100644
--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c
+++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c
@@ -773,15 +773,16 @@ u8
megasas_get_map_info(struct megasas_instance *instance)
{
struct fusion_context *fusion = instance->ctrl_context;
+ int rc;
fusion->fast_path_io = 0;
- if (!megasas_get_ld_map_info(instance)) {
- if (MR_ValidateMapInfo(instance)) {
- fusion->fast_path_io = 1;
- return 0;
- }
- }
- return 1;
+ rc = megasas_get_ld_map_info(instance);
+ if (rc < 0)
+ return rc;
+
+ if (MR_ValidateMapInfo(instance))
+ fusion->fast_path_io = 1;
+ return 0;
}
/*
@@ -807,6 +808,14 @@ megasas_sync_map_info(struct megasas_instance *instance)
dma_addr_t ci_h = 0;
u32 size_map_info;
+ fusion = instance->ctrl_context;
+ if (!fusion)
+ return -ENXIO;
+
+ if (!fusion->fast_path_io)
+ return 0;
+
+
cmd = megasas_get_cmd(instance);
if (!cmd) {
@@ -815,13 +824,6 @@ megasas_sync_map_info(struct megasas_instance *instance)
return -ENOMEM;
}
- fusion = instance->ctrl_context;
-
- if (!fusion) {
- megasas_return_cmd(instance, cmd);
- return 1;
- }
-
map = fusion->ld_map[instance->map_id & 1];
num_lds = le32_to_cpu(map->raidMap.ldCount);
@@ -1030,8 +1032,10 @@ megasas_init_adapter_fusion(struct megasas_instance *instance)
}
}
- if (!megasas_get_map_info(instance))
- megasas_sync_map_info(instance);
+ if (megasas_get_map_info(instance) < 0)
+ goto fail_map_info;
+
+ megasas_sync_map_info(instance);
return 0;
@@ -2457,8 +2461,9 @@ int megasas_reset_fusion(struct Scsi_Host *shost)
sizeof(struct LD_LOAD_BALANCE_INFO)
*MAX_LOGICAL_DRIVES);
- if (!megasas_get_map_info(instance))
- megasas_sync_map_info(instance);
+ if (megasas_get_map_info(instance) < 0)
+ break;
+ megasas_sync_map_info(instance);
/* Adapter reset completed successfully */
printk(KERN_WARNING "megaraid_sas: Reset "
--
1.7.12.4
next prev parent reply other threads:[~2014-01-16 10:25 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-16 10:25 [PATCH 0/6] megaraid_sas: Fix system stall with iommu enabled Hannes Reinecke
2014-01-16 10:25 ` [PATCH 1/6] megaraid_sas: Do not wait forever Hannes Reinecke
2014-01-24 7:46 ` Desai, Kashyap
2014-01-24 8:24 ` Hannes Reinecke
2014-01-24 8:34 ` Desai, Kashyap
2014-01-24 10:04 ` Hannes Reinecke
2014-01-16 10:25 ` [PATCH 2/6] megaraid_sas_fusion: Fixup fire_cmd syntax Hannes Reinecke
2014-01-16 10:25 ` [PATCH 3/6] megaraid_sas_fusion: correctly pass queue info pointer Hannes Reinecke
2014-01-24 8:41 ` Desai, Kashyap
2014-01-16 10:25 ` Hannes Reinecke [this message]
2014-01-24 8:35 ` [PATCH 4/6] megaraid_sas: catch errors from megasas_get_map_info() Desai, Kashyap
2014-01-16 10:25 ` [PATCH 5/6] megaraid_sas_fusion: Return correct error value in megasas_get_ld_map_info() Hannes Reinecke
2014-01-24 8:45 ` Desai, Kashyap
2014-01-16 10:25 ` [PATCH 6/6] megaraid_sas: check return value for megasas_get_pd_list() Hannes Reinecke
2014-01-24 8:38 ` Desai, Kashyap
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1389867936-118685-5-git-send-email-hare@suse.de \
--to=hare@suse.de \
--cc=aradford@gmail.com \
--cc=jbottomley@parallels.com \
--cc=kashyap.desai@lsi.com \
--cc=linux-scsi@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).