[v2,09/13] scsi: fnic: Remove usage of host_lock
Commit Message
Remove usage of host_lock.
Replace with fnic_lock, where necessary.
Reviewed-by: Sesidhar Baddela <sebaddel@cisco.com>
Reviewed-by: Arulprabhu Ponnusamy <arulponn@cisco.com>
Signed-off-by: Karan Tilak Kumar <kartilak@cisco.com>
---
drivers/scsi/fnic/fnic_scsi.c | 27 ++++++---------------------
1 file changed, 6 insertions(+), 21 deletions(-)
Comments
On 10/27/23 20:02, Karan Tilak Kumar wrote:
> Remove usage of host_lock.
> Replace with fnic_lock, where necessary.
>
> Reviewed-by: Sesidhar Baddela <sebaddel@cisco.com>
> Reviewed-by: Arulprabhu Ponnusamy <arulponn@cisco.com>
> Signed-off-by: Karan Tilak Kumar <kartilak@cisco.com>
> ---
> drivers/scsi/fnic/fnic_scsi.c | 27 ++++++---------------------
> 1 file changed, 6 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/scsi/fnic/fnic_scsi.c b/drivers/scsi/fnic/fnic_scsi.c
> index f32781f8fdd0..9a1beb3e7269 100644
> --- a/drivers/scsi/fnic/fnic_scsi.c
> +++ b/drivers/scsi/fnic/fnic_scsi.c
> @@ -170,17 +170,14 @@ __fnic_set_state_flags(struct fnic *fnic, unsigned long st_flags,
> unsigned long clearbits)
> {
> unsigned long flags = 0;
> - unsigned long host_lock_flags = 0;
>
> spin_lock_irqsave(&fnic->fnic_lock, flags);
> - spin_lock_irqsave(fnic->lport->host->host_lock, host_lock_flags);
>
> if (clearbits)
> fnic->state_flags &= ~st_flags;
> else
> fnic->state_flags |= st_flags;
>
> - spin_unlock_irqrestore(fnic->lport->host->host_lock, host_lock_flags);
> spin_unlock_irqrestore(&fnic->fnic_lock, flags);
> > return;
> @@ -479,12 +476,6 @@ static int fnic_queuecommand_lck(struct scsi_cmnd *sc)
>
> atomic_inc(&fnic->in_flight);
>
> - /*
> - * Release host lock, use driver resource specific locks from here.
> - * Don't re-enable interrupts in case they were disabled prior to the
> - * caller disabling them.
> - */
> - spin_unlock(lp->host->host_lock);
> fnic_priv(sc)->state = FNIC_IOREQ_NOT_INITED;
> fnic_priv(sc)->flags = FNIC_NO_FLAGS;
>
> @@ -569,8 +560,6 @@ static int fnic_queuecommand_lck(struct scsi_cmnd *sc)
> mempool_free(io_req, fnic->io_req_pool);
> }
> atomic_dec(&fnic->in_flight);
> - /* acquire host lock before returning to SCSI */
> - spin_lock(lp->host->host_lock);
> return ret;
> } else {
> atomic64_inc(&fnic_stats->io_stats.active_ios);
> @@ -598,8 +587,6 @@ static int fnic_queuecommand_lck(struct scsi_cmnd *sc)
> spin_unlock_irqrestore(io_lock, flags);
>
> atomic_dec(&fnic->in_flight);
> - /* acquire host lock before returning to SCSI */
> - spin_lock(lp->host->host_lock);
> return ret;
> }
>
If you remove the need for the host_lock during queuecommand() in your
driver please rename 'fnic_queuecommand_lck()' to 'fnic_queuecommand()'
and remove the line
DEF_SCSI_QCMD(fnic_queuecommand)
Cheers,
Hannes
On Thursday, November 2, 2023 12:53 AM, Hannes Reinecke <hare@suse.de> wrote:
> If you remove the need for the host_lock during queuecommand() in your driver please rename 'fnic_queuecommand_lck()' to 'fnic_queuecommand()'
> and remove the line
>
> DEF_SCSI_QCMD(fnic_queuecommand)
This change has been made in patch 12/13.
In v3, I've merged patch 9(scsi: fnic: Remove usage of host_lock) with patch 11 (scsi: fnic: Use fnic_lock to protect fnic structures in queuecommand).
Regards,
Karan
@@ -170,17 +170,14 @@ __fnic_set_state_flags(struct fnic *fnic, unsigned long st_flags,
unsigned long clearbits)
{
unsigned long flags = 0;
- unsigned long host_lock_flags = 0;
spin_lock_irqsave(&fnic->fnic_lock, flags);
- spin_lock_irqsave(fnic->lport->host->host_lock, host_lock_flags);
if (clearbits)
fnic->state_flags &= ~st_flags;
else
fnic->state_flags |= st_flags;
- spin_unlock_irqrestore(fnic->lport->host->host_lock, host_lock_flags);
spin_unlock_irqrestore(&fnic->fnic_lock, flags);
return;
@@ -479,12 +476,6 @@ static int fnic_queuecommand_lck(struct scsi_cmnd *sc)
atomic_inc(&fnic->in_flight);
- /*
- * Release host lock, use driver resource specific locks from here.
- * Don't re-enable interrupts in case they were disabled prior to the
- * caller disabling them.
- */
- spin_unlock(lp->host->host_lock);
fnic_priv(sc)->state = FNIC_IOREQ_NOT_INITED;
fnic_priv(sc)->flags = FNIC_NO_FLAGS;
@@ -569,8 +560,6 @@ static int fnic_queuecommand_lck(struct scsi_cmnd *sc)
mempool_free(io_req, fnic->io_req_pool);
}
atomic_dec(&fnic->in_flight);
- /* acquire host lock before returning to SCSI */
- spin_lock(lp->host->host_lock);
return ret;
} else {
atomic64_inc(&fnic_stats->io_stats.active_ios);
@@ -598,8 +587,6 @@ static int fnic_queuecommand_lck(struct scsi_cmnd *sc)
spin_unlock_irqrestore(io_lock, flags);
atomic_dec(&fnic->in_flight);
- /* acquire host lock before returning to SCSI */
- spin_lock(lp->host->host_lock);
return ret;
}
@@ -1477,18 +1464,17 @@ static inline int fnic_queue_abort_io_req(struct fnic *fnic, int tag,
struct fnic_io_req *io_req)
{
struct vnic_wq_copy *wq = &fnic->hw_copy_wq[0];
- struct Scsi_Host *host = fnic->lport->host;
struct misc_stats *misc_stats = &fnic->fnic_stats.misc_stats;
unsigned long flags;
- spin_lock_irqsave(host->host_lock, flags);
+ spin_lock_irqsave(&fnic->fnic_lock, flags);
if (unlikely(fnic_chk_state_flags_locked(fnic,
FNIC_FLAGS_IO_BLOCKED))) {
- spin_unlock_irqrestore(host->host_lock, flags);
+ spin_unlock_irqrestore(&fnic->fnic_lock, flags);
return 1;
} else
atomic_inc(&fnic->in_flight);
- spin_unlock_irqrestore(host->host_lock, flags);
+ spin_unlock_irqrestore(&fnic->fnic_lock, flags);
spin_lock_irqsave(&fnic->wq_copy_lock[0], flags);
@@ -1923,20 +1909,19 @@ static inline int fnic_queue_dr_io_req(struct fnic *fnic,
struct fnic_io_req *io_req)
{
struct vnic_wq_copy *wq = &fnic->hw_copy_wq[0];
- struct Scsi_Host *host = fnic->lport->host;
struct misc_stats *misc_stats = &fnic->fnic_stats.misc_stats;
struct scsi_lun fc_lun;
int ret = 0;
unsigned long intr_flags;
- spin_lock_irqsave(host->host_lock, intr_flags);
+ spin_lock_irqsave(&fnic->fnic_lock, intr_flags);
if (unlikely(fnic_chk_state_flags_locked(fnic,
FNIC_FLAGS_IO_BLOCKED))) {
- spin_unlock_irqrestore(host->host_lock, intr_flags);
+ spin_unlock_irqrestore(&fnic->fnic_lock, intr_flags);
return FAILED;
} else
atomic_inc(&fnic->in_flight);
- spin_unlock_irqrestore(host->host_lock, intr_flags);
+ spin_unlock_irqrestore(&fnic->fnic_lock, intr_flags);
spin_lock_irqsave(&fnic->wq_copy_lock[0], intr_flags);