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