commit 1f953b0dbc2549318afcc0a70af5542dffbce34a
Author: Bhanu Prakash Gollapudi
Date: Mon Jan 28 11:43:03 2013 -0800
libfcoe: Check for unusable FCFs before looking for conflicting FCFs
When there are multiple FCFs in the fabric, and one of them becomes
unavailable, the fabric name for the unavailable FCF becomes 0 along
with FIP_FL_AVAIL getting reset. In this case, FCF selection logic does
not select any FCF as it first checks for conflicting FCFs (since fabric
name is 0, it fails the condition), instead of first checking if it is
usable or not. Fix it by first checking if FCF is usable and skip that
FCF, and go to the next one in the list to check if it can be selected.
Signed-off-by: Bhanu Prakash Gollapudi
Signed-off-by: Robert Love
commit a586069b0f56a700d6f6249a64cbc313dd4a97e0
Author: Krishna Mohan
Date: Wed Feb 13 16:33:04 2013 -0800
libfc: XenServer fails to mount root filesystem.
schedule_delayed_work() is using msec instead of jiffies. On PLOGI
reject from target, remote port retry is scheduled @ 20 sec instead
of 2sec(FC_DEF_E_D_TOV).
XenServer dom0 kernel is configured with CONFIG_HZ=100Hz
Signed-off-by: Krishna Mohan
Signed-off-by: Robert Love
commit b2593cbe18c4f50c9acacd88860b051f567654d7
Author: Bhanu Prakash Gollapudi
Date: Mon Feb 4 23:00:20 2013 -0800
libfcoe: Handle CVL while waiting to select an FCF
When a CVL is received while we wait to select best FCF, we drop it
without handling it. This causes initiator and the switch to go
out-of-sync. Initiator proceeds selecting one of the FCFs and tries to
send FIP FLOGI. However the switch may reject the FLOGI, as it has
cleared its internal state, and expects the initiator to start FIP
discovery protocol. Fix this condition by resetting the fcoe
controller.
Signed-off-by: Bhanu Prakash Gollapudi
Reviewed-by: Yi Zou
Signed-off-by: Robert Love
commit 94aa743a2af455ee3bd9fc3410dff82f6abf4522
Author: Neerav Parikh
Date: Tue Jan 15 15:42:38 2013 -0800
fcoe: Fix deadlock while deleting FCoE interface with NPIV ports
This patch fixes following deadlock caused by destroying of
an FCoE interface with active NPIV ports on that interface.
Call Trace:
[] schedule+0x64/0x66
[] schedule_timeout+0x36/0xe3
[] ? update_curr+0xd6/0x110
[] ? hrtick_update+0x1b/0x4d
[] ? dequeue_task_fair+0x1ca/0x1d9
[] ? need_resched+0x1e/0x28
[] wait_for_common+0x9b/0xf1
[] ? try_to_wake_up+0x1e0/0x1e0
[] wait_for_completion+0x1d/0x1f
[] flush_workqueue+0x116/0x2a1
[] drain_workqueue+0x66/0x14c
[] destroy_workqueue+0x1a/0xcf
[] fc_remove_host+0x154/0x17f [scsi_transport_fc]
[] fcoe_if_destroy+0x184/0x1c9 [fcoe]
[] fcoe_destroy_work+0x2b/0x44 [fcoe]
[] process_one_work+0x1a8/0x2a4
[] ? fcoe_if_destroy+0x1c9/0x1c9 [fcoe]
[] worker_thread+0x1db/0x268
[] ? wake_up_bit+0x2a/0x2a
[] ? manage_workers.clone.16+0x1f6/0x1f6
[] kthread+0x6f/0x77
[] kernel_thread_helper+0x4/0x10
[] ? kthread_freezable_should_stop+0x4b/0x4b
Call Trace:
[] schedule+0x64/0x66
[] schedule_preempt_disabled+0xe/0x10
[] __mutex_lock_common.clone.5+0x117/0x17a
[] __mutex_lock_slowpath+0x13/0x15
[] mutex_lock+0x23/0x37
[] ? list_del+0x11/0x30
[] fcoe_vport_destroy+0x43/0x5f [fcoe]
[] fc_vport_terminate+0x48/0x110 [scsi_transport_fc]
[] fc_vport_sched_delete+0x1d/0x79 [scsi_transport_fc]
[] process_one_work+0x1a8/0x2a4
[] ? fc_vport_terminate+0x110/0x110 [scsi_transport_fc]
[] worker_thread+0x1db/0x268
[] ? manage_workers.clone.16+0x1f6/0x1f6
[] kthread+0x6f/0x77
[] kernel_thread_helper+0x4/0x10
[] ? kthread_freezable_should_stop+0x4b/0x4b
[] ? 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
Tested-by: Marcus Dennis
Acked-by: Neil Horman
Signed-off-by: Robert Love
commit f9184df3b99375964340c1a78e33f304bbf15f06
Author: Neil Horman
Date: Tue Jan 15 14:34:40 2013 -0500
fcoe: close race on link speed detection in fcoe code
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
Reviewed-by: Yi Zou
Signed-off-by: Robert Love
commit cf02820041668b14cbfa0fbd2bab45ac79bd6174
Author: David Howells
Date: Wed Dec 19 16:07:25 2012 +0000
UAPI: (Scripted) Disintegrate include/scsi/fc
Signed-off-by: David Howells
Acked-by: Arnd Bergmann
Acked-by: Thomas Gleixner
Acked-by: Michael Kerrisk
Acked-by: Paul E. McKenney
Acked-by: Dave Jones
commit 4f670ff8eb4cb3e9e6ae0c0c6976faa0a4503751
Author: Al Viro
Date: Fri Dec 7 14:10:14 2012 +0000
debris left by "[SCSI] libfcoe: Remove mutex_trylock/restart_syscall checks"
AFAICS, the situation for fcoe_transport_disable() seems to be
the same as for fcoe_transport_enable(). IOW, shouldn't it have
restart_syscall() removed as well? I don't see any in-tree ->disable()
instances that could return -ERESTARTSYS, anyway...
Signed-off-by: Al Viro
Signed-off-by: Robert Love
commit b8b3e697d15165090583bed850879b1f3b250db0
Author: Yi Zou
Date: Thu Dec 6 06:24:59 2012 +0000
bnx2fc: use fcoe_get_lesb/fcoe_ctlr_get_lesb() directly from libfcoe
Drop the bnx2fc_xxx versions as they are basically the same.
Signed-off-by: Yi Zou
Cc: Bhanu Prakash Gollapudi
Tested-by: Marcus Dennis
Signed-off-by: Robert Love
commit 0e0f9cd6a80dc883dab4c82c17edc1abe485cbd9
Author: Yi Zou
Date: Thu Dec 6 06:24:44 2012 +0000
bnx2fc: use fcoe_link_speed_update() from the exported symbol in libfcoe
We have fcoe_link_speed_update() in libfcoe ready for use now, take out the
bnx2fc version which is almost the same.
Signed-off-by: Yi Zou
Cc: Bhanu Prakash Gollapudi
Tested-by: Marcus Dennis
Signed-off-by: Robert Love
commit c3d7909b865274ffa74fa2715c6663caa51a80e1
Author: Yi Zou
Date: Thu Dec 6 06:24:29 2012 +0000
bnx2fc: add support to get_netdev for bnx2f_interface
Adds support to fcoe_port's newly added get_netdev fucntion pointer for bnx2fc.
Signed-off-by: Yi Zou
Cc: Bhanu Prakash Gollapudi
Tested-by: Marcus Dennis
Signed-off-by: Robert Love
commit 57c2728fa806aff08703e5739620454d723bc865
Author: Yi Zou
Date: Thu Dec 6 06:24:13 2012 +0000
libfcoe, fcoe: consolidate the fcoe_ctlr_get_lesb/fcoe_get_lesb
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
Cc: Bhanu Prakash Gollapudi
Tested-by: Marcus Dennis
Signed-off-by: Robert Love
commit 03702689fcc985e9cb45b57099ebd5066f674739
Author: Yi Zou
Date: Thu Dec 6 06:23:58 2012 +0000
libfcoe, fcoe: move fcoe_link_speed_update() to libfcoe and export it
With the previous patch, fcoe_link_speed_update() can be moved into libfcoe and
exported to used by fcoe, bnx2fc, and etc.
Signed-off-by: Yi Zou
Cc: Bhanu Prakash Gollapudi
Tested-by: Marcus Dennis
Signed-off-by: Robert Love
commit 66524ec9d0aeaa8bc59077c7c5f78d09ec9eeb9d
Author: Yi Zou
Date: Thu Dec 6 06:23:43 2012 +0000
fcoe: add support to the get_netdev() for fcoe_interface
Adds support to fcoe_port's newly added get_netdev fucntion pointer.
Signed-off-by: Yi Zou
Cc: Bhanu Prakash Gollapudi
Tested-by: Marcus Dennis
Signed-off-by: Robert Love
commit 8106fb4790c33547a034db53f7658bccd3cfbf6b
Author: Yi Zou
Date: Thu Dec 6 06:23:27 2012 +0000
fcoe: prep work to start consolidate the usage of fcoe_netdev
Currently, in the default kernel fcoe driver, it is needed to get to the underlying
private per fcoe transport's private structure, e.g., fcoe_interface in
fcoe.ko, and returns the associated netdev. The similar logic exists in other
fcoe drivers, e.g., bnx2fc, so we add a function pointer into the common
fcoe_port struct to allow individual fcoe transport implementaion (fcoe
and bnx2fc) to get the corresponding netdev associated with a give lport.
Then a inline fcoe_get_netdev() is added as part of libfcoe for all underlying
fcoe transport drivers to use regardless of its individual fcoe transport
driver, and also allows move more common code such as fcoe_link_speed_update or
fcoe_ctlr_get_lesb to be in libfcoe, rather than specific to fcoe.
This patch is a prep work that adds aforementioned fucntion pointer, and
followed by the actual code changes to make use of it.
Signed-off-by: Yi Zou
Cc: Bhanu Prakash Gollapudi
Tested-by: Marcus Dennis
Signed-off-by: Robert Love
commit 8e6c5363dc52afbc60011c2c079bf4c4d26b1272
Author: Robert Love
Date: Tue Dec 4 02:14:53 2012 +0000
libfc, libfcoe, fcoe: Convert debug_logging macros to pr_info
Convert libfc, libfcoe and fcoe's debug_logging macros
to use pr_info() instead of printk(KERN_INFO, ...). checkpatch.pl
now complains about this, so convert libfcoe to preferred
method.
Signed-off-by: Robert Love
Tested-by: Marcus Dennis
commit 6e89ea3f1032d5c762f1ae9b0bd2039794596813
Author: Robert Love
Date: Tue Nov 27 06:53:40 2012 +0000
bnx2fc: Use the fcoe_sysfs control interface
This patch adds support for the new fcoe_sysfs
control interface to bnx2fc.ko. It keeps the deprecated
interface in tact and therefore either the legacy
or the new control interfaces can be used. A mixed mode
is not supported. A user must either use the new
interfaces or the old ones, but not both.
The fcoe_ctlr's link state is now driven by both the
netdev link state as well as the fcoe_ctlr_device's
enabled attribute. The link must be up and the
fcoe_ctlr_device must be enabled before the FCoE
Controller starts discovery or login.
Signed-off-by: Robert Love
Acked-by: Neil Horman
commit 435c86679a24ead623c8a47ca31038e250a75e05
Author: Robert Love
Date: Tue Nov 27 06:53:35 2012 +0000
fcoe: Use the fcoe_sysfs control interface
This patch adds support for the new fcoe_sysfs
control interface to fcoe.ko. It keeps the deprecated
interface in tact and therefore either the legacy
or the new control interfaces can be used. A mixed mode
is not supported. A user must either use the new
interfaces or the old ones, but not both.
The fcoe_ctlr's link state is now driven by both the
netdev link state as well as the fcoe_ctlr_device's
enabled attribute. The link must be up and the
fcoe_ctlr_device must be enabled before the FCoE
Controller starts discovery or login.
Signed-off-by: Robert Love
Acked-by: Neil Horman
commit 6a891b071b640e1de44c4a5117fa2c974dcfa84a
Author: Robert Love
Date: Tue Nov 27 06:53:30 2012 +0000
libfcoe, fcoe, bnx2fc: Add new fcoe control interface
This patch does a few things.
1) Makes /sys/bus/fcoe/ctlr_{create,destroy} interfaces.
These interfaces take an and will either
create an FCoE Controller or destroy an FCoE
Controller depending on which file is written to.
The new FCoE Controller will start in a DISABLED
state and will not do discovery or login until it
is ENABLED. This pause will allow us to configure
the FCoE Controller before enabling it.
2) Makes the 'mode' attribute of a fcoe_ctlr_device
writale. This allows the user to configure the mode
in which the FCoE Controller will start in when it
is ENABLED.
Possible modes are 'Fabric', or 'VN2VN'.
The default mode for a fcoe_ctlr{,_device} is 'Fabric'.
Drivers must implement the set_fcoe_ctlr_mode routine
to support this feature.
libfcoe offers an exported routine to set a FCoE
Controller's mode. The mode can only be changed
when the FCoE Controller is DISABLED.
This patch also removes the get_fcoe_ctlr_mode pointer
in the fcoe_sysfs function template, the code in
fcoe_ctlr.c to get the mode and the assignment of
the fcoe_sysfs function pointer to the fcoe_ctlr.c
implementation (in fcoe and bnx2fc). fcoe_sysfs can
return that value for the mode without consulting the
LLD.
3) Make a 'enabled' attribute of a fcoe_ctlr_device. On a
read, fcoe_sysfs will return the attribute's value. On
a write, fcoe_sysfs will call the LLD (if there is a
callback) to notifiy that the enalbed state has changed.
This patch maintains the old FCoE control interfaces as
module parameters, but it adds comments pointing out that
the old interfaces are deprecated.
Signed-off-by: Robert Love
Acked-by: Neil Horman
commit 3993de6183885a099163b9562a2ea9c07b994a0e
Author: Robert Love
Date: Tue Nov 27 06:53:24 2012 +0000
libfcoe: Add fcoe_sysfs debug logging level
Add a macro to print fcoe_sysfs debug statements.
Signed-off-by: Robert Love
Acked-by: Neil Horman
commit ef60f674344cdb6d1da199f6b8d7d7016813cc6f
Author: Robert Love
Date: Tue Nov 27 06:53:19 2012 +0000
libfcoe: Save some memory and optimize name lookups
Instead of creating a structure with an enum and a pointer
to a string, simply allocate an array of strings and use
the enum values for the indicies.
This means that we do not need to iterate through the list
of entries when looking up a string name by its enum key.
This will also help with a latter patch that will add
more fcoe_sysfs attributes that will also use the
fcoe_enum_name_search macro. One attribute will also do
a reverse lookup which requires less code when the
enum-to-string mappings are organized as this patch makes
them to be.
Signed-off-by: Robert Love
Acked-by: Neil Horman
commit 354d1123c16942b8a3ca9131b8fc2f8c06e2ed7f
Author: Robert Love
Date: Tue Oct 30 01:55:46 2012 +0000
Documentation: Add missing devices/ to devices path
Add missing 'devices/ subdirectory to /sys/bus/fcoe/devices/ctlr_X
and /sys/bus/fcoe/devices/fcf_X references.
Signed-off-by: Robert Love
Tested-by: Ross Brattain
commit 5b97fabdc815b4b60bac2328b58c5c7274debf58
Author: Vasu Dev
Date: Tue Oct 9 01:43:24 2012 +0000
libfc: fix REC handling
Currently fc_fcp_timeout doesn't check FC_RP_FLAGS_REC_SUPPORTED
flag first, this prevents REC request ever going out at all
to the target having REC support. So this patches fixes the
fc_fcp_timeout by checking FC_RP_FLAGS_REC_SUPPORTED flag first.
The changed order won't cause any issue during clearing
FC_RP_FLAGS_REC_SUPPORTED on failed IO with target not supporting
FC_RP_FLAGS_REC_SUPPORTED, since retry on failed IO would succeed.
Signed-off-by: Vasu Dev
Tested-by: Ross Brattain
Signed-off-by: Robert Love