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)
committerLeann Ogasawara <leann.ogasawara@canonical.com>
Mon, 2 Apr 2012 20:25:09 +0000 (13:25 -0700)
BugLink: http://bugs.launchpad.net/bugs/921793

Signed-off-by: Ajit Khaparde <ajit.khaparde@emulex.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Tim Gardner <tim.gardner@canonical.com>

drivers/net/ethernet/emulex/benet/be_main.c

index a185e61..83602f7 100644 (file)
@@ -961,18 +961,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;
 }