summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2017-02-09Merge remote-tracking branch 'iommu/next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'tpmdd/next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'selinux/next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'keys/keys-next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'security/next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'regulator/for-next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'battery/for-next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'backlight/for-backlight-next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'mfd/for-mfd-next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'md/for-next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'kgdb/kgdb-next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'mmc/next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'block/for-next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'input/next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'modules/modules-next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'sound-asoc/for-next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'sound/for-next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'regmap/for-next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'kspp/for-next/kspp'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'sunxi/sunxi/for-next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'drm-misc/for-linux-next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'drm-tegra/drm/tegra/for-next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'drm-intel/for-linux-next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'drm-panel/drm/panel/for-next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'drm/drm-next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'crypto/master'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'spi-nor/next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'nand/nand/next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'rdma-leon/rdma-next'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'rdma/for-next'Stephen Rothwell
Updates for 4.11 kernel merge window - rxe driver updates - ioctl cleanups - ETH_P_IBOE declaration cleanup - IPoIB changes - Add port state cache - Allow srpt driver to accept guids as port names in config - Lots of misc. minor changes all over # gpg: Signature made Sat 28 Jan 2017 06:44:08 AEDT # gpg: using RSA key B826A3330E572FDD # gpg: Can't check signature: No public key
2017-02-09Merge remote-tracking branch 'mac80211-next/master'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'wireless-drivers-next/master'Stephen Rothwell
2017-02-09Merge remote-tracking branch 'netfilter-next/master'Stephen Rothwell
2017-02-08target: Avoid that XCOPY commands trigger a deadlockBart Van Assche
Move the target_depend_item() call out of the critical section. This patch avoids that lockdep reports the following: ====================================================== [ INFO: possible circular locking dependency detected ] 4.10.0-rc4-debug+ #1 Not tainted ------------------------------------------------------- rmdir/1799 is trying to acquire lock: (&sess->cmdsn_mutex){+.+.+.}, at: [<ffffffffa02dc45d>] iscsit_free_all_ooo_cmdsns+0x2d/0xb0 [iscsi_target_mod] but task is already holding lock: (&sb->s_type->i_mutex_key#15){++++++}, at: [<ffffffff811c58c0>] vfs_rmdir+0x50/0x140 which lock already depends on the new lock. the existing dependency chain (in reverse order) is: -> #2 (&sb->s_type->i_mutex_key#15){++++++}: [<ffffffff810b4731>] lock_acquire+0x71/0x90 [<ffffffff8167eacf>] down_write+0x3f/0x70 [<ffffffffa025315a>] configfs_depend_item+0x3a/0xb0 [configfs] [<ffffffffa0264053>] target_depend_item+0x13/0x20 [target_core_mod] [<ffffffffa02891db>] target_xcopy_locate_se_dev_e4+0xdb/0x1a0 [target_core_mod] [<ffffffffa0289e6c>] target_do_xcopy+0x31c/0x8b0 [target_core_mod] [<ffffffffa027d9a2>] __target_execute_cmd+0x22/0xa0 [target_core_mod] [<ffffffffa027e409>] target_execute_cmd.part.20+0x1e9/0x290 [target_core_mod] [<ffffffffa027e4c3>] target_execute_cmd+0x13/0x20 [target_core_mod] [<ffffffffa02dc2d2>] iscsit_execute_cmd+0x1d2/0x230 [iscsi_target_mod] [<ffffffffa02e4acb>] iscsit_sequence_cmd+0x10b/0x190 [iscsi_target_mod] [<ffffffffa02eb01d>] iscsit_get_rx_pdu+0x37d/0xcd0 [iscsi_target_mod] [<ffffffffa02ec93e>] iscsi_target_rx_thread+0x6e/0xa0 [iscsi_target_mod] [<ffffffff810828c2>] kthread+0x102/0x140 [<ffffffff81681b21>] ret_from_fork+0x31/0x40 -> #1 (g_device_mutex){+.+...}: [<ffffffff810b4731>] lock_acquire+0x71/0x90 [<ffffffff8167c49f>] mutex_lock_nested+0x5f/0x670 [<ffffffffa0289123>] target_xcopy_locate_se_dev_e4+0x23/0x1a0 [target_core_mod] [<ffffffffa0289e6c>] target_do_xcopy+0x31c/0x8b0 [target_core_mod] [<ffffffffa027d9a2>] __target_execute_cmd+0x22/0xa0 [target_core_mod] [<ffffffffa027e409>] target_execute_cmd.part.20+0x1e9/0x290 [target_core_mod] [<ffffffffa027e4c3>] target_execute_cmd+0x13/0x20 [target_core_mod] [<ffffffffa02dc2d2>] iscsit_execute_cmd+0x1d2/0x230 [iscsi_target_mod] [<ffffffffa02e4acb>] iscsit_sequence_cmd+0x10b/0x190 [iscsi_target_mod] [<ffffffffa02eb01d>] iscsit_get_rx_pdu+0x37d/0xcd0 [iscsi_target_mod] [<ffffffffa02ec93e>] iscsi_target_rx_thread+0x6e/0xa0 [iscsi_target_mod] [<ffffffff810828c2>] kthread+0x102/0x140 [<ffffffff81681b21>] ret_from_fork+0x31/0x40 -> #0 (&sess->cmdsn_mutex){+.+.+.}: [<ffffffff810b41e6>] __lock_acquire+0x10e6/0x1260 [<ffffffff810b4731>] lock_acquire+0x71/0x90 [<ffffffff8167c49f>] mutex_lock_nested+0x5f/0x670 [<ffffffffa02dc45d>] iscsit_free_all_ooo_cmdsns+0x2d/0xb0 [iscsi_target_mod] [<ffffffffa02ecc8c>] iscsit_close_session+0xac/0x200 [iscsi_target_mod] [<ffffffffa02f27af>] lio_tpg_close_session+0x9f/0xb0 [iscsi_target_mod] [<ffffffffa02796f3>] target_shutdown_sessions+0xc3/0xd0 [target_core_mod] [<ffffffffa0279cf1>] core_tpg_del_initiator_node_acl+0x91/0x140 [target_core_mod] [<ffffffffa026c8c0>] target_fabric_nacl_base_release+0x20/0x30 [target_core_mod] [<ffffffffa02560ca>] config_item_release+0x5a/0xc0 [configfs] [<ffffffffa025614d>] config_item_put+0x1d/0x1f [configfs] [<ffffffffa02544d6>] configfs_rmdir+0x1a6/0x300 [configfs] [<ffffffff811c5927>] vfs_rmdir+0xb7/0x140 [<ffffffff811cb404>] do_rmdir+0x1f4/0x200 [<ffffffff811cc131>] SyS_rmdir+0x11/0x20 [<ffffffff81681885>] entry_SYSCALL_64_fastpath+0x23/0xc6 other info that might help us debug this: Chain exists of: &sess->cmdsn_mutex --> g_device_mutex --> &sb->s_type->i_mutex_key#15 Possible unsafe locking scenario: CPU0 CPU1 ---- ---- lock(&sb->s_type->i_mutex_key#15); lock(g_device_mutex); lock(&sb->s_type->i_mutex_key#15); lock(&sess->cmdsn_mutex); *** DEADLOCK *** 3 locks held by rmdir/1799: #0: (sb_writers#10){.+.+.+}, at: [<ffffffff811e059f>] mnt_want_write+0x1f/0x50 #1: (&default_group_class[depth - 1]#2/1){+.+.+.}, at: [<ffffffff811cb36e>] do_rmdir+0x15e/0x200 #2: (&sb->s_type->i_mutex_key#15){++++++}, at: [<ffffffff811c58c0>] vfs_rmdir+0x50/0x140 stack backtrace: CPU: 1 PID: 1799 Comm: rmdir Not tainted 4.10.0-rc4-debug+ #1 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.9.1-0-gb3ef39f-prebuilt.qemu-project.org 04/01/2014 Call Trace: dump_stack+0x86/0xc3 print_circular_bug+0x1c7/0x220 __lock_acquire+0x10e6/0x1260 lock_acquire+0x71/0x90 mutex_lock_nested+0x5f/0x670 iscsit_free_all_ooo_cmdsns+0x2d/0xb0 [iscsi_target_mod] iscsit_close_session+0xac/0x200 [iscsi_target_mod] lio_tpg_close_session+0x9f/0xb0 [iscsi_target_mod] target_shutdown_sessions+0xc3/0xd0 [target_core_mod] core_tpg_del_initiator_node_acl+0x91/0x140 [target_core_mod] target_fabric_nacl_base_release+0x20/0x30 [target_core_mod] config_item_release+0x5a/0xc0 [configfs] config_item_put+0x1d/0x1f [configfs] configfs_rmdir+0x1a6/0x300 [configfs] vfs_rmdir+0xb7/0x140 do_rmdir+0x1f4/0x200 SyS_rmdir+0x11/0x20 entry_SYSCALL_64_fastpath+0x23/0xc6 Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Cc: Hannes Reinecke <hare@suse.com> Cc: David Disseldorp <ddiss@suse.de>
2017-02-08target: Introduce target_get_device() and target_put_device()Bart Van Assche
These new functions will be used by the next patch in this series. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Cc: Hannes Reinecke <hare@suse.com> Cc: Christoph Hellwig <hch@lst.de> Cc: David Disseldorp <ddiss@suse.de>
2017-02-08configfs: Introduce config_item_get_unless_zero()Bart Van Assche
Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Cc: Christoph Hellwig <hch@lst.de>
2017-02-08target: Move target_remove_from_state_list() into target_release_cmd_kref()Bart Van Assche
The only code that iterates over the state list is the LUN reset code. Deferring removal from the state list is fine since that code grabs a reference to the command before it does any other processing. Leaving out the se_cmd.state_active test is fine because this test is already performed by target_remove_from_state_list(). Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Andy Grover <agrover@redhat.com> Cc: David Disseldorp <ddiss@suse.de>
2017-02-08target: Inline transport_lun_remove_cmd()Bart Van Assche
Remove the code that clears .se_lun from transport_cmd_check_stop_to_fabric() such that the transport_lun_remove_cmd() call can be moved into target_release_cmd_kref(). Because this guarantees that transport_lun_remove_cmd() will be called exactly once, it is safe to change the cmpxchg() call into a test of se_cmd.lun_ref_active. Inline transport_lun_remove_cmd() because it is not worth to keep it as a separate function. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Andy Grover <agrover@redhat.com> Cc: David Disseldorp <ddiss@suse.de>
2017-02-08target: Inline transport_put_cmd()Bart Van Assche
The transport_put_cmd() function consists of two lines of code. Due to previous patches only two callers are left. Hence inline this function. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Andy Grover <agrover@redhat.com> Cc: David Disseldorp <ddiss@suse.de>
2017-02-08target: Change return type of transport_wait_for_tasks() into voidBart Van Assche
None of the callers of this function uses the returned value. Hence change the return type into void. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Andy Grover <agrover@redhat.com> Cc: David Disseldorp <ddiss@suse.de>
2017-02-08target: Remove unused arguments from __target_check_io_state()Bart Van Assche
Remove the arguments that are no longer needed due to the previous patch. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Andy Grover <agrover@redhat.com> Cc: David Disseldorp <ddiss@suse.de>
2017-02-08target: Remove command flag CMD_T_TASBart Van Assche
The code that tests this flag has been removed by the previous patch. Hence also remove the flag itself. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Cc: Nicholas A. Bellinger <nab@linux-iscsi.org> Cc: Christoph Hellwig <hch@lst.de> Cc: David Disseldorp <ddiss@suse.de>
2017-02-08target: Reduce number of __transport_wait_for_tasks() argumentsBart Van Assche
The *aborted and *tas variables are set by __transport_wait_for_tasks() but the value that is set is ignored by all callers due to previous patches. Hence remove the code that sets these variables. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Cc: Nicholas A. Bellinger <nab@linux-iscsi.org> Cc: Christoph Hellwig <hch@lst.de> Cc: David Disseldorp <ddiss@suse.de>
2017-02-08target: Remove command flag CMD_T_DEV_ACTIVEBart Van Assche
The code that tests the CMD_T_DEV_ACTIVE flag has been removed. Hence also remove the flag itself. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Andy Grover <agrover@redhat.com> Reviewed-by: Sagi Grimberg <sagig@mellanox.com> Reviewed-by: Hannes Reinecke <hare@suse.com>
2017-02-08target: Simplify LUN RESET implementationBart Van Assche
Due to the task management handling rework it is safe to wait for a TMF that is not in the active state. Hence remove the CMD_T_ACTIVE test from core_tmr_drain_tmr_list(). Additionally, call __target_check_io_state() instead of open coding it. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Andy Grover <agrover@redhat.com> Cc: David Disseldorp <ddiss@suse.de>
2017-02-08target: Remove command flag CMD_T_BUSYBart Van Assche
The patch that reworks task management function handling guarantees that target_remove_from_state_list() is always called with CMD_T_BUSY cleared. Since that function is the only function that tests that flag this means that that flag is now superfluous. Hence remove that flag. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Reviewed-by: Andy Grover <agrover@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Sagi Grimberg <sagig@mellanox.com> Reviewed-by: Hannes Reinecke <hare@suse.com>
2017-02-08target: Remove several state tests from TMF codeBart Van Assche
Whether or not a session is being torn down does not affect whether or not SCSI commands are in the task set. Hence remove the "tearing down" checks from the TMF code. The CMD_T_FABRIC_STOP test is left out because it overlaps with the CMD_T_COMPLETE and kref tests. The TRANSPORT_ISTATE_PROCESSING check is left out because it is now safe to wait for a command that is in that state. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Andy Grover <agrover@redhat.com> Cc: David Disseldorp <ddiss@suse.de>
2017-02-08target: Remove the write_pending_status() callback functionBart Van Assche
Due to the previous patch the write_pending_status() callback function is no longer called. Hence remove it. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Acked-by: Felipe Balbi <balbi@ti.com> Reviewed-by: Sagi Grimberg <sagig@mellanox.com> Reviewed-by: Andy Grover <agrover@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Hannes Reinecke <hare@suse.com> Reviewed-by: Bryant G. Ly <bryantly@linux.vnet.ibm.com> Cc: Himanshu Madhani <himanshu.madhani@qlogic.com> Cc: Quinn Tran <quinn.tran@qlogic.com> Cc: Saurav Kashyap <saurav.kashyap@qlogic.com> Cc: Michael S. Tsirkin <mst@redhat.com> Cc: Juergen Gross <jgross@suse.com>
2017-02-08target: Inline transport_check_aborted_status()Bart Van Assche
Due to the previous patch the second argument of transport_check_aborted_status() is ignored and that function does no longer have any side effect. Hence remove all calls of that function that do not check the return value. Additionally, inline this function. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Sagi Grimberg <sagig@mellanox.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Cc: Andy Grover <agrover@redhat.com>
2017-02-08target: Remove the SCF_SEND_DELAYED_TAS command flagBart Van Assche
The previous patch removed the code that sets this flag. Hence also remove the code that tests this flag and the flag itself. Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com> Reviewed-by: Andy Grover <agrover@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Sagi Grimberg <sagig@mellanox.com>