diff options
author | Jiri Pirko <jpirko@redhat.com> | 2011-09-02 23:34:30 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-09-15 17:32:26 -0400 |
commit | 4bc71cb983fd2844e603bf633df2bb53385182d2 (patch) | |
tree | 067b6df32fda6c554b2b9263a94a585c2e5a832d /drivers/scsi/bnx2fc/bnx2fc_fcoe.c | |
parent | c5dac7c9984d8a034eb7ae149cedf23ec9259f98 (diff) |
net: consolidate and fix ethtool_ops->get_settings calling
This patch does several things:
- introduces __ethtool_get_settings which is called from ethtool code and
from drivers as well. Put ASSERT_RTNL there.
- dev_ethtool_get_settings() is replaced by __ethtool_get_settings()
- changes calling in drivers so rtnl locking is respected. In
iboe_get_rate was previously ->get_settings() called unlocked. This
fixes it. Also prb_calc_retire_blk_tmo() in af_packet.c had the same
problem. Also fixed by calling __dev_get_by_index() instead of
dev_get_by_index() and holding rtnl_lock for both calls.
- introduces rtnl_lock in bnx2fc_vport_create() and fcoe_vport_create()
so bnx2fc_if_create() and fcoe_if_create() are called locked as they
are from other places.
- use __ethtool_get_settings() in bonding code
Signed-off-by: Jiri Pirko <jpirko@redhat.com>
v2->v3:
-removed dev_ethtool_get_settings()
-added ASSERT_RTNL into __ethtool_get_settings()
-prb_calc_retire_blk_tmo - use __dev_get_by_index() and lock
around it and __ethtool_get_settings() call
v1->v2:
add missing export_symbol
Reviewed-by: Ben Hutchings <bhutchings@solarflare.com> [except FCoE bits]
Acked-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/scsi/bnx2fc/bnx2fc_fcoe.c')
-rw-r--r-- | drivers/scsi/bnx2fc/bnx2fc_fcoe.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c index 2c780a78fcbd..820a1840c3f7 100644 --- a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c +++ b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c | |||
@@ -673,7 +673,7 @@ static void bnx2fc_link_speed_update(struct fc_lport *lport) | |||
673 | struct net_device *netdev = interface->netdev; | 673 | struct net_device *netdev = interface->netdev; |
674 | struct ethtool_cmd ecmd; | 674 | struct ethtool_cmd ecmd; |
675 | 675 | ||
676 | if (!dev_ethtool_get_settings(netdev, &ecmd)) { | 676 | if (!__ethtool_get_settings(netdev, &ecmd)) { |
677 | lport->link_supported_speeds &= | 677 | lport->link_supported_speeds &= |
678 | ~(FC_PORTSPEED_1GBIT | FC_PORTSPEED_10GBIT); | 678 | ~(FC_PORTSPEED_1GBIT | FC_PORTSPEED_10GBIT); |
679 | if (ecmd.supported & (SUPPORTED_1000baseT_Half | | 679 | if (ecmd.supported & (SUPPORTED_1000baseT_Half | |
@@ -1001,9 +1001,11 @@ static int bnx2fc_vport_create(struct fc_vport *vport, bool disabled) | |||
1001 | "this interface\n"); | 1001 | "this interface\n"); |
1002 | return -EIO; | 1002 | return -EIO; |
1003 | } | 1003 | } |
1004 | rtnl_lock(); | ||
1004 | mutex_lock(&bnx2fc_dev_lock); | 1005 | mutex_lock(&bnx2fc_dev_lock); |
1005 | vn_port = bnx2fc_if_create(interface, &vport->dev, 1); | 1006 | vn_port = bnx2fc_if_create(interface, &vport->dev, 1); |
1006 | mutex_unlock(&bnx2fc_dev_lock); | 1007 | mutex_unlock(&bnx2fc_dev_lock); |
1008 | rtnl_unlock(); | ||
1007 | 1009 | ||
1008 | if (IS_ERR(vn_port)) { | 1010 | if (IS_ERR(vn_port)) { |
1009 | printk(KERN_ERR PFX "bnx2fc_vport_create (%s) failed\n", | 1011 | printk(KERN_ERR PFX "bnx2fc_vport_create (%s) failed\n", |