From 0e3137524dab0d34bc9b6740e5b0205aab93576d Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Mon, 13 Jun 2011 12:22:33 +0000 Subject: [PATCH] ib_srpt: Make srpt_rdy_to_xfer() handle IB send queue overflow correctly. git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@3571 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- srpt/src/ib_srpt.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/srpt/src/ib_srpt.c b/srpt/src/ib_srpt.c index af7092342..efa37f356 100644 --- a/srpt/src/ib_srpt.c +++ b/srpt/src/ib_srpt.c @@ -3026,18 +3026,16 @@ static void srpt_pending_cmd_timeout(struct scst_cmd *scmnd) static int srpt_rdy_to_xfer(struct scst_cmd *scmnd) { struct srpt_send_ioctx *ioctx; + enum srpt_command_state prev_cmd_state; + int ret; ioctx = scst_cmd_get_tgt_priv(scmnd); - EXTRACHECKS_BUG_ON(!ioctx); + prev_cmd_state = srpt_set_cmd_state(ioctx, SRPT_STATE_NEED_DATA); + ret = srpt_xfer_data(ioctx->ch, ioctx, scmnd); + if (unlikely(ret != SCST_TGT_RES_SUCCESS)) + srpt_set_cmd_state(ioctx, prev_cmd_state); - srpt_set_cmd_state(ioctx, SRPT_STATE_NEED_DATA); - EXTRACHECKS_WARN_ON(ioctx->state == SRPT_STATE_DONE); - - EXTRACHECKS_WARN_ON(ioctx->ch != - scst_sess_get_tgt_priv(scst_cmd_get_session(scmnd))); - EXTRACHECKS_BUG_ON(!ioctx->ch); - - return srpt_xfer_data(ioctx->ch, ioctx, scmnd); + return ret; } /**