Lines Matching refs:tfcp_req
286 struct fcloop_fcpreq *tfcp_req; member
529 struct fcloop_fcpreq *tfcp_req = in fcloop_tfcp_req_free() local
532 kfree(tfcp_req); in fcloop_tfcp_req_free()
536 fcloop_tfcp_req_put(struct fcloop_fcpreq *tfcp_req) in fcloop_tfcp_req_put() argument
538 kref_put(&tfcp_req->ref, fcloop_tfcp_req_free); in fcloop_tfcp_req_put()
542 fcloop_tfcp_req_get(struct fcloop_fcpreq *tfcp_req) in fcloop_tfcp_req_get() argument
544 return kref_get_unless_zero(&tfcp_req->ref); in fcloop_tfcp_req_get()
549 struct fcloop_fcpreq *tfcp_req, int status) in fcloop_call_host_done() argument
556 inireq->tfcp_req = NULL; in fcloop_call_host_done()
564 fcloop_tfcp_req_put(tfcp_req); in fcloop_call_host_done()
581 static int check_for_drop(struct fcloop_fcpreq *tfcp_req) in check_for_drop() argument
583 struct nvmefc_fcp_req *fcpreq = tfcp_req->fcpreq; in check_for_drop()
614 struct fcloop_fcpreq *tfcp_req = in fcloop_fcp_recv_work() local
616 struct nvmefc_fcp_req *fcpreq = tfcp_req->fcpreq; in fcloop_fcp_recv_work()
620 spin_lock_irq(&tfcp_req->reqlock); in fcloop_fcp_recv_work()
621 switch (tfcp_req->inistate) { in fcloop_fcp_recv_work()
623 tfcp_req->inistate = INI_IO_ACTIVE; in fcloop_fcp_recv_work()
629 spin_unlock_irq(&tfcp_req->reqlock); in fcloop_fcp_recv_work()
633 spin_unlock_irq(&tfcp_req->reqlock); in fcloop_fcp_recv_work()
638 if (likely(!check_for_drop(tfcp_req))) in fcloop_fcp_recv_work()
639 ret = nvmet_fc_rcv_fcp_req(tfcp_req->tport->targetport, in fcloop_fcp_recv_work()
640 &tfcp_req->tgt_fcp_req, in fcloop_fcp_recv_work()
646 fcloop_call_host_done(fcpreq, tfcp_req, ret); in fcloop_fcp_recv_work()
654 struct fcloop_fcpreq *tfcp_req = in fcloop_fcp_abort_recv_work() local
659 spin_lock_irq(&tfcp_req->reqlock); in fcloop_fcp_abort_recv_work()
660 fcpreq = tfcp_req->fcpreq; in fcloop_fcp_abort_recv_work()
661 switch (tfcp_req->inistate) { in fcloop_fcp_abort_recv_work()
668 spin_unlock_irq(&tfcp_req->reqlock); in fcloop_fcp_abort_recv_work()
672 spin_unlock_irq(&tfcp_req->reqlock); in fcloop_fcp_abort_recv_work()
676 fcloop_tfcp_req_put(tfcp_req); in fcloop_fcp_abort_recv_work()
680 if (tfcp_req->tport->targetport) in fcloop_fcp_abort_recv_work()
681 nvmet_fc_rcv_fcp_abort(tfcp_req->tport->targetport, in fcloop_fcp_abort_recv_work()
682 &tfcp_req->tgt_fcp_req); in fcloop_fcp_abort_recv_work()
684 spin_lock_irq(&tfcp_req->reqlock); in fcloop_fcp_abort_recv_work()
685 tfcp_req->fcpreq = NULL; in fcloop_fcp_abort_recv_work()
686 spin_unlock_irq(&tfcp_req->reqlock); in fcloop_fcp_abort_recv_work()
688 fcloop_call_host_done(fcpreq, tfcp_req, -ECANCELED); in fcloop_fcp_abort_recv_work()
699 struct fcloop_fcpreq *tfcp_req = in fcloop_tgt_fcprqst_done_work() local
703 spin_lock_irq(&tfcp_req->reqlock); in fcloop_tgt_fcprqst_done_work()
704 fcpreq = tfcp_req->fcpreq; in fcloop_tgt_fcprqst_done_work()
705 tfcp_req->inistate = INI_IO_COMPLETED; in fcloop_tgt_fcprqst_done_work()
706 spin_unlock_irq(&tfcp_req->reqlock); in fcloop_tgt_fcprqst_done_work()
708 fcloop_call_host_done(fcpreq, tfcp_req, tfcp_req->status); in fcloop_tgt_fcprqst_done_work()
720 struct fcloop_fcpreq *tfcp_req; in fcloop_fcp_req() local
725 tfcp_req = kzalloc(sizeof(*tfcp_req), GFP_ATOMIC); in fcloop_fcp_req()
726 if (!tfcp_req) in fcloop_fcp_req()
730 inireq->tfcp_req = tfcp_req; in fcloop_fcp_req()
733 tfcp_req->fcpreq = fcpreq; in fcloop_fcp_req()
734 tfcp_req->tport = rport->targetport->private; in fcloop_fcp_req()
735 tfcp_req->inistate = INI_IO_START; in fcloop_fcp_req()
736 spin_lock_init(&tfcp_req->reqlock); in fcloop_fcp_req()
737 INIT_WORK(&tfcp_req->fcp_rcv_work, fcloop_fcp_recv_work); in fcloop_fcp_req()
738 INIT_WORK(&tfcp_req->abort_rcv_work, fcloop_fcp_abort_recv_work); in fcloop_fcp_req()
739 INIT_WORK(&tfcp_req->tio_done_work, fcloop_tgt_fcprqst_done_work); in fcloop_fcp_req()
740 kref_init(&tfcp_req->ref); in fcloop_fcp_req()
742 schedule_work(&tfcp_req->fcp_rcv_work); in fcloop_fcp_req()
805 struct fcloop_fcpreq *tfcp_req = tgt_fcp_req_to_fcpreq(tgt_fcpreq); in fcloop_fcp_op() local
811 spin_lock_irq(&tfcp_req->reqlock); in fcloop_fcp_op()
812 fcpreq = tfcp_req->fcpreq; in fcloop_fcp_op()
813 active = tfcp_req->active; in fcloop_fcp_op()
814 aborted = tfcp_req->aborted; in fcloop_fcp_op()
815 tfcp_req->active = true; in fcloop_fcp_op()
816 spin_unlock_irq(&tfcp_req->reqlock); in fcloop_fcp_op()
824 spin_lock_irq(&tfcp_req->reqlock); in fcloop_fcp_op()
825 tfcp_req->active = false; in fcloop_fcp_op()
826 spin_unlock_irq(&tfcp_req->reqlock); in fcloop_fcp_op()
875 tfcp_req->status = 0; in fcloop_fcp_op()
883 spin_lock_irq(&tfcp_req->reqlock); in fcloop_fcp_op()
884 tfcp_req->active = false; in fcloop_fcp_op()
885 spin_unlock_irq(&tfcp_req->reqlock); in fcloop_fcp_op()
898 struct fcloop_fcpreq *tfcp_req = tgt_fcp_req_to_fcpreq(tgt_fcpreq); in fcloop_tgt_fcp_abort() local
905 spin_lock_irq(&tfcp_req->reqlock); in fcloop_tgt_fcp_abort()
906 tfcp_req->aborted = true; in fcloop_tgt_fcp_abort()
907 spin_unlock_irq(&tfcp_req->reqlock); in fcloop_tgt_fcp_abort()
909 tfcp_req->status = NVME_SC_INTERNAL; in fcloop_tgt_fcp_abort()
922 struct fcloop_fcpreq *tfcp_req = tgt_fcp_req_to_fcpreq(tgt_fcpreq); in fcloop_fcp_req_release() local
924 schedule_work(&tfcp_req->tio_done_work); in fcloop_fcp_req_release()
947 struct fcloop_fcpreq *tfcp_req; in fcloop_fcp_abort() local
951 tfcp_req = inireq->tfcp_req; in fcloop_fcp_abort()
952 if (tfcp_req) in fcloop_fcp_abort()
953 fcloop_tfcp_req_get(tfcp_req); in fcloop_fcp_abort()
956 if (!tfcp_req) in fcloop_fcp_abort()
961 spin_lock_irq(&tfcp_req->reqlock); in fcloop_fcp_abort()
962 switch (tfcp_req->inistate) { in fcloop_fcp_abort()
965 tfcp_req->inistate = INI_IO_ABORTED; in fcloop_fcp_abort()
971 spin_unlock_irq(&tfcp_req->reqlock); in fcloop_fcp_abort()
975 spin_unlock_irq(&tfcp_req->reqlock); in fcloop_fcp_abort()
979 WARN_ON(!schedule_work(&tfcp_req->abort_rcv_work)); in fcloop_fcp_abort()
985 fcloop_tfcp_req_put(tfcp_req); in fcloop_fcp_abort()