Skip to content

Commit

Permalink
[SCSI] zfcp: Simplify SBAL allocation to fix sparse warnings
Browse files Browse the repository at this point in the history
When waiting for a request claim the SBAL before waiting. This way,
locking before each check of the free counter is not required and
sparse does not emit warnings for the complicated locking scheme.

Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com>
Acked-by: Felix Beck <felix@linux.vnet.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
  • Loading branch information
Christof Schmitt authored and James Bottomley committed Dec 29, 2008
1 parent 1d3aab0 commit dedbc2b
Showing 1 changed file with 17 additions and 17 deletions.
34 changes: 17 additions & 17 deletions drivers/s390/scsi/zfcp_fsf.c
Original file line number Diff line number Diff line change
Expand Up @@ -644,38 +644,38 @@ static void zfcp_fsf_exchange_port_data_handler(struct zfcp_fsf_req *req)
}
}

static int zfcp_fsf_sbal_check(struct zfcp_adapter *adapter)
static int zfcp_fsf_sbal_available(struct zfcp_adapter *adapter)
{
struct zfcp_qdio_queue *req_q = &adapter->req_q;

spin_lock_bh(&adapter->req_q_lock);
if (atomic_read(&req_q->count))
if (atomic_read(&adapter->req_q.count) > 0)
return 1;
spin_unlock_bh(&adapter->req_q_lock);
atomic_inc(&adapter->qdio_outb_full);
return 0;
}

static int zfcp_fsf_sbal_available(struct zfcp_adapter *adapter)
{
unsigned int count = atomic_read(&adapter->req_q.count);
if (!count)
atomic_inc(&adapter->qdio_outb_full);
return count > 0;
}

static int zfcp_fsf_req_sbal_get(struct zfcp_adapter *adapter)
__releases(&adapter->req_q_lock)
__acquires(&adapter->req_q_lock)
{
struct zfcp_qdio_queue *req_q = &adapter->req_q;
long ret;

if (atomic_read(&req_q->count) <= -REQUEST_LIST_SIZE)
return -EIO;
if (atomic_read(&req_q->count) > 0)
return 0;

atomic_dec(&req_q->count);
spin_unlock_bh(&adapter->req_q_lock);
ret = wait_event_interruptible_timeout(adapter->request_wq,
zfcp_fsf_sbal_check(adapter), 5 * HZ);
atomic_read(&req_q->count) >= 0,
5 * HZ);
spin_lock_bh(&adapter->req_q_lock);
atomic_inc(&req_q->count);

if (ret > 0)
return 0;
if (!ret)
atomic_inc(&adapter->qdio_outb_full);

spin_lock_bh(&adapter->req_q_lock);
return -EIO;
}

Expand Down

0 comments on commit dedbc2b

Please sign in to comment.