iwlwifi: mvm: take scan ref only on success
authorEliad Peller <eliad@wizery.com>
Thu, 15 Oct 2015 07:58:48 +0000 (10:58 +0300)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Sun, 25 Oct 2015 11:45:08 +0000 (13:45 +0200)
In some cases, scan reference was taken, but wasn't
released even though scan command wasn't actually issued.

Change the current code to simply take the reference
only on success.

Signed-off-by: Eliad Peller <eliadx.peller@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
drivers/net/wireless/iwlwifi/mvm/scan.c

index 0e9d28c23023b23ed1ccbba7298d86f81d582111..d6e0c1b5c20cf31e3b8860f9afb8361a0d44c443 100644 (file)
@@ -1190,8 +1190,6 @@ int iwl_mvm_reg_scan_start(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
        if (ret)
                return ret;
 
-       iwl_mvm_ref(mvm, IWL_MVM_REF_SCAN);
-
        /* we should have failed registration if scan_cmd was NULL */
        if (WARN_ON(!mvm->scan_cmd))
                return -ENOMEM;
@@ -1232,21 +1230,20 @@ int iwl_mvm_reg_scan_start(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
                return ret;
 
        ret = iwl_mvm_send_cmd(mvm, &hcmd);
-       if (!ret) {
-               IWL_DEBUG_SCAN(mvm, "Scan request was sent successfully\n");
-               mvm->scan_status |= IWL_MVM_SCAN_REGULAR;
-       } else {
+       if (ret) {
                /* If the scan failed, it usually means that the FW was unable
                 * to allocate the time events. Warn on it, but maybe we
                 * should try to send the command again with different params.
                 */
                IWL_ERR(mvm, "Scan failed! ret %d\n", ret);
+               return ret;
        }
 
-       if (ret)
-               iwl_mvm_unref(mvm, IWL_MVM_REF_SCAN);
+       IWL_DEBUG_SCAN(mvm, "Scan request was sent successfully\n");
+       mvm->scan_status |= IWL_MVM_SCAN_REGULAR;
+       iwl_mvm_ref(mvm, IWL_MVM_REF_SCAN);
 
-       return ret;
+       return 0;
 }
 
 int iwl_mvm_sched_scan_start(struct iwl_mvm *mvm,