svn commit: r235031 - projects/iscsi_opt/sys/dev/iscsi/initiator

Kip Macy kmacy at FreeBSD.org
Fri May 4 19:26:03 UTC 2012


Author: kmacy
Date: Fri May  4 19:26:03 2012
New Revision: 235031
URL: http://svn.freebsd.org/changeset/base/235031

Log:
  unfreeze queue in completion handler

Modified:
  projects/iscsi_opt/sys/dev/iscsi/initiator/isc_cam.c
  projects/iscsi_opt/sys/dev/iscsi/initiator/iscsivar.h

Modified: projects/iscsi_opt/sys/dev/iscsi/initiator/isc_cam.c
==============================================================================
--- projects/iscsi_opt/sys/dev/iscsi/initiator/isc_cam.c	Fri May  4 18:57:45 2012	(r235030)
+++ projects/iscsi_opt/sys/dev/iscsi/initiator/isc_cam.c	Fri May  4 19:26:03 2012	(r235031)
@@ -251,16 +251,8 @@ ic_action(struct cam_sim *sim, union ccb
 
 	  if (rc == EWOULDBLOCK) {
 		  if ((sp->cam_flags & ISC_QFROZEN) == 0) {
-			  CAM_UNLOCK(sp);
-			  SOCKBUF_LOCK(&sp->soc->so_snd);
-			  CAM_LOCK(sp);
-			  if ((sp->cam_flags & ISC_QFROZEN) == 0) {
-				  sp->cam_flags |= ISC_QFROZEN;
-				  xpt_freeze_simq(sim, 1);			  
-				  soupcall_set(sp->soc, SO_SND, isc_so_snd_upcall, sp);
-			  }
-			  /* else we lost the race and someone else froze it for us oh well */
-			  SOCKBUF_UNLOCK(&sp->soc->so_snd);
+			  sp->cam_flags |= ISC_QFROZEN;
+			  xpt_freeze_simq(sim, 1);			  
 		  }
 		  status = ccb->ccb_h.status &= ~CAM_STATUS_MASK;
 		  csio->ccb_h.status = status | CAM_REQUEUE_REQ;

Modified: projects/iscsi_opt/sys/dev/iscsi/initiator/iscsivar.h
==============================================================================
--- projects/iscsi_opt/sys/dev/iscsi/initiator/iscsivar.h	Fri May  4 18:57:45 2012	(r235030)
+++ projects/iscsi_opt/sys/dev/iscsi/initiator/iscsivar.h	Fri May  4 19:26:03 2012	(r235031)
@@ -336,6 +336,13 @@ XPT_DONE(isc_session_t *sp, union ccb *c
 		inq->flags |= SID_CmdQue;
 	}
 	CAM_LOCK(sp);
+	if (sp->cam_flags & ISC_QFROZEN) {
+		if (sbspace(&sp->soc->so_snd) >= sp->space_needed) {
+			sp->space_needed = 0;
+			ccb->ccb_h.status |= CAM_RELEASE_SIMQ;
+			sp->cam_flags &= ~ISC_QFROZEN;
+		}
+	}
 	xpt_done(ccb);
 	CAM_UNLOCK(sp);
 }


More information about the svn-src-projects mailing list