<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/drivers/scsi/fcoe/fcoe.c, branch v3.11</title>
<subtitle>Linux kernel for Apalis and Colibri modules</subtitle>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/'/>
<entry>
<title>Merge tag 'scsi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi</title>
<updated>2013-07-14T00:41:21+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2013-07-14T00:41:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=03ce3ca4b02bfc1e6567a7851ae231ad3cc9418e'/>
<id>03ce3ca4b02bfc1e6567a7851ae231ad3cc9418e</id>
<content type='text'>
Pull final round of SCSI updates from James Bottomley:
 "This is the remaining set of SCSI patches for the merge window.  It's
  mostly driver updates (scsi_debug, qla2xxx, storvsc, mp3sas).  There
  are also several bug fixes in fcoe, libfc, and megaraid_sas.  We also
  have a couple of core changes to try to make device destruction more
  deterministic"

* tag 'scsi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (46 commits)
  [SCSI] scsi constants: command, sense key + additional sense strings
  fcoe: Reduce number of sparse warnings
  fcoe: Stop fc_rport_priv structure leak
  libfcoe: Fix meaningless log statement
  libfc: Differentiate echange timer cancellation debug statements
  libfc: Remove extra space in fc_exch_timer_cancel definition
  fcoe: fix the link error status block sparse warnings
  fcoe: Fix smatch warning in fcoe_fdmi_info function
  libfc: Reject PLOGI from nodes with incompatible role
  [SCSI] enable destruction of blocked devices which fail LUN scanning
  [SCSI] Fix race between starved list and device removal
  [SCSI] megaraid_sas: fix a bug for 64 bit arches
  [SCSI] scsi_debug: reduce duplication between prot_verify_read and prot_verify_write
  [SCSI] scsi_debug: simplify offset calculation for dif_storep
  [SCSI] scsi_debug: invalidate protection info for unmapped region
  [SCSI] scsi_debug: fix NULL pointer dereference with parameters dif=0 dix=1
  [SCSI] scsi_debug: fix incorrectly nested kmap_atomic()
  [SCSI] scsi_debug: fix invalid address passed to kunmap_atomic()
  [SCSI] mpt3sas: Bump driver version to v02.100.00.00
  [SCSI] mpt3sas: when async scanning is enabled then while scanning, devices are removed but their transport layer entries are not removed
  ...
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Pull final round of SCSI updates from James Bottomley:
 "This is the remaining set of SCSI patches for the merge window.  It's
  mostly driver updates (scsi_debug, qla2xxx, storvsc, mp3sas).  There
  are also several bug fixes in fcoe, libfc, and megaraid_sas.  We also
  have a couple of core changes to try to make device destruction more
  deterministic"

* tag 'scsi-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (46 commits)
  [SCSI] scsi constants: command, sense key + additional sense strings
  fcoe: Reduce number of sparse warnings
  fcoe: Stop fc_rport_priv structure leak
  libfcoe: Fix meaningless log statement
  libfc: Differentiate echange timer cancellation debug statements
  libfc: Remove extra space in fc_exch_timer_cancel definition
  fcoe: fix the link error status block sparse warnings
  fcoe: Fix smatch warning in fcoe_fdmi_info function
  libfc: Reject PLOGI from nodes with incompatible role
  [SCSI] enable destruction of blocked devices which fail LUN scanning
  [SCSI] Fix race between starved list and device removal
  [SCSI] megaraid_sas: fix a bug for 64 bit arches
  [SCSI] scsi_debug: reduce duplication between prot_verify_read and prot_verify_write
  [SCSI] scsi_debug: simplify offset calculation for dif_storep
  [SCSI] scsi_debug: invalidate protection info for unmapped region
  [SCSI] scsi_debug: fix NULL pointer dereference with parameters dif=0 dix=1
  [SCSI] scsi_debug: fix incorrectly nested kmap_atomic()
  [SCSI] scsi_debug: fix invalid address passed to kunmap_atomic()
  [SCSI] mpt3sas: Bump driver version to v02.100.00.00
  [SCSI] mpt3sas: when async scanning is enabled then while scanning, devices are removed but their transport layer entries are not removed
  ...
</pre>
</div>
</content>
</entry>
<entry>
<title>fcoe: Fix smatch warning in fcoe_fdmi_info function</title>
<updated>2013-07-09T16:29:17+00:00</updated>
<author>
<name>Neerav Parikh</name>
<email>Neerav.Parikh@intel.com</email>
</author>
<published>2013-05-18T05:12:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=f07d46bbc9ba9a08b338dec7bb858977d4d822fb'/>
<id>f07d46bbc9ba9a08b338dec7bb858977d4d822fb</id>
<content type='text'>
This patch fixes a smatch warning as below:

smatch warnings:
drivers/scsi/fcoe/fcoe.c:782 fcoe_fdmi_info() warn: 'fdmi' puts 896 bytes on
stack

Reported-by: Fengguang Wu &lt;fengguang.wu@intel.com&gt;
Signed-off-by: Neerav Parikh &lt;Neerav.Parikh@intel.com&gt;
Tested-by: Jack Morgan &lt;jack.morgan@intel.com&gt;
Signed-off-by: Robert Love &lt;robert.w.love@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch fixes a smatch warning as below:

smatch warnings:
drivers/scsi/fcoe/fcoe.c:782 fcoe_fdmi_info() warn: 'fdmi' puts 896 bytes on
stack

Reported-by: Fengguang Wu &lt;fengguang.wu@intel.com&gt;
Signed-off-by: Neerav Parikh &lt;Neerav.Parikh@intel.com&gt;
Tested-by: Jack Morgan &lt;jack.morgan@intel.com&gt;
Signed-off-by: Robert Love &lt;robert.w.love@intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net</title>
<updated>2013-07-03T21:55:13+00:00</updated>
<author>
<name>David S. Miller</name>
<email>davem@davemloft.net</email>
</author>
<published>2013-07-03T21:50:41+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=0c1072ae0242fbdffd9a0bba36e7a7033d287f9c'/>
<id>0c1072ae0242fbdffd9a0bba36e7a7033d287f9c</id>
<content type='text'>
Conflicts:
	drivers/net/ethernet/freescale/fec_main.c
	drivers/net/ethernet/renesas/sh_eth.c
	net/ipv4/gre.c

The GRE conflict is between a bug fix (kfree_skb --&gt; kfree_skb_list)
and the splitting of the gre.c code into seperate files.

The FEC conflict was two sets of changes adding ethtool support code
in an "!CONFIG_M5272" CPP protected block.

Finally the sh_eth.c conflict was between one commit add bits set
in the .eesr_err_check mask whilst another commit removed the
.tx_error_check member and assignments.

Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Conflicts:
	drivers/net/ethernet/freescale/fec_main.c
	drivers/net/ethernet/renesas/sh_eth.c
	net/ipv4/gre.c

The GRE conflict is between a bug fix (kfree_skb --&gt; kfree_skb_list)
and the splitting of the gre.c code into seperate files.

The FEC conflict was two sets of changes adding ethtool support code
in an "!CONFIG_M5272" CPP protected block.

Finally the sh_eth.c conflict was between one commit add bits set
in the .eesr_err_check mask whilst another commit removed the
.tx_error_check member and assignments.

Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>fcoe: Use correct API to set vlan tag for FCoE Ethertype skbs</title>
<updated>2013-06-25T19:23:19+00:00</updated>
<author>
<name>Robert Love</name>
<email>robert.w.love@intel.com</email>
</author>
<published>2013-06-19T01:56:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=2884d4230867c8a46cf701214051e923301e7429'/>
<id>2884d4230867c8a46cf701214051e923301e7429</id>
<content type='text'>
fcoe_xmit was coded such that it would skip the vlan net device/layer
and instead set some vlan flags and transmit on the real net device.
The real net device has code that would add the vlan tag for fcoe skbs.
This avoids some extra processing for data frames and provides a small
performance improvement.

Since fcoe_xmit was not using the vlan net device, __vlan_put_tag
within the real net device's xmit routine was ultimately being
called to set the vlan tag.

With the below change the behavior of __vlan_put_tag changed slightly,
it now sets the skb-&gt;protocol = vlan_proto. vlan_proto was not a field
being set by fcoe_xmit, so the skb-&gt;protocol is now not being set to
ETH_P_8021Q, as it should be.

This patch converts fcoe_xmit to use the vlan_put_tag routine which
will tag the skb and fcoe will continue to transmit fcoe skbs on the
real net device.

For reference, the below change was the one that altered the
__vlan_put_tag behavior.

  commit 86a9bad3ab6b6f858fd4443b48738cabbb6d094c
  Author: Patrick McHardy &lt;kaber@trash.net&gt;
  Date:   Fri Apr 19 02:04:30 2013 +0000

      net: vlan: add protocol argument to packet tagging functions

      Add a protocol argument to the VLAN packet tagging functions. In case of HW
      tagging, we need that protocol available in the ndo_start_xmit functions,
      so it is stored in a new field in the skb. The new field fits into a hole
      (on 64 bit) and doesn't increase the sks's size.

Signed-off-by: Robert Love &lt;robert.w.love@intel.com&gt;
Acked-by: Neil Horman &lt;nhorman@tuxdriver.com&gt;
Acked-by: John Fastabend &lt;john.r.fastabend@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
fcoe_xmit was coded such that it would skip the vlan net device/layer
and instead set some vlan flags and transmit on the real net device.
The real net device has code that would add the vlan tag for fcoe skbs.
This avoids some extra processing for data frames and provides a small
performance improvement.

Since fcoe_xmit was not using the vlan net device, __vlan_put_tag
within the real net device's xmit routine was ultimately being
called to set the vlan tag.

With the below change the behavior of __vlan_put_tag changed slightly,
it now sets the skb-&gt;protocol = vlan_proto. vlan_proto was not a field
being set by fcoe_xmit, so the skb-&gt;protocol is now not being set to
ETH_P_8021Q, as it should be.

This patch converts fcoe_xmit to use the vlan_put_tag routine which
will tag the skb and fcoe will continue to transmit fcoe skbs on the
real net device.

For reference, the below change was the one that altered the
__vlan_put_tag behavior.

  commit 86a9bad3ab6b6f858fd4443b48738cabbb6d094c
  Author: Patrick McHardy &lt;kaber@trash.net&gt;
  Date:   Fri Apr 19 02:04:30 2013 +0000

      net: vlan: add protocol argument to packet tagging functions

      Add a protocol argument to the VLAN packet tagging functions. In case of HW
      tagging, we need that protocol available in the ndo_start_xmit functions,
      so it is stored in a new field in the skb. The new field fits into a hole
      (on 64 bit) and doesn't increase the sks's size.

Signed-off-by: Robert Love &lt;robert.w.love@intel.com&gt;
Acked-by: Neil Horman &lt;nhorman@tuxdriver.com&gt;
Acked-by: John Fastabend &lt;john.r.fastabend@intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net: pass info struct via netdevice notifier</title>
<updated>2013-05-28T20:11:01+00:00</updated>
<author>
<name>Jiri Pirko</name>
<email>jiri@resnulli.us</email>
</author>
<published>2013-05-28T01:30:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=351638e7deeed2ec8ce451b53d33921b3da68f83'/>
<id>351638e7deeed2ec8ce451b53d33921b3da68f83</id>
<content type='text'>
So far, only net_device * could be passed along with netdevice notifier
event. This patch provides a possibility to pass custom structure
able to provide info that event listener needs to know.

Signed-off-by: Jiri Pirko &lt;jiri@resnulli.us&gt;

v2-&gt;v3: fix typo on simeth
	shortened dev_getter
	shortened notifier_info struct name
v1-&gt;v2: fix notifier_call parameter in call_netdevice_notifier()
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
So far, only net_device * could be passed along with netdevice notifier
event. This patch provides a possibility to pass custom structure
able to provide info that event listener needs to know.

Signed-off-by: Jiri Pirko &lt;jiri@resnulli.us&gt;

v2-&gt;v3: fix typo on simeth
	shortened dev_getter
	shortened notifier_info struct name
v1-&gt;v2: fix notifier_call parameter in call_netdevice_notifier()
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>net: vlan: rename NETIF_F_HW_VLAN_* feature flags to NETIF_F_HW_VLAN_CTAG_*</title>
<updated>2013-04-19T18:45:26+00:00</updated>
<author>
<name>Patrick McHardy</name>
<email>kaber@trash.net</email>
</author>
<published>2013-04-19T02:04:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=f646968f8f7c624587de729115d802372b9063dd'/>
<id>f646968f8f7c624587de729115d802372b9063dd</id>
<content type='text'>
Rename the hardware VLAN acceleration features to include "CTAG" to indicate
that they only support CTAGs. Follow up patches will introduce 802.1ad
server provider tagging (STAGs) and require the distinction for hardware not
supporting acclerating both.

Signed-off-by: Patrick McHardy &lt;kaber@trash.net&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Rename the hardware VLAN acceleration features to include "CTAG" to indicate
that they only support CTAGs. Follow up patches will introduce 802.1ad
server provider tagging (STAGs) and require the distinction for hardware not
supporting acclerating both.

Signed-off-by: Patrick McHardy &lt;kaber@trash.net&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>fcoe: Fix deadlock between create and destroy paths</title>
<updated>2013-03-25T22:55:56+00:00</updated>
<author>
<name>Robert Love</name>
<email>robert.w.love@intel.com</email>
</author>
<published>2013-03-25T18:00:27+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=f9c4358edb285cead00a0d6cf0644c84ee773026'/>
<id>f9c4358edb285cead00a0d6cf0644c84ee773026</id>
<content type='text'>
We can deadlock (s_active and fcoe_config_mutex) if a
port is being destroyed at the same time one is being created.

[ 4200.503113] ======================================================
[ 4200.503114] [ INFO: possible circular locking dependency detected ]
[ 4200.503116] 3.8.0-rc5+ #8 Not tainted
[ 4200.503117] -------------------------------------------------------
[ 4200.503118] kworker/3:2/2492 is trying to acquire lock:
[ 4200.503119]  (s_active#292){++++.+}, at: [&lt;ffffffff8122d20b&gt;] sysfs_addrm_finish+0x3b/0x70
[ 4200.503127]
but task is already holding lock:
[ 4200.503128]  (fcoe_config_mutex){+.+.+.}, at: [&lt;ffffffffa02f3338&gt;] fcoe_destroy_work+0xe8/0x120 [fcoe]
[ 4200.503133]
which lock already depends on the new lock.

[ 4200.503135]
the existing dependency chain (in reverse order) is:
[ 4200.503136]
-&gt; #1 (fcoe_config_mutex){+.+.+.}:
[ 4200.503139]        [&lt;ffffffff810c7711&gt;] lock_acquire+0xa1/0x140
[ 4200.503143]        [&lt;ffffffff816ca7be&gt;] mutex_lock_nested+0x6e/0x360
[ 4200.503146]        [&lt;ffffffffa02f11bd&gt;] fcoe_enable+0x1d/0xb0 [fcoe]
[ 4200.503148]        [&lt;ffffffffa02f127d&gt;] fcoe_ctlr_enabled+0x2d/0x50 [fcoe]
[ 4200.503151]        [&lt;ffffffffa02ffbe8&gt;] store_ctlr_enabled+0x38/0x90 [libfcoe]
[ 4200.503154]        [&lt;ffffffff81424878&gt;] dev_attr_store+0x18/0x30
[ 4200.503157]        [&lt;ffffffff8122b750&gt;] sysfs_write_file+0xe0/0x150
[ 4200.503160]        [&lt;ffffffff811b334c&gt;] vfs_write+0xac/0x180
[ 4200.503162]        [&lt;ffffffff811b3692&gt;] sys_write+0x52/0xa0
[ 4200.503164]        [&lt;ffffffff816d7159&gt;] system_call_fastpath+0x16/0x1b
[ 4200.503167]
-&gt; #0 (s_active#292){++++.+}:
[ 4200.503170]        [&lt;ffffffff810c680f&gt;] __lock_acquire+0x135f/0x1c90
[ 4200.503172]        [&lt;ffffffff810c7711&gt;] lock_acquire+0xa1/0x140
[ 4200.503174]        [&lt;ffffffff8122c626&gt;] sysfs_deactivate+0x116/0x160
[ 4200.503176]        [&lt;ffffffff8122d20b&gt;] sysfs_addrm_finish+0x3b/0x70
[ 4200.503178]        [&lt;ffffffff8122b2eb&gt;] sysfs_hash_and_remove+0x5b/0xb0
[ 4200.503180]        [&lt;ffffffff8122f3d1&gt;] sysfs_remove_group+0x61/0x100
[ 4200.503183]        [&lt;ffffffff814251eb&gt;] device_remove_groups+0x3b/0x60
[ 4200.503185]        [&lt;ffffffff81425534&gt;] device_remove_attrs+0x44/0x80
[ 4200.503187]        [&lt;ffffffff81425e97&gt;] device_del+0x127/0x1c0
[ 4200.503189]        [&lt;ffffffff81425f52&gt;] device_unregister+0x22/0x60
[ 4200.503191]        [&lt;ffffffffa0300970&gt;] fcoe_ctlr_device_delete+0xe0/0xf0 [libfcoe]
[ 4200.503194]        [&lt;ffffffffa02f1b5c&gt;] fcoe_interface_cleanup+0x6c/0xa0 [fcoe]
[ 4200.503196]        [&lt;ffffffffa02f3355&gt;] fcoe_destroy_work+0x105/0x120 [fcoe]
[ 4200.503198]        [&lt;ffffffff8107ee91&gt;] process_one_work+0x1a1/0x580
[ 4200.503203]        [&lt;ffffffff81080c6e&gt;] worker_thread+0x15e/0x440
[ 4200.503205]        [&lt;ffffffff8108715a&gt;] kthread+0xea/0xf0
[ 4200.503207]        [&lt;ffffffff816d70ac&gt;] ret_from_fork+0x7c/0xb0

[ 4200.503209]
other info that might help us debug this:

[ 4200.503211]  Possible unsafe locking scenario:

[ 4200.503212]        CPU0                    CPU1
[ 4200.503213]        ----                    ----
[ 4200.503214]   lock(fcoe_config_mutex);
[ 4200.503215]                                lock(s_active#292);
[ 4200.503218]                                lock(fcoe_config_mutex);
[ 4200.503219]   lock(s_active#292);
[ 4200.503221]
 *** DEADLOCK ***

[ 4200.503223] 3 locks held by kworker/3:2/2492:
[ 4200.503224]  #0:  (fcoe){.+.+.+}, at: [&lt;ffffffff8107ee2b&gt;] process_one_work+0x13b/0x580
[ 4200.503228]  #1:  ((&amp;port-&gt;destroy_work)){+.+.+.}, at: [&lt;ffffffff8107ee2b&gt;] process_one_work+0x13b/0x580
[ 4200.503232]  #2:  (fcoe_config_mutex){+.+.+.}, at: [&lt;ffffffffa02f3338&gt;] fcoe_destroy_work+0xe8/0x120 [fcoe]
[ 4200.503236]
stack backtrace:
[ 4200.503238] Pid: 2492, comm: kworker/3:2 Not tainted 3.8.0-rc5+ #8
[ 4200.503240] Call Trace:
[ 4200.503243]  [&lt;ffffffff816c2f09&gt;] print_circular_bug+0x1fb/0x20c
[ 4200.503246]  [&lt;ffffffff810c680f&gt;] __lock_acquire+0x135f/0x1c90
[ 4200.503248]  [&lt;ffffffff810c463a&gt;] ? debug_check_no_locks_freed+0x9a/0x180
[ 4200.503250]  [&lt;ffffffff810c7711&gt;] lock_acquire+0xa1/0x140
[ 4200.503253]  [&lt;ffffffff8122d20b&gt;] ? sysfs_addrm_finish+0x3b/0x70
[ 4200.503255]  [&lt;ffffffff8122c626&gt;] sysfs_deactivate+0x116/0x160
[ 4200.503258]  [&lt;ffffffff8122d20b&gt;] ? sysfs_addrm_finish+0x3b/0x70
[ 4200.503260]  [&lt;ffffffff8122d20b&gt;] sysfs_addrm_finish+0x3b/0x70
[ 4200.503262]  [&lt;ffffffff8122b2eb&gt;] sysfs_hash_and_remove+0x5b/0xb0
[ 4200.503265]  [&lt;ffffffff8122f3d1&gt;] sysfs_remove_group+0x61/0x100
[ 4200.503273]  [&lt;ffffffff814251eb&gt;] device_remove_groups+0x3b/0x60
[ 4200.503275]  [&lt;ffffffff81425534&gt;] device_remove_attrs+0x44/0x80
[ 4200.503277]  [&lt;ffffffff81425e97&gt;] device_del+0x127/0x1c0
[ 4200.503279]  [&lt;ffffffff81425f52&gt;] device_unregister+0x22/0x60
[ 4200.503282]  [&lt;ffffffffa0300970&gt;] fcoe_ctlr_device_delete+0xe0/0xf0 [libfcoe]
[ 4200.503285]  [&lt;ffffffffa02f1b5c&gt;] fcoe_interface_cleanup+0x6c/0xa0 [fcoe]
[ 4200.503287]  [&lt;ffffffffa02f3355&gt;] fcoe_destroy_work+0x105/0x120 [fcoe]
[ 4200.503290]  [&lt;ffffffff8107ee91&gt;] process_one_work+0x1a1/0x580
[ 4200.503292]  [&lt;ffffffff8107ee2b&gt;] ? process_one_work+0x13b/0x580
[ 4200.503295]  [&lt;ffffffffa02f3250&gt;] ? fcoe_if_destroy+0x230/0x230 [fcoe]
[ 4200.503297]  [&lt;ffffffff81080c6e&gt;] worker_thread+0x15e/0x440
[ 4200.503299]  [&lt;ffffffff81080b10&gt;] ? busy_worker_rebind_fn+0x100/0x100
[ 4200.503301]  [&lt;ffffffff8108715a&gt;] kthread+0xea/0xf0
[ 4200.503304]  [&lt;ffffffff81087070&gt;] ? kthread_create_on_node+0x160/0x160
[ 4200.503306]  [&lt;ffffffff816d70ac&gt;] ret_from_fork+0x7c/0xb0
[ 4200.503308]  [&lt;ffffffff81087070&gt;] ? kthread_create_on_node+0x160/0x160

Signed-off-by: Robert Love &lt;robert.w.love@intel.com&gt;
Tested-by: Jack Morgan &lt;jack.morgan@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
We can deadlock (s_active and fcoe_config_mutex) if a
port is being destroyed at the same time one is being created.

[ 4200.503113] ======================================================
[ 4200.503114] [ INFO: possible circular locking dependency detected ]
[ 4200.503116] 3.8.0-rc5+ #8 Not tainted
[ 4200.503117] -------------------------------------------------------
[ 4200.503118] kworker/3:2/2492 is trying to acquire lock:
[ 4200.503119]  (s_active#292){++++.+}, at: [&lt;ffffffff8122d20b&gt;] sysfs_addrm_finish+0x3b/0x70
[ 4200.503127]
but task is already holding lock:
[ 4200.503128]  (fcoe_config_mutex){+.+.+.}, at: [&lt;ffffffffa02f3338&gt;] fcoe_destroy_work+0xe8/0x120 [fcoe]
[ 4200.503133]
which lock already depends on the new lock.

[ 4200.503135]
the existing dependency chain (in reverse order) is:
[ 4200.503136]
-&gt; #1 (fcoe_config_mutex){+.+.+.}:
[ 4200.503139]        [&lt;ffffffff810c7711&gt;] lock_acquire+0xa1/0x140
[ 4200.503143]        [&lt;ffffffff816ca7be&gt;] mutex_lock_nested+0x6e/0x360
[ 4200.503146]        [&lt;ffffffffa02f11bd&gt;] fcoe_enable+0x1d/0xb0 [fcoe]
[ 4200.503148]        [&lt;ffffffffa02f127d&gt;] fcoe_ctlr_enabled+0x2d/0x50 [fcoe]
[ 4200.503151]        [&lt;ffffffffa02ffbe8&gt;] store_ctlr_enabled+0x38/0x90 [libfcoe]
[ 4200.503154]        [&lt;ffffffff81424878&gt;] dev_attr_store+0x18/0x30
[ 4200.503157]        [&lt;ffffffff8122b750&gt;] sysfs_write_file+0xe0/0x150
[ 4200.503160]        [&lt;ffffffff811b334c&gt;] vfs_write+0xac/0x180
[ 4200.503162]        [&lt;ffffffff811b3692&gt;] sys_write+0x52/0xa0
[ 4200.503164]        [&lt;ffffffff816d7159&gt;] system_call_fastpath+0x16/0x1b
[ 4200.503167]
-&gt; #0 (s_active#292){++++.+}:
[ 4200.503170]        [&lt;ffffffff810c680f&gt;] __lock_acquire+0x135f/0x1c90
[ 4200.503172]        [&lt;ffffffff810c7711&gt;] lock_acquire+0xa1/0x140
[ 4200.503174]        [&lt;ffffffff8122c626&gt;] sysfs_deactivate+0x116/0x160
[ 4200.503176]        [&lt;ffffffff8122d20b&gt;] sysfs_addrm_finish+0x3b/0x70
[ 4200.503178]        [&lt;ffffffff8122b2eb&gt;] sysfs_hash_and_remove+0x5b/0xb0
[ 4200.503180]        [&lt;ffffffff8122f3d1&gt;] sysfs_remove_group+0x61/0x100
[ 4200.503183]        [&lt;ffffffff814251eb&gt;] device_remove_groups+0x3b/0x60
[ 4200.503185]        [&lt;ffffffff81425534&gt;] device_remove_attrs+0x44/0x80
[ 4200.503187]        [&lt;ffffffff81425e97&gt;] device_del+0x127/0x1c0
[ 4200.503189]        [&lt;ffffffff81425f52&gt;] device_unregister+0x22/0x60
[ 4200.503191]        [&lt;ffffffffa0300970&gt;] fcoe_ctlr_device_delete+0xe0/0xf0 [libfcoe]
[ 4200.503194]        [&lt;ffffffffa02f1b5c&gt;] fcoe_interface_cleanup+0x6c/0xa0 [fcoe]
[ 4200.503196]        [&lt;ffffffffa02f3355&gt;] fcoe_destroy_work+0x105/0x120 [fcoe]
[ 4200.503198]        [&lt;ffffffff8107ee91&gt;] process_one_work+0x1a1/0x580
[ 4200.503203]        [&lt;ffffffff81080c6e&gt;] worker_thread+0x15e/0x440
[ 4200.503205]        [&lt;ffffffff8108715a&gt;] kthread+0xea/0xf0
[ 4200.503207]        [&lt;ffffffff816d70ac&gt;] ret_from_fork+0x7c/0xb0

[ 4200.503209]
other info that might help us debug this:

[ 4200.503211]  Possible unsafe locking scenario:

[ 4200.503212]        CPU0                    CPU1
[ 4200.503213]        ----                    ----
[ 4200.503214]   lock(fcoe_config_mutex);
[ 4200.503215]                                lock(s_active#292);
[ 4200.503218]                                lock(fcoe_config_mutex);
[ 4200.503219]   lock(s_active#292);
[ 4200.503221]
 *** DEADLOCK ***

[ 4200.503223] 3 locks held by kworker/3:2/2492:
[ 4200.503224]  #0:  (fcoe){.+.+.+}, at: [&lt;ffffffff8107ee2b&gt;] process_one_work+0x13b/0x580
[ 4200.503228]  #1:  ((&amp;port-&gt;destroy_work)){+.+.+.}, at: [&lt;ffffffff8107ee2b&gt;] process_one_work+0x13b/0x580
[ 4200.503232]  #2:  (fcoe_config_mutex){+.+.+.}, at: [&lt;ffffffffa02f3338&gt;] fcoe_destroy_work+0xe8/0x120 [fcoe]
[ 4200.503236]
stack backtrace:
[ 4200.503238] Pid: 2492, comm: kworker/3:2 Not tainted 3.8.0-rc5+ #8
[ 4200.503240] Call Trace:
[ 4200.503243]  [&lt;ffffffff816c2f09&gt;] print_circular_bug+0x1fb/0x20c
[ 4200.503246]  [&lt;ffffffff810c680f&gt;] __lock_acquire+0x135f/0x1c90
[ 4200.503248]  [&lt;ffffffff810c463a&gt;] ? debug_check_no_locks_freed+0x9a/0x180
[ 4200.503250]  [&lt;ffffffff810c7711&gt;] lock_acquire+0xa1/0x140
[ 4200.503253]  [&lt;ffffffff8122d20b&gt;] ? sysfs_addrm_finish+0x3b/0x70
[ 4200.503255]  [&lt;ffffffff8122c626&gt;] sysfs_deactivate+0x116/0x160
[ 4200.503258]  [&lt;ffffffff8122d20b&gt;] ? sysfs_addrm_finish+0x3b/0x70
[ 4200.503260]  [&lt;ffffffff8122d20b&gt;] sysfs_addrm_finish+0x3b/0x70
[ 4200.503262]  [&lt;ffffffff8122b2eb&gt;] sysfs_hash_and_remove+0x5b/0xb0
[ 4200.503265]  [&lt;ffffffff8122f3d1&gt;] sysfs_remove_group+0x61/0x100
[ 4200.503273]  [&lt;ffffffff814251eb&gt;] device_remove_groups+0x3b/0x60
[ 4200.503275]  [&lt;ffffffff81425534&gt;] device_remove_attrs+0x44/0x80
[ 4200.503277]  [&lt;ffffffff81425e97&gt;] device_del+0x127/0x1c0
[ 4200.503279]  [&lt;ffffffff81425f52&gt;] device_unregister+0x22/0x60
[ 4200.503282]  [&lt;ffffffffa0300970&gt;] fcoe_ctlr_device_delete+0xe0/0xf0 [libfcoe]
[ 4200.503285]  [&lt;ffffffffa02f1b5c&gt;] fcoe_interface_cleanup+0x6c/0xa0 [fcoe]
[ 4200.503287]  [&lt;ffffffffa02f3355&gt;] fcoe_destroy_work+0x105/0x120 [fcoe]
[ 4200.503290]  [&lt;ffffffff8107ee91&gt;] process_one_work+0x1a1/0x580
[ 4200.503292]  [&lt;ffffffff8107ee2b&gt;] ? process_one_work+0x13b/0x580
[ 4200.503295]  [&lt;ffffffffa02f3250&gt;] ? fcoe_if_destroy+0x230/0x230 [fcoe]
[ 4200.503297]  [&lt;ffffffff81080c6e&gt;] worker_thread+0x15e/0x440
[ 4200.503299]  [&lt;ffffffff81080b10&gt;] ? busy_worker_rebind_fn+0x100/0x100
[ 4200.503301]  [&lt;ffffffff8108715a&gt;] kthread+0xea/0xf0
[ 4200.503304]  [&lt;ffffffff81087070&gt;] ? kthread_create_on_node+0x160/0x160
[ 4200.503306]  [&lt;ffffffff816d70ac&gt;] ret_from_fork+0x7c/0xb0
[ 4200.503308]  [&lt;ffffffff81087070&gt;] ? kthread_create_on_node+0x160/0x160

Signed-off-by: Robert Love &lt;robert.w.love@intel.com&gt;
Tested-by: Jack Morgan &lt;jack.morgan@intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>fcoe: Fix deadlock while deleting FCoE interface with NPIV ports</title>
<updated>2013-01-28T19:36:51+00:00</updated>
<author>
<name>Neerav Parikh</name>
<email>Neerav.Parikh@intel.com</email>
</author>
<published>2013-01-15T23:42:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=94aa743a2af455ee3bd9fc3410dff82f6abf4522'/>
<id>94aa743a2af455ee3bd9fc3410dff82f6abf4522</id>
<content type='text'>
This patch fixes following deadlock caused by destroying of
an FCoE interface with active NPIV ports on that interface.

    Call Trace:
    [&lt;ffffffff814b7e88&gt;] schedule+0x64/0x66
    [&lt;ffffffff814b6b4f&gt;] schedule_timeout+0x36/0xe3
    [&lt;ffffffff81070c55&gt;] ? update_curr+0xd6/0x110
    [&lt;ffffffff81071f6b&gt;] ? hrtick_update+0x1b/0x4d
    [&lt;ffffffff81072405&gt;] ? dequeue_task_fair+0x1ca/0x1d9
    [&lt;ffffffff8106a369&gt;] ? need_resched+0x1e/0x28
    [&lt;ffffffff814b7d14&gt;] wait_for_common+0x9b/0xf1
    [&lt;ffffffff8106e7be&gt;] ? try_to_wake_up+0x1e0/0x1e0
    [&lt;ffffffff814b7e22&gt;] wait_for_completion+0x1d/0x1f
    [&lt;ffffffff8105ae82&gt;] flush_workqueue+0x116/0x2a1
    [&lt;ffffffff8105b357&gt;] drain_workqueue+0x66/0x14c
    [&lt;ffffffff8105b8ef&gt;] destroy_workqueue+0x1a/0xcf
    [&lt;ffffffffa009211e&gt;] fc_remove_host+0x154/0x17f [scsi_transport_fc]
    [&lt;ffffffffa00edbb8&gt;] fcoe_if_destroy+0x184/0x1c9 [fcoe]
    [&lt;ffffffffa00edc28&gt;] fcoe_destroy_work+0x2b/0x44 [fcoe]
    [&lt;ffffffff8105a82a&gt;] process_one_work+0x1a8/0x2a4
    [&lt;ffffffffa00edbfd&gt;] ? fcoe_if_destroy+0x1c9/0x1c9 [fcoe]
    [&lt;ffffffff8105c396&gt;] worker_thread+0x1db/0x268
    [&lt;ffffffff810604a3&gt;] ? wake_up_bit+0x2a/0x2a
    [&lt;ffffffff8105c1bb&gt;] ? manage_workers.clone.16+0x1f6/0x1f6
    [&lt;ffffffff8105ffd6&gt;] kthread+0x6f/0x77
    [&lt;ffffffff814c0304&gt;] kernel_thread_helper+0x4/0x10
    [&lt;ffffffff8105ff67&gt;] ? kthread_freezable_should_stop+0x4b/0x4b

    Call Trace:
    [&lt;ffffffff814b7e88&gt;] schedule+0x64/0x66
    [&lt;ffffffff814b8041&gt;] schedule_preempt_disabled+0xe/0x10
    [&lt;ffffffff814b70a1&gt;] __mutex_lock_common.clone.5+0x117/0x17a
    [&lt;ffffffff814b7117&gt;] __mutex_lock_slowpath+0x13/0x15
    [&lt;ffffffff814b6f76&gt;] mutex_lock+0x23/0x37
    [&lt;ffffffff8125b890&gt;] ? list_del+0x11/0x30
    [&lt;ffffffffa00edc84&gt;] fcoe_vport_destroy+0x43/0x5f [fcoe]
    [&lt;ffffffffa009130a&gt;] fc_vport_terminate+0x48/0x110 [scsi_transport_fc]
    [&lt;ffffffffa00913ef&gt;] fc_vport_sched_delete+0x1d/0x79 [scsi_transport_fc]
    [&lt;ffffffff8105a82a&gt;] process_one_work+0x1a8/0x2a4
    [&lt;ffffffffa00913d2&gt;] ? fc_vport_terminate+0x110/0x110 [scsi_transport_fc]
    [&lt;ffffffff8105c396&gt;] worker_thread+0x1db/0x268
    [&lt;ffffffff8105c1bb&gt;] ? manage_workers.clone.16+0x1f6/0x1f6
    [&lt;ffffffff8105ffd6&gt;] kthread+0x6f/0x77
    [&lt;ffffffff814c0304&gt;] kernel_thread_helper+0x4/0x10
    [&lt;ffffffff8105ff67&gt;] ? kthread_freezable_should_stop+0x4b/0x4b
    [&lt;ffffffff814c0300&gt;] ? gs_change+0x13/0x13

A prior attempt to fix this issue is posted here:
http://lists.open-fcoe.org/pipermail/devel/2012-October/012318.html
or
http://article.gmane.org/gmane.linux.scsi.open-fcoe.devel/11924

Based on feedback and discussion with Neil Horman it seems that the above patch
may have a case where the fcoe_vport_destroy() and fcoe_destroy_work() can
race; hence that patch has been withdrawn with this patch that is trying to
solve the same problem in a different way.

In the current approach instead of removing the fcoe_config_mutex from the
vport_delete callback function; I've chosen to delete all the NPIV ports first
on a given root lport before continuing with the removal of the root lport.

Signed-off-by: Neerav Parikh &lt;Neerav.Parikh@intel.com&gt;
Tested-by: Marcus Dennis &lt;marcusx.e.dennis@intel.com&gt;
Acked-by: Neil Horman &lt;nhorman@tuxdriver.com&gt;
Signed-off-by: Robert Love &lt;robert.w.love@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This patch fixes following deadlock caused by destroying of
an FCoE interface with active NPIV ports on that interface.

    Call Trace:
    [&lt;ffffffff814b7e88&gt;] schedule+0x64/0x66
    [&lt;ffffffff814b6b4f&gt;] schedule_timeout+0x36/0xe3
    [&lt;ffffffff81070c55&gt;] ? update_curr+0xd6/0x110
    [&lt;ffffffff81071f6b&gt;] ? hrtick_update+0x1b/0x4d
    [&lt;ffffffff81072405&gt;] ? dequeue_task_fair+0x1ca/0x1d9
    [&lt;ffffffff8106a369&gt;] ? need_resched+0x1e/0x28
    [&lt;ffffffff814b7d14&gt;] wait_for_common+0x9b/0xf1
    [&lt;ffffffff8106e7be&gt;] ? try_to_wake_up+0x1e0/0x1e0
    [&lt;ffffffff814b7e22&gt;] wait_for_completion+0x1d/0x1f
    [&lt;ffffffff8105ae82&gt;] flush_workqueue+0x116/0x2a1
    [&lt;ffffffff8105b357&gt;] drain_workqueue+0x66/0x14c
    [&lt;ffffffff8105b8ef&gt;] destroy_workqueue+0x1a/0xcf
    [&lt;ffffffffa009211e&gt;] fc_remove_host+0x154/0x17f [scsi_transport_fc]
    [&lt;ffffffffa00edbb8&gt;] fcoe_if_destroy+0x184/0x1c9 [fcoe]
    [&lt;ffffffffa00edc28&gt;] fcoe_destroy_work+0x2b/0x44 [fcoe]
    [&lt;ffffffff8105a82a&gt;] process_one_work+0x1a8/0x2a4
    [&lt;ffffffffa00edbfd&gt;] ? fcoe_if_destroy+0x1c9/0x1c9 [fcoe]
    [&lt;ffffffff8105c396&gt;] worker_thread+0x1db/0x268
    [&lt;ffffffff810604a3&gt;] ? wake_up_bit+0x2a/0x2a
    [&lt;ffffffff8105c1bb&gt;] ? manage_workers.clone.16+0x1f6/0x1f6
    [&lt;ffffffff8105ffd6&gt;] kthread+0x6f/0x77
    [&lt;ffffffff814c0304&gt;] kernel_thread_helper+0x4/0x10
    [&lt;ffffffff8105ff67&gt;] ? kthread_freezable_should_stop+0x4b/0x4b

    Call Trace:
    [&lt;ffffffff814b7e88&gt;] schedule+0x64/0x66
    [&lt;ffffffff814b8041&gt;] schedule_preempt_disabled+0xe/0x10
    [&lt;ffffffff814b70a1&gt;] __mutex_lock_common.clone.5+0x117/0x17a
    [&lt;ffffffff814b7117&gt;] __mutex_lock_slowpath+0x13/0x15
    [&lt;ffffffff814b6f76&gt;] mutex_lock+0x23/0x37
    [&lt;ffffffff8125b890&gt;] ? list_del+0x11/0x30
    [&lt;ffffffffa00edc84&gt;] fcoe_vport_destroy+0x43/0x5f [fcoe]
    [&lt;ffffffffa009130a&gt;] fc_vport_terminate+0x48/0x110 [scsi_transport_fc]
    [&lt;ffffffffa00913ef&gt;] fc_vport_sched_delete+0x1d/0x79 [scsi_transport_fc]
    [&lt;ffffffff8105a82a&gt;] process_one_work+0x1a8/0x2a4
    [&lt;ffffffffa00913d2&gt;] ? fc_vport_terminate+0x110/0x110 [scsi_transport_fc]
    [&lt;ffffffff8105c396&gt;] worker_thread+0x1db/0x268
    [&lt;ffffffff8105c1bb&gt;] ? manage_workers.clone.16+0x1f6/0x1f6
    [&lt;ffffffff8105ffd6&gt;] kthread+0x6f/0x77
    [&lt;ffffffff814c0304&gt;] kernel_thread_helper+0x4/0x10
    [&lt;ffffffff8105ff67&gt;] ? kthread_freezable_should_stop+0x4b/0x4b
    [&lt;ffffffff814c0300&gt;] ? gs_change+0x13/0x13

A prior attempt to fix this issue is posted here:
http://lists.open-fcoe.org/pipermail/devel/2012-October/012318.html
or
http://article.gmane.org/gmane.linux.scsi.open-fcoe.devel/11924

Based on feedback and discussion with Neil Horman it seems that the above patch
may have a case where the fcoe_vport_destroy() and fcoe_destroy_work() can
race; hence that patch has been withdrawn with this patch that is trying to
solve the same problem in a different way.

In the current approach instead of removing the fcoe_config_mutex from the
vport_delete callback function; I've chosen to delete all the NPIV ports first
on a given root lport before continuing with the removal of the root lport.

Signed-off-by: Neerav Parikh &lt;Neerav.Parikh@intel.com&gt;
Tested-by: Marcus Dennis &lt;marcusx.e.dennis@intel.com&gt;
Acked-by: Neil Horman &lt;nhorman@tuxdriver.com&gt;
Signed-off-by: Robert Love &lt;robert.w.love@intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>fcoe: close race on link speed detection in fcoe code</title>
<updated>2013-01-28T19:13:01+00:00</updated>
<author>
<name>Neil Horman</name>
<email>nhorman@tuxdriver.com</email>
</author>
<published>2013-01-15T19:34:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=f9184df3b99375964340c1a78e33f304bbf15f06'/>
<id>f9184df3b99375964340c1a78e33f304bbf15f06</id>
<content type='text'>
When creating an fcoe interfce, we call fcoe_link_speed_update before we add the
lports fcoe interface to the fc_hostlist.  Since network device events like
NETDEV_CHANGE are only processed if an fcoe interface is found with an
underlying netdev that matches the netdev of the event.  Since this processing
in fcoe_device_notification is how link_speed changes get communicated to the
libfc  code (via fcoe_link_speed_update), we have a race condition - if a
NETDEV_CHANGE event is sent after the call to fcoe_link_speed_update in
fcoe_netdev_config, but before we add the interface to the fc_hostlist, we will
loose the event and attributes like /sys/class/fc_host/hostX/speed will not get
updated properly.

Fix this by moving the add to the fc_hostlist above the serialized call to
fcoe_netdev_config, ensuring that we catch netdev envents before we make a
direct call to fcoe_link_speed_update.

Also use this opportunity to clean up access to the fc_hostlist a bit by
creating a fcoe_hostlist_del accessor and replacing the cleanup in fcoe_exit to
use it properly.

Tested by myself successfully

[ Comment over 80 chars broken into multi-line by Robert Love to
  satisfy checkpatch.pl ]

Signed-off-by: Neil Horman &lt;nhorman@tuxdriver.com&gt;
Reviewed-by: Yi Zou &lt;yi.zou@intel.com&gt;
Signed-off-by: Robert Love &lt;robert.w.love@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When creating an fcoe interfce, we call fcoe_link_speed_update before we add the
lports fcoe interface to the fc_hostlist.  Since network device events like
NETDEV_CHANGE are only processed if an fcoe interface is found with an
underlying netdev that matches the netdev of the event.  Since this processing
in fcoe_device_notification is how link_speed changes get communicated to the
libfc  code (via fcoe_link_speed_update), we have a race condition - if a
NETDEV_CHANGE event is sent after the call to fcoe_link_speed_update in
fcoe_netdev_config, but before we add the interface to the fc_hostlist, we will
loose the event and attributes like /sys/class/fc_host/hostX/speed will not get
updated properly.

Fix this by moving the add to the fc_hostlist above the serialized call to
fcoe_netdev_config, ensuring that we catch netdev envents before we make a
direct call to fcoe_link_speed_update.

Also use this opportunity to clean up access to the fc_hostlist a bit by
creating a fcoe_hostlist_del accessor and replacing the cleanup in fcoe_exit to
use it properly.

Tested by myself successfully

[ Comment over 80 chars broken into multi-line by Robert Love to
  satisfy checkpatch.pl ]

Signed-off-by: Neil Horman &lt;nhorman@tuxdriver.com&gt;
Reviewed-by: Yi Zou &lt;yi.zou@intel.com&gt;
Signed-off-by: Robert Love &lt;robert.w.love@intel.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>libfcoe, fcoe: consolidate the fcoe_ctlr_get_lesb/fcoe_get_lesb</title>
<updated>2012-12-14T18:38:55+00:00</updated>
<author>
<name>Yi Zou</name>
<email>yi.zou@intel.com</email>
</author>
<published>2012-12-06T06:24:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=57c2728fa806aff08703e5739620454d723bc865'/>
<id>57c2728fa806aff08703e5739620454d723bc865</id>
<content type='text'>
Similarly they can be moved into libfcoe instead of being private to fcoe now.
Also add comments particularly on the term LESB to the corresponding function.

Signed-off-by: Yi Zou &lt;yi.zou@intel.com&gt;
Cc: Bhanu Prakash Gollapudi &lt;bprakash@broadcom.com&gt;
Tested-by: Marcus Dennis &lt;marcusx.e.dennis@intel.com&gt;
Signed-off-by: Robert Love &lt;robert.w.love@intel.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Similarly they can be moved into libfcoe instead of being private to fcoe now.
Also add comments particularly on the term LESB to the corresponding function.

Signed-off-by: Yi Zou &lt;yi.zou@intel.com&gt;
Cc: Bhanu Prakash Gollapudi &lt;bprakash@broadcom.com&gt;
Tested-by: Marcus Dennis &lt;marcusx.e.dennis@intel.com&gt;
Signed-off-by: Robert Love &lt;robert.w.love@intel.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
