aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/scsi
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/s390/scsi')
-rw-r--r--drivers/s390/scsi/zfcp_fsf.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/drivers/s390/scsi/zfcp_fsf.c b/drivers/s390/scsi/zfcp_fsf.c
index bd2b23766894..3f365ace7711 100644
--- a/drivers/s390/scsi/zfcp_fsf.c
+++ b/drivers/s390/scsi/zfcp_fsf.c
@@ -645,30 +645,30 @@ static void zfcp_fsf_exchange_port_data_handler(struct zfcp_fsf_req *req)
645 } 645 }
646} 646}
647 647
648static int zfcp_fsf_req_sbal_get(struct zfcp_adapter *adapter) 648static int zfcp_fsf_sbal_check(struct zfcp_adapter *adapter)
649 __releases(&adapter->req_q_lock)
650 __acquires(&adapter->req_q_lock)
651{ 649{
652 struct zfcp_qdio_queue *req_q = &adapter->req_q; 650 struct zfcp_qdio_queue *req_q = &adapter->req_q;
653 long ret;
654 651
655 if (atomic_read(&req_q->count) <= -REQUEST_LIST_SIZE) 652 spin_lock_bh(&adapter->req_q_lock);
656 return -EIO; 653 if (atomic_read(&req_q->count))
657 if (atomic_read(&req_q->count) > 0) 654 return 1;
658 return 0; 655 spin_unlock_bh(&adapter->req_q_lock);
656 return 0;
657}
658
659static int zfcp_fsf_req_sbal_get(struct zfcp_adapter *adapter)
660{
661 long ret;
659 662
660 atomic_dec(&req_q->count);
661 spin_unlock_bh(&adapter->req_q_lock); 663 spin_unlock_bh(&adapter->req_q_lock);
662 ret = wait_event_interruptible_timeout(adapter->request_wq, 664 ret = wait_event_interruptible_timeout(adapter->request_wq,
663 atomic_read(&req_q->count) >= 0, 665 zfcp_fsf_sbal_check(adapter), 5 * HZ);
664 5 * HZ);
665 spin_lock_bh(&adapter->req_q_lock);
666 atomic_inc(&req_q->count);
667
668 if (ret > 0) 666 if (ret > 0)
669 return 0; 667 return 0;
670 if (!ret) 668 if (!ret)
671 atomic_inc(&adapter->qdio_outb_full); 669 atomic_inc(&adapter->qdio_outb_full);
670
671 spin_lock_bh(&adapter->req_q_lock);
672 return -EIO; 672 return -EIO;
673} 673}
674 674