diff options
author | 2025-02-28 17:37:12 -0800 | |
---|---|---|
committer | 2025-03-03 22:11:48 -0500 | |
commit | f421692be10133a66a3a8a7d5c76fe9713ea5a8b (patch) | |
tree | af9532d3bd726a223b2deaed3699e7da0583e7ef | |
parent | scsi: fnic: Replace fnic->lock_flags with local flags (diff) | |
download | wireguard-linux-f421692be10133a66a3a8a7d5c76fe9713ea5a8b.tar.xz wireguard-linux-f421692be10133a66a3a8a7d5c76fe9713ea5a8b.zip |
scsi: fnic: Remove unnecessary spinlock locking and unlocking
Remove unnecessary locking and unlocking of spinlock in
fdls_schedule_oxid_free_retry_work(). This will shorten the time in the
critical section.
Suggested-by: Dan Carpenter <dan.carpenter@linaro.org>
Fixes: a63e78eb2b0f ("scsi: fnic: Add support for fabric based solicited requests and responses")
Reviewed-by: Sesidhar Baddela <sebaddel@cisco.com>
Reviewed-by: Arulprabhu Ponnusamy <arulponn@cisco.com>
Reviewed-by: Gian Carlo Boffa <gcboffa@cisco.com>
Reviewed-by: Arun Easi <aeasi@cisco.com>
Tested-by: Karan Tilak Kumar <kartilak@cisco.com>
Signed-off-by: Karan Tilak Kumar <kartilak@cisco.com>
Link: https://lore.kernel.org/r/20250301013712.3115-2-kartilak@cisco.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
-rw-r--r-- | drivers/scsi/fnic/fdls_disc.c | 24 |
1 files changed, 7 insertions, 17 deletions
diff --git a/drivers/scsi/fnic/fdls_disc.c b/drivers/scsi/fnic/fdls_disc.c index 8843d9486dbb..a9ffa7b63730 100644 --- a/drivers/scsi/fnic/fdls_disc.c +++ b/drivers/scsi/fnic/fdls_disc.c @@ -311,36 +311,26 @@ void fdls_schedule_oxid_free_retry_work(struct work_struct *work) unsigned long flags; int idx; - spin_lock_irqsave(&fnic->fnic_lock, flags); - for_each_set_bit(idx, oxid_pool->pending_schedule_free, FNIC_OXID_POOL_SZ) { FNIC_FCS_DBG(KERN_INFO, fnic->host, fnic->fnic_num, "Schedule oxid free. oxid idx: %d\n", idx); - spin_unlock_irqrestore(&fnic->fnic_lock, flags); reclaim_entry = kzalloc(sizeof(*reclaim_entry), GFP_KERNEL); - spin_lock_irqsave(&fnic->fnic_lock, flags); - if (!reclaim_entry) { schedule_delayed_work(&oxid_pool->schedule_oxid_free_retry, msecs_to_jiffies(SCHEDULE_OXID_FREE_RETRY_TIME)); - spin_unlock_irqrestore(&fnic->fnic_lock, flags); return; } - if (test_and_clear_bit(idx, oxid_pool->pending_schedule_free)) { - reclaim_entry->oxid_idx = idx; - reclaim_entry->expires = round_jiffies(jiffies + delay_j); - list_add_tail(&reclaim_entry->links, &oxid_pool->oxid_reclaim_list); - schedule_delayed_work(&oxid_pool->oxid_reclaim_work, delay_j); - } else { - /* unlikely scenario, free the allocated memory and continue */ - kfree(reclaim_entry); - } + clear_bit(idx, oxid_pool->pending_schedule_free); + reclaim_entry->oxid_idx = idx; + reclaim_entry->expires = round_jiffies(jiffies + delay_j); + spin_lock_irqsave(&fnic->fnic_lock, flags); + list_add_tail(&reclaim_entry->links, &oxid_pool->oxid_reclaim_list); + spin_unlock_irqrestore(&fnic->fnic_lock, flags); + schedule_delayed_work(&oxid_pool->oxid_reclaim_work, delay_j); } - - spin_unlock_irqrestore(&fnic->fnic_lock, flags); } static bool fdls_is_oxid_fabric_req(uint16_t oxid) |