[SCSI] megaraid_sas: check return value for megasas_get_pd_list()
authorHannes Reinecke <hare@suse.de>
Thu, 16 Jan 2014 10:25:36 +0000 (11:25 +0100)
committerJames Bottomley <JBottomley@Parallels.com>
Sat, 15 Mar 2014 17:19:18 +0000 (10:19 -0700)
When megasas_get_pd_list() fails we cannot detect any drives,
so we should be checking the return value accordingly.

[jejb: checkpatch fix]
Signed-off-by: Hannes Reinecke <hare@suse.de>
Acked-by: Kashyap Desai <kashyap.desai@lsi.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/megaraid/megaraid_sas_base.c

index 3b7ad10497febe3f59c300f70806d1f5fec42a60..f21e48b2e9560e8d6e210db9eb79669b6d453de0 100644 (file)
@@ -3763,7 +3763,10 @@ static int megasas_init_fw(struct megasas_instance *instance)
 
        memset(instance->pd_list, 0 ,
                (MEGASAS_MAX_PD * sizeof(struct megasas_pd_list)));
-       megasas_get_pd_list(instance);
+       if (megasas_get_pd_list(instance) < 0) {
+               printk(KERN_ERR "megasas: failed to get PD list\n");
+               goto fail_init_adapter;
+       }
 
        memset(instance->ld_ids, 0xff, MEGASAS_MAX_LD_IDS);
        if (megasas_ld_list_query(instance,
@@ -5592,22 +5595,23 @@ megasas_aen_polling(struct work_struct *work)
 
        if (doscan) {
                printk(KERN_INFO "scanning ...\n");
-               megasas_get_pd_list(instance);
-               for (i = 0; i < MEGASAS_MAX_PD_CHANNELS; i++) {
-                       for (j = 0; j < MEGASAS_MAX_DEV_PER_CHANNEL; j++) {
-                               pd_index = i*MEGASAS_MAX_DEV_PER_CHANNEL + j;
-                               sdev1 = scsi_device_lookup(host, i, j, 0);
-                               if (instance->pd_list[pd_index].driveState ==
-                                                       MR_PD_STATE_SYSTEM) {
-                                       if (!sdev1) {
-                                               scsi_add_device(host, i, j, 0);
-                                       }
-                                       if (sdev1)
-                                               scsi_device_put(sdev1);
-                               } else {
-                                       if (sdev1) {
-                                               scsi_remove_device(sdev1);
-                                               scsi_device_put(sdev1);
+               if (megasas_get_pd_list(instance) == 0) {
+                       for (i = 0; i < MEGASAS_MAX_PD_CHANNELS; i++) {
+                               for (j = 0; j < MEGASAS_MAX_DEV_PER_CHANNEL; j++) {
+                                       pd_index = i*MEGASAS_MAX_DEV_PER_CHANNEL + j;
+                                       sdev1 = scsi_device_lookup(host, i, j, 0);
+                                       if (instance->pd_list[pd_index].driveState ==
+                                           MR_PD_STATE_SYSTEM) {
+                                               if (!sdev1) {
+                                                       scsi_add_device(host, i, j, 0);
+                                               }
+                                               if (sdev1)
+                                                       scsi_device_put(sdev1);
+                                       } else {
+                                               if (sdev1) {
+                                                       scsi_remove_device(sdev1);
+                                                       scsi_device_put(sdev1);
+                                               }
                                        }
                                }
                        }