diff --git a/src/sys/driver.h b/src/sys/driver.h index 22408acb..cc5a97bd 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -730,6 +730,7 @@ VOID FspDeviceDeleteAll(VOID); // STATUS_VOLUME_DISMOUNTED : STATUS_DEVICE_NOT_CONNECTED) /* volume management */ +#define FspVolumeTransactEarlyTimeout (1 * 10000ULL) NTSTATUS FspVolumeCreate( PDEVICE_OBJECT FsctlDeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp); VOID FspVolumeDelete( diff --git a/src/sys/volume.c b/src/sys/volume.c index 43e8f811..8e04e671 100644 --- a/src/sys/volume.c +++ b/src/sys/volume.c @@ -619,7 +619,9 @@ NTSTATUS FspVolumeTransact( /* wait for an IRP to arrive */ KeQuerySystemTime(&Timeout); - Timeout.QuadPart += FsvolDeviceExtension->VolumeParams.TransactTimeout * 10000ULL; + Timeout.QuadPart += 0 == RepostedIrp ? + FsvolDeviceExtension->VolumeParams.TransactTimeout * 10000ULL : + FspVolumeTransactEarlyTimeout; /* convert millis to nanos and add to absolute time */ while (0 == (PendingIrp = FspIoqNextPendingIrp(FsvolDeviceExtension->Ioq, 0, &Timeout, Irp))) {