mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 16:33:02 -05:00
sys: default TransactTimeout changes
This commit is contained in:
parent
3902874ac9
commit
781deff06f
@ -121,7 +121,7 @@ enum
|
|||||||
{
|
{
|
||||||
FspFsctlTransactTimeoutMinimum = 1000,
|
FspFsctlTransactTimeoutMinimum = 1000,
|
||||||
FspFsctlTransactTimeoutMaximum = 10000,
|
FspFsctlTransactTimeoutMaximum = 10000,
|
||||||
FspFsctlTransactTimeoutDefault = 1000,
|
FspFsctlTransactTimeoutDefault = 1000, /* DEPRECATED: default is unspecified */
|
||||||
FspFsctlIrpTimeoutMinimum = 60000,
|
FspFsctlIrpTimeoutMinimum = 60000,
|
||||||
FspFsctlIrpTimeoutMaximum = 600000,
|
FspFsctlIrpTimeoutMaximum = 600000,
|
||||||
FspFsctlIrpTimeoutDefault = 300000,
|
FspFsctlIrpTimeoutDefault = 300000,
|
||||||
@ -139,7 +139,7 @@ enum
|
|||||||
UINT64 VolumeCreationTime;\
|
UINT64 VolumeCreationTime;\
|
||||||
UINT32 VolumeSerialNumber;\
|
UINT32 VolumeSerialNumber;\
|
||||||
/* I/O timeouts, capacity, etc. */\
|
/* I/O timeouts, capacity, etc. */\
|
||||||
UINT32 TransactTimeout; /* FSP_FSCTL_TRANSACT timeout (millis; 1 sec - 10 sec) */\
|
UINT32 TransactTimeout; /* DEPRECATED: (millis; 1 sec - 10 sec) */\
|
||||||
UINT32 IrpTimeout; /* pending IRP timeout (millis; 1 min - 10 min) */\
|
UINT32 IrpTimeout; /* pending IRP timeout (millis; 1 min - 10 min) */\
|
||||||
UINT32 IrpCapacity; /* maximum number of pending IRP's (100 - 1000)*/\
|
UINT32 IrpCapacity; /* maximum number of pending IRP's (100 - 1000)*/\
|
||||||
UINT32 FileInfoTimeout; /* FileInfo/Security/VolumeInfo timeout (millis) */\
|
UINT32 FileInfoTimeout; /* FileInfo/Security/VolumeInfo timeout (millis) */\
|
||||||
|
@ -1216,7 +1216,6 @@ NTSTATUS FspMupHandleIrp(
|
|||||||
PDEVICE_OBJECT FsmupDeviceObject, PIRP Irp);
|
PDEVICE_OBJECT FsmupDeviceObject, PIRP Irp);
|
||||||
|
|
||||||
/* volume management */
|
/* volume management */
|
||||||
#define FspVolumeTransactEarlyTimeout (1 * 10000ULL)
|
|
||||||
NTSTATUS FspVolumeCreate(
|
NTSTATUS FspVolumeCreate(
|
||||||
PDEVICE_OBJECT FsctlDeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
|
PDEVICE_OBJECT FsctlDeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp);
|
||||||
VOID FspVolumeDelete(
|
VOID FspVolumeDelete(
|
||||||
|
@ -688,6 +688,12 @@ BOOLEAN FspIoqRetryCompleteIrp(FSP_IOQ *Ioq, PIRP Irp, NTSTATUS *PResult)
|
|||||||
Result = FspCsqInsertIrpEx(&Ioq->RetriedIoCsq, Irp, 0, 0);
|
Result = FspCsqInsertIrpEx(&Ioq->RetriedIoCsq, Irp, 0, 0);
|
||||||
if (NT_SUCCESS(Result))
|
if (NT_SUCCESS(Result))
|
||||||
{
|
{
|
||||||
|
/* wake up a waiter */
|
||||||
|
KIRQL Irql;
|
||||||
|
KeAcquireSpinLock(&Ioq->SpinLock, &Irql);
|
||||||
|
FspIoqEventSet(&Ioq->PendingIrpEvent);
|
||||||
|
KeReleaseSpinLock(&Ioq->SpinLock, Irql);
|
||||||
|
|
||||||
if (0 != PResult)
|
if (0 != PResult)
|
||||||
*PResult = STATUS_PENDING;
|
*PResult = STATUS_PENDING;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -132,7 +132,9 @@ static NTSTATUS FspVolumeCreateNoLock(
|
|||||||
VolumeParams.SectorsPerAllocationUnit = 1;
|
VolumeParams.SectorsPerAllocationUnit = 1;
|
||||||
if (0 == VolumeParams.MaxComponentLength)
|
if (0 == VolumeParams.MaxComponentLength)
|
||||||
VolumeParams.MaxComponentLength = 255;
|
VolumeParams.MaxComponentLength = 255;
|
||||||
if (FspFsctlTransactTimeoutMinimum > VolumeParams.TransactTimeout ||
|
if (0 == VolumeParams.TransactTimeout)
|
||||||
|
VolumeParams.TransactTimeout = 24 * 60 * 60 * 1000; /* 1 day */
|
||||||
|
else if (FspFsctlTransactTimeoutMinimum > VolumeParams.TransactTimeout ||
|
||||||
VolumeParams.TransactTimeout > FspFsctlTransactTimeoutMaximum)
|
VolumeParams.TransactTimeout > FspFsctlTransactTimeoutMaximum)
|
||||||
VolumeParams.TransactTimeout = FspFsctlTransactTimeoutDefault;
|
VolumeParams.TransactTimeout = FspFsctlTransactTimeoutDefault;
|
||||||
if (FspFsctlIrpTimeoutMinimum > VolumeParams.IrpTimeout ||
|
if (FspFsctlIrpTimeoutMinimum > VolumeParams.IrpTimeout ||
|
||||||
@ -770,17 +772,17 @@ NTSTATUS FspVolumeTransact(
|
|||||||
|
|
||||||
/* wait for an IRP to arrive */
|
/* wait for an IRP to arrive */
|
||||||
KeQuerySystemTime(&Timeout);
|
KeQuerySystemTime(&Timeout);
|
||||||
Timeout.QuadPart += 0 == RepostedIrp ?
|
Timeout.QuadPart += FsvolDeviceExtension->VolumeParams.TransactTimeout * 10000ULL;
|
||||||
FsvolDeviceExtension->VolumeParams.TransactTimeout * 10000ULL :
|
|
||||||
FspVolumeTransactEarlyTimeout;
|
|
||||||
/* convert millis to nanos and add to absolute time */
|
/* convert millis to nanos and add to absolute time */
|
||||||
while (0 == (PendingIrp = FspIoqNextPendingIrp(FsvolDeviceExtension->Ioq, 0, &Timeout, Irp)))
|
if (0 == (PendingIrp = FspIoqNextPendingIrp(FsvolDeviceExtension->Ioq, 0, &Timeout, Irp)))
|
||||||
{
|
{
|
||||||
if (FspIoqStopped(FsvolDeviceExtension->Ioq))
|
if (FspIoqStopped(FsvolDeviceExtension->Ioq))
|
||||||
{
|
{
|
||||||
Result = STATUS_CANCELLED;
|
Result = STATUS_CANCELLED;
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PendingIrp = FspIoqTimeout;
|
||||||
}
|
}
|
||||||
if (FspIoqTimeout == PendingIrp || FspIoqCancelled == PendingIrp)
|
if (FspIoqTimeout == PendingIrp || FspIoqCancelled == PendingIrp)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user