Windows: Mark Irp Pending before Deferring
authorJeffrey Altman <jaltman@your-file-system.com>
Thu, 9 Jan 2014 14:57:33 +0000 (09:57 -0500)
committerJeffrey Altman <jaltman@your-file-system.com>
Thu, 9 Jan 2014 19:21:43 +0000 (11:21 -0800)
After CcDeferWrite() is called we no longer have access to the
current Irp.  If we mark it deferred after calling CcDeferWrite()
we might mark the wrong thing.

Change-Id: Id4b1bbd241b5e2acafc8d015e85966cb80518dde
Reviewed-on: http://gerrit.openafs.org/10684
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>

src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp

index ed912c3..5335413 100644 (file)
@@ -2750,10 +2750,10 @@ AFSDeferWrite( IN PDEVICE_OBJECT DeviceObject,
                       __FUNCTION__,
                       pWorkItem));
 
-        CcDeferWrite( FileObject, AFSPostedDeferredWrite, pWorkItem, NULL, BytesToWrite, bRetrying);
-
         IoMarkIrpPending(Irp);
 
+       CcDeferWrite( FileObject, AFSPostedDeferredWrite, pWorkItem, NULL, BytesToWrite, bRetrying);
+
         ntStatus = STATUS_PENDING;
     }
     __except( AFSExceptionFilter( __FUNCTION__, GetExceptionCode(), GetExceptionInformation()) )