[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH v2 2/4] Fail SRBs if ring is not Enabled
Dont queue incomming SRBs if the ring is not able to process requests. Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> --- src/xenvbd/adapter.c | 6 ++---- src/xenvbd/ring.c | 34 +++++++++++++++++++++++++++------- src/xenvbd/ring.h | 2 +- src/xenvbd/target.c | 8 ++++---- src/xenvbd/target.h | 4 ++-- 5 files changed, 36 insertions(+), 18 deletions(-) diff --git a/src/xenvbd/adapter.c b/src/xenvbd/adapter.c index 79a5a0e..2d8d65f 100644 --- a/src/xenvbd/adapter.c +++ b/src/xenvbd/adapter.c @@ -1993,13 +1993,11 @@ AdapterHwStartIo( break; case SRB_FUNCTION_FLUSH: - TargetFlush(Target, SrbExt); - WasQueued = TRUE; + WasQueued = TargetFlush(Target, SrbExt); break; case SRB_FUNCTION_SHUTDOWN: - TargetShutdown(Target, SrbExt); - WasQueued = TRUE; + WasQueued = TargetShutdown(Target, SrbExt); break; default: diff --git a/src/xenvbd/ring.c b/src/xenvbd/ring.c index 514374c..6edee5c 100644 --- a/src/xenvbd/ring.c +++ b/src/xenvbd/ring.c @@ -2147,7 +2147,7 @@ BlkifRingDisconnect( Trace("<==== %u\n", BlkifRing->Index); } -static VOID +static BOOLEAN __BlkifRingQueueSrb( IN PXENVBD_BLKIF_RING BlkifRing, IN PXENVBD_SRBEXT SrbExt @@ -2158,6 +2158,9 @@ __BlkifRingQueueSrb( ULONG_PTR LockBit; ULONG_PTR New; + if (!BlkifRing->Enabled) + goto fail1; + ListEntry = &SrbExt->ListEntry; do { @@ -2177,17 +2180,36 @@ __BlkifRingQueueSrb( if (__BlkifRingTryAcquireLock(BlkifRing)) __BlkifRingReleaseLock(BlkifRing); + + return TRUE; + +fail1: + Error("fail1\n"); + + SrbExt->Srb->SrbStatus = SRB_STATUS_BUSY; + return FALSE; } -static VOID +static BOOLEAN __BlkifRingQueueShutdown( IN PXENVBD_BLKIF_RING BlkifRing, IN PXENVBD_SRBEXT SrbExt ) { + if (!BlkifRing->Enabled) + goto fail1; + __BlkifRingAcquireLock(BlkifRing); InsertTailList(&BlkifRing->ShutdownQueue, &SrbExt->ListEntry); __BlkifRingReleaseLock(BlkifRing); + + return TRUE; + +fail1: + Error("fail1\n"); + + SrbExt->Srb->SrbStatus = SRB_STATUS_BUSY; + return FALSE; } static DECLSPEC_NOINLINE VOID @@ -2616,12 +2638,10 @@ RingQueueRequest( BlkifRing = __RingGetBlkifRing(Ring, Srb->QueueTag); ASSERT(BlkifRing != NULL); - __BlkifRingQueueSrb(BlkifRing, SrbExt); - - return TRUE; + return __BlkifRingQueueSrb(BlkifRing, SrbExt); } -VOID +BOOLEAN RingQueueShutdown( IN PXENVBD_RING Ring, IN PXENVBD_SRBEXT SrbExt @@ -2633,5 +2653,5 @@ RingQueueShutdown( BlkifRing = __RingGetBlkifRing(Ring, Srb->QueueTag); ASSERT(BlkifRing != NULL); - __BlkifRingQueueShutdown(BlkifRing, SrbExt); + return __BlkifRingQueueShutdown(BlkifRing, SrbExt); } diff --git a/src/xenvbd/ring.h b/src/xenvbd/ring.h index e3309e2..81c2644 100644 --- a/src/xenvbd/ring.h +++ b/src/xenvbd/ring.h @@ -80,7 +80,7 @@ RingQueueRequest( IN PXENVBD_SRBEXT SrbExt ); -extern VOID +extern BOOLEAN RingQueueShutdown( IN PXENVBD_RING Ring, IN PXENVBD_SRBEXT SrbExt diff --git a/src/xenvbd/target.c b/src/xenvbd/target.c index 176cbbe..e322949 100644 --- a/src/xenvbd/target.c +++ b/src/xenvbd/target.c @@ -973,22 +973,22 @@ TargetReset( Verbose("[%u] <=====\n", TargetGetTargetId(Target)); } -VOID +BOOLEAN TargetFlush( IN PXENVBD_TARGET Target, IN PXENVBD_SRBEXT SrbExt ) { - RingQueueShutdown(FrontendGetRing(Target->Frontend), SrbExt); + return RingQueueShutdown(FrontendGetRing(Target->Frontend), SrbExt); } -VOID +BOOLEAN TargetShutdown( IN PXENVBD_TARGET Target, IN PXENVBD_SRBEXT SrbExt ) { - RingQueueShutdown(FrontendGetRing(Target->Frontend), SrbExt); + return RingQueueShutdown(FrontendGetRing(Target->Frontend), SrbExt); } VOID diff --git a/src/xenvbd/target.h b/src/xenvbd/target.h index dd360f5..cbd0ba4 100644 --- a/src/xenvbd/target.h +++ b/src/xenvbd/target.h @@ -110,13 +110,13 @@ TargetReset( IN PXENVBD_TARGET Target ); -extern VOID +extern BOOLEAN TargetFlush( IN PXENVBD_TARGET Target, IN PXENVBD_SRBEXT SrbExt ); -extern VOID +extern BOOLEAN TargetShutdown( IN PXENVBD_TARGET Target, IN PXENVBD_SRBEXT SrbExt -- 2.16.2.windows.1 _______________________________________________ win-pv-devel mailing list win-pv-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/win-pv-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |