hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/nvme/target/fcloop.c
....@@ -570,10 +570,11 @@
570570 struct fcloop_fcpreq *tfcp_req =
571571 container_of(work, struct fcloop_fcpreq, fcp_rcv_work);
572572 struct nvmefc_fcp_req *fcpreq = tfcp_req->fcpreq;
573
+ unsigned long flags;
573574 int ret = 0;
574575 bool aborted = false;
575576
576
- spin_lock_irq(&tfcp_req->reqlock);
577
+ spin_lock_irqsave(&tfcp_req->reqlock, flags);
577578 switch (tfcp_req->inistate) {
578579 case INI_IO_START:
579580 tfcp_req->inistate = INI_IO_ACTIVE;
....@@ -582,11 +583,11 @@
582583 aborted = true;
583584 break;
584585 default:
585
- spin_unlock_irq(&tfcp_req->reqlock);
586
+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags);
586587 WARN_ON(1);
587588 return;
588589 }
589
- spin_unlock_irq(&tfcp_req->reqlock);
590
+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags);
590591
591592 if (unlikely(aborted))
592593 ret = -ECANCELED;
....@@ -607,8 +608,9 @@
607608 container_of(work, struct fcloop_fcpreq, abort_rcv_work);
608609 struct nvmefc_fcp_req *fcpreq;
609610 bool completed = false;
611
+ unsigned long flags;
610612
611
- spin_lock_irq(&tfcp_req->reqlock);
613
+ spin_lock_irqsave(&tfcp_req->reqlock, flags);
612614 fcpreq = tfcp_req->fcpreq;
613615 switch (tfcp_req->inistate) {
614616 case INI_IO_ABORTED:
....@@ -617,11 +619,11 @@
617619 completed = true;
618620 break;
619621 default:
620
- spin_unlock_irq(&tfcp_req->reqlock);
622
+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags);
621623 WARN_ON(1);
622624 return;
623625 }
624
- spin_unlock_irq(&tfcp_req->reqlock);
626
+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags);
625627
626628 if (unlikely(completed)) {
627629 /* remove reference taken in original abort downcall */
....@@ -633,9 +635,9 @@
633635 nvmet_fc_rcv_fcp_abort(tfcp_req->tport->targetport,
634636 &tfcp_req->tgt_fcp_req);
635637
636
- spin_lock_irq(&tfcp_req->reqlock);
638
+ spin_lock_irqsave(&tfcp_req->reqlock, flags);
637639 tfcp_req->fcpreq = NULL;
638
- spin_unlock_irq(&tfcp_req->reqlock);
640
+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags);
639641
640642 fcloop_call_host_done(fcpreq, tfcp_req, -ECANCELED);
641643 /* call_host_done releases reference for abort downcall */
....@@ -651,11 +653,12 @@
651653 struct fcloop_fcpreq *tfcp_req =
652654 container_of(work, struct fcloop_fcpreq, tio_done_work);
653655 struct nvmefc_fcp_req *fcpreq;
656
+ unsigned long flags;
654657
655
- spin_lock_irq(&tfcp_req->reqlock);
658
+ spin_lock_irqsave(&tfcp_req->reqlock, flags);
656659 fcpreq = tfcp_req->fcpreq;
657660 tfcp_req->inistate = INI_IO_COMPLETED;
658
- spin_unlock_irq(&tfcp_req->reqlock);
661
+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags);
659662
660663 fcloop_call_host_done(fcpreq, tfcp_req, tfcp_req->status);
661664 }
....@@ -759,13 +762,14 @@
759762 u32 rsplen = 0, xfrlen = 0;
760763 int fcp_err = 0, active, aborted;
761764 u8 op = tgt_fcpreq->op;
765
+ unsigned long flags;
762766
763
- spin_lock_irq(&tfcp_req->reqlock);
767
+ spin_lock_irqsave(&tfcp_req->reqlock, flags);
764768 fcpreq = tfcp_req->fcpreq;
765769 active = tfcp_req->active;
766770 aborted = tfcp_req->aborted;
767771 tfcp_req->active = true;
768
- spin_unlock_irq(&tfcp_req->reqlock);
772
+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags);
769773
770774 if (unlikely(active))
771775 /* illegal - call while i/o active */
....@@ -773,9 +777,9 @@
773777
774778 if (unlikely(aborted)) {
775779 /* target transport has aborted i/o prior */
776
- spin_lock_irq(&tfcp_req->reqlock);
780
+ spin_lock_irqsave(&tfcp_req->reqlock, flags);
777781 tfcp_req->active = false;
778
- spin_unlock_irq(&tfcp_req->reqlock);
782
+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags);
779783 tgt_fcpreq->transferred_length = 0;
780784 tgt_fcpreq->fcp_error = -ECANCELED;
781785 tgt_fcpreq->done(tgt_fcpreq);
....@@ -832,9 +836,9 @@
832836 break;
833837 }
834838
835
- spin_lock_irq(&tfcp_req->reqlock);
839
+ spin_lock_irqsave(&tfcp_req->reqlock, flags);
836840 tfcp_req->active = false;
837
- spin_unlock_irq(&tfcp_req->reqlock);
841
+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags);
838842
839843 tgt_fcpreq->transferred_length = xfrlen;
840844 tgt_fcpreq->fcp_error = fcp_err;
....@@ -848,15 +852,16 @@
848852 struct nvmefc_tgt_fcp_req *tgt_fcpreq)
849853 {
850854 struct fcloop_fcpreq *tfcp_req = tgt_fcp_req_to_fcpreq(tgt_fcpreq);
855
+ unsigned long flags;
851856
852857 /*
853858 * mark aborted only in case there were 2 threads in transport
854859 * (one doing io, other doing abort) and only kills ops posted
855860 * after the abort request
856861 */
857
- spin_lock_irq(&tfcp_req->reqlock);
862
+ spin_lock_irqsave(&tfcp_req->reqlock, flags);
858863 tfcp_req->aborted = true;
859
- spin_unlock_irq(&tfcp_req->reqlock);
864
+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags);
860865
861866 tfcp_req->status = NVME_SC_INTERNAL;
862867
....@@ -898,6 +903,7 @@
898903 struct fcloop_ini_fcpreq *inireq = fcpreq->private;
899904 struct fcloop_fcpreq *tfcp_req;
900905 bool abortio = true;
906
+ unsigned long flags;
901907
902908 spin_lock(&inireq->inilock);
903909 tfcp_req = inireq->tfcp_req;
....@@ -910,7 +916,7 @@
910916 return;
911917
912918 /* break initiator/target relationship for io */
913
- spin_lock_irq(&tfcp_req->reqlock);
919
+ spin_lock_irqsave(&tfcp_req->reqlock, flags);
914920 switch (tfcp_req->inistate) {
915921 case INI_IO_START:
916922 case INI_IO_ACTIVE:
....@@ -920,11 +926,11 @@
920926 abortio = false;
921927 break;
922928 default:
923
- spin_unlock_irq(&tfcp_req->reqlock);
929
+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags);
924930 WARN_ON(1);
925931 return;
926932 }
927
- spin_unlock_irq(&tfcp_req->reqlock);
933
+ spin_unlock_irqrestore(&tfcp_req->reqlock, flags);
928934
929935 if (abortio)
930936 /* leave the reference while the work item is scheduled */