tcm: Convert struct se_device->dev_status_lock to spin_*lock_irq()
Subsystems (2)
PATCH 5/6 tcm: Convert struct se_device->dev_status_lock to spin_*lock_irq()
From: Nicholas Bellinger <[email protected]>
This patch converts the lock/unlock usage of struct se_device->dev_status_lock to use spin_*lock_irq() instead of spin_*lock_bh() so that drivers/target/target_core_device.c:se_dev_check_online() from __transport_get_lun_for_cmd() in interrupt context.
This includes converting se_dev_check_online(), se_dev_check_shutdown() and the main check in transport_processing_thread().
Signed-off-by Nicholas A. Bellinger <[email protected]>
--- drivers/target/target_core_device.c | 40 +++---------------------------- drivers/target/target_core_transport.c | 6 ++-- include/target/target_core_device.h | 1 - 3 files changed, 7 insertions(+), 40 deletions(-)
drivers/target/target_core_device.c +4 -36
@@ -155,38 +155,6 @@ int linux_blockdevice_check(int major, int minor) }EXPORT_SYMBOL (linux_blockdevice_check); -/* se_disable_devices_for_hba(): -* -* -*/ -void se_disable_devices_for_hba (struct se_hba *hba) -{ -struct se_device *dev; - -spin_lock (&hba->device_lock); -list_for_each_entry (dev, &hba->hba_dev_list, dev_list) { - -spin_lock (&dev->dev_status_lock); -if ((dev->dev_status &TRANSPORT_DEVICE_ACTIVATED ) || - (dev->dev_status &TRANSPORT_DEVICE_DEACTIVATED ) || - (dev->dev_status &TRANSPORT_DEVICE_OFFLINE_ACTIVATED ) || - (dev->dev_status &TRANSPORT_DEVICE_OFFLINE_DEACTIVATED )) { - dev->dev_status |=TRANSPORT_DEVICE_SHUTDOWN ; - dev->dev_status &= ~TRANSPORT_DEVICE_ACTIVATED ; - dev->dev_status &= ~TRANSPORT_DEVICE_DEACTIVATED ; - dev->dev_status &= ~TRANSPORT_DEVICE_OFFLINE_ACTIVATED ; - dev->dev_status &= - ~TRANSPORT_DEVICE_OFFLINE_DEACTIVATED ; - -wake_up_interruptible (&dev->dev_queue_obj->thread_wq); - } -spin_unlock (&dev->dev_status_lock); - } -spin_unlock (&hba->device_lock); - -return ; -} -extern int __transport_get_lun_for_cmd (struct se_cmd *se_cmd,u32 unpacked_lun)
@@ -1004,10 +972,10 @@ int se_dev_check_online(struct se_device *dev) {int ret; -spin_lock (&dev->dev_status_lock); +spin_lock_irq (&dev->dev_status_lock); ret = ((dev->dev_status &TRANSPORT_DEVICE_ACTIVATED ) || (dev->dev_status &TRANSPORT_DEVICE_DEACTIVATED )) ?0 :1 ; -spin_unlock (&dev->dev_status_lock); +spin_unlock_irq (&dev->dev_status_lock);return ret; }
@@ -1016,9 +984,9 @@ int se_dev_check_shutdown(struct se_device *dev) {int ret; -spin_lock (&dev->dev_status_lock); +spin_lock_irq (&dev->dev_status_lock); ret = (dev->dev_status &TRANSPORT_DEVICE_SHUTDOWN ); -spin_unlock (&dev->dev_status_lock); +spin_unlock_irq (&dev->dev_status_lock);return ret; }
drivers/target/target_core_transport.c +3 -3
@@ -8342,13 +8342,13 @@ static int transport_processing_thread(void *param)if (ret <0 ) goto out; -spin_lock (&dev->dev_status_lock); +spin_lock_irq (&dev->dev_status_lock);if (dev->dev_status &TRANSPORT_DEVICE_SHUTDOWN ) { -spin_unlock (&dev->dev_status_lock); +spin_unlock_irq (&dev->dev_status_lock);transport_processing_shutdown (dev);continue ; } -spin_unlock (&dev->dev_status_lock); +spin_unlock_irq (&dev->dev_status_lock); get_cmd:__transport_execute_tasks (dev);
include/target/target_core_device.h +0 -1
@@ -7,7 +7,6 @@ extern struct block_device *__linux_blockdevice_claim(int, int, void *, int *);extern struct block_device *linux_blockdevice_claim (int ,int ,void *);extern int linux_blockdevice_release (int ,int ,struct block_device *);extern int linux_blockdevice_check (int ,int ); -extern void se_disable_devices_for_hba (struct se_hba *);extern int transport_get_lun_for_cmd (struct se_cmd *,unsigned char *,u32 );extern int transport_get_lun_for_tmr (struct se_cmd *,u32 ); extern struct se_dev_entry *core_get_se_deve_from_rtpi(
Signature · 1 line
1.5.6.5