Author: ambrisko
Date: Fri May  4 22:54:54 2012
New Revision: 235040
URL: http://svn.freebsd.org/changeset/base/235040

Log:
  Fix the returns in mfi_tbolt_sync_map_info.  I forgot to change
  them to cleanup and goto out when acknowledging the LD's.  Check
  for failure on malloc.  Remove a couple of extra lines and remove
  the spurious return.
  
  Prompted by:  Petr Lampa
  MFC after:    3 days

Modified:
  head/sys/dev/mfi/mfi_tbolt.c

Modified: head/sys/dev/mfi/mfi_tbolt.c
==============================================================================
--- head/sys/dev/mfi/mfi_tbolt.c        Fri May  4 22:48:44 2012        
(r235039)
+++ head/sys/dev/mfi/mfi_tbolt.c        Fri May  4 22:54:54 2012        
(r235040)
@@ -1290,7 +1290,6 @@ mfi_process_fw_state_chg_isr(void *arg)
        mtx_unlock(&sc->mfi_io_lock);
 }
 
-
 /*
  * The ThunderBolt HW has an option for the driver to directly
  * access the underlying disks and operate on the RAID.  To
@@ -1362,13 +1361,21 @@ mfi_tbolt_sync_map_info(struct mfi_softc
        mtx_unlock(&sc->mfi_io_lock);
        ld_sync = (union mfi_ld_ref *) malloc(ld_size, M_MFIBUF,
             M_WAITOK | M_ZERO);
+       if (ld_sync == NULL) {
+               device_printf(sc->mfi_dev, "Failed to allocate sync\n");
+               goto out;
+       }
        for (i = 0; i < list->ld_count; i++) {
                ld_sync[i].ref = list->ld_list[i].ld.ref;
        }
 
        mtx_lock(&sc->mfi_io_lock);
-       if ((cmd = mfi_dequeue_free(sc)) == NULL)
-               return;
+       if ((cmd = mfi_dequeue_free(sc)) == NULL) {
+               device_printf(sc->mfi_dev, "Failed to get command\n");
+               free(ld_sync, M_MFIBUF);
+               goto out;
+       }
+       
        context = cmd->cm_frame->header.context;
        bzero(cmd->cm_frame, sizeof(union mfi_frame));
        cmd->cm_frame->header.context = context;
@@ -1396,7 +1403,10 @@ mfi_tbolt_sync_map_info(struct mfi_softc
 
        if ((error = mfi_mapcmd(sc, cmd)) != 0) {
                device_printf(sc->mfi_dev, "failed to send map sync\n");
-               return;
+               free(ld_sync, M_MFIBUF);
+               sc->mfi_map_sync_cm = NULL;
+               mfi_requeue_ready(cmd);
+               goto out;
        }
 
 out:
@@ -1405,11 +1415,8 @@ out:
        if (cm)
                mfi_release_command(cm);
        mtx_unlock(&sc->mfi_io_lock);
-
-       return;
 }
 
-
 static void
 mfi_sync_map_complete(struct mfi_command *cm)
 {
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to