be2net: fix range check for set_qos for a VF
authorAjit Khaparde <ajit.khaparde@emulex.com>
Fri, 30 Dec 2011 12:15:30 +0000 (12:15 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 30 Dec 2011 22:19:21 +0000 (17:19 -0500)
Signed-off-by: Ajit Khaparde <ajit.khaparde@emulex.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/emulex/benet/be_main.c

index 10f2313edbe7edba90aa3e39ca1c2b72a4273994..fe702c1c866d5508215968f23632087fc83b51ce 100644 (file)
@@ -978,18 +978,22 @@ static int be_set_vf_tx_rate(struct net_device *netdev,
        if (!sriov_enabled(adapter))
                return -EPERM;
 
-       if (vf >= adapter->num_vfs || rate < 0)
+       if (vf >= adapter->num_vfs)
                return -EINVAL;
 
-       if (rate > 10000)
-               rate = 10000;
+       if (rate < 100 || rate > 10000) {
+               dev_err(&adapter->pdev->dev,
+                       "tx rate must be between 100 and 10000 Mbps\n");
+               return -EINVAL;
+       }
 
-       adapter->vf_cfg[vf].tx_rate = rate;
        status = be_cmd_set_qos(adapter, rate / 10, vf + 1);
 
        if (status)
-               dev_info(&adapter->pdev->dev,
+               dev_err(&adapter->pdev->dev,
                                "tx rate %d on VF %d failed\n", rate, vf);
+       else
+               adapter->vf_cfg[vf].tx_rate = rate;
        return status;
 }