scsi: scsi_debug: Don't iter all shosts in clear_luns_changed_on_target()
authorJohn Garry <john.g.garry@oracle.com>
Mon, 27 Mar 2023 07:43:01 +0000 (07:43 +0000)
committerMartin K. Petersen <martin.petersen@oracle.com>
Mon, 3 Apr 2023 02:09:21 +0000 (22:09 -0400)
commit00f9d622e8b237d8403569ee51f7bfb9bf89a2d5
tree408f367f4a4030dc735cf1d078a5f27055c5f0c9
parent6500d2045d5247cfb2ac31cc1691d7191096389b
scsi: scsi_debug: Don't iter all shosts in clear_luns_changed_on_target()

In clear_luns_changed_on_target(), we iter all devices for all shosts to
conditionally clear the SDEBUG_UA_LUNS_CHANGED flag in the per-device
uas_bm.

One condition to see whether we clear the flag is to test whether the host
for the device under consideration is the same as the matching device's
(devip) host. This check will only ever pass for devices for the same
shost, so only iter the devices for the matching device shost.

We can now drop the spinlock'ing of the sdebug_host_list_lock in the same
function. This will allow us to use a mutex instead of the spinlock for the
global shost lock, as clear_luns_changed_on_target() could be called in
non-blocking context, in scsi_debug_queuecommand() -> make_ua() ->
clear_luns_changed_on_target() (which is why required a spinlock).

Signed-off-by: John Garry <john.g.garry@oracle.com>
Link: https://lore.kernel.org/r/20230327074310.1862889-3-john.g.garry@oracle.com
Acked-by: Douglas Gilbert <dgilbert@interlog.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/scsi_debug.c