mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 08:23:05 -05:00
sys: avoid using FspFsextProvider unnecessarily
This commit is contained in:
parent
5110b3c5a1
commit
254174b8e9
@ -340,6 +340,7 @@ static NTSTATUS FspFsvolDeviceInit(PDEVICE_OBJECT DeviceObject)
|
|||||||
Result = Provider->DeviceInit(DeviceObject, &FsvolDeviceExtension->VolumeParams);
|
Result = Provider->DeviceInit(DeviceObject, &FsvolDeviceExtension->VolumeParams);
|
||||||
if (!NT_SUCCESS(Result))
|
if (!NT_SUCCESS(Result))
|
||||||
return Result;
|
return Result;
|
||||||
|
FsvolDeviceExtension->Provider = Provider;
|
||||||
FsvolDeviceExtension->InitDoneFsext = 1;
|
FsvolDeviceExtension->InitDoneFsext = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -525,10 +526,8 @@ static VOID FspFsvolDeviceFini(PDEVICE_OBJECT DeviceObject)
|
|||||||
/* finalize any fsext provider */
|
/* finalize any fsext provider */
|
||||||
if (FsvolDeviceExtension->InitDoneFsext)
|
if (FsvolDeviceExtension->InitDoneFsext)
|
||||||
{
|
{
|
||||||
FSP_FSEXT_PROVIDER *Provider = FspFsextProvider(
|
if (0 != FsvolDeviceExtension->Provider)
|
||||||
FsvolDeviceExtension->VolumeParams.FsextControlCode, 0);
|
FsvolDeviceExtension->Provider->DeviceFini(DeviceObject);
|
||||||
if (0 != Provider)
|
|
||||||
Provider->DeviceFini(DeviceObject);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -577,13 +576,8 @@ static VOID FspFsvolDeviceExpirationRoutine(PVOID Context)
|
|||||||
FspMetaCacheInvalidateExpired(FsvolDeviceExtension->DirInfoCache, InterruptTime);
|
FspMetaCacheInvalidateExpired(FsvolDeviceExtension->DirInfoCache, InterruptTime);
|
||||||
FspMetaCacheInvalidateExpired(FsvolDeviceExtension->StreamInfoCache, InterruptTime);
|
FspMetaCacheInvalidateExpired(FsvolDeviceExtension->StreamInfoCache, InterruptTime);
|
||||||
/* run any fsext provider expiration routine */
|
/* run any fsext provider expiration routine */
|
||||||
if (0 != FsvolDeviceExtension->VolumeParams.FsextControlCode)
|
if (0 != FsvolDeviceExtension->Provider)
|
||||||
{
|
FsvolDeviceExtension->Provider->DeviceExpirationRoutine(DeviceObject, InterruptTime);
|
||||||
FSP_FSEXT_PROVIDER *Provider = FspFsextProvider(
|
|
||||||
FsvolDeviceExtension->VolumeParams.FsextControlCode, 0);
|
|
||||||
if (0 != Provider)
|
|
||||||
Provider->DeviceExpirationRoutine(DeviceObject, InterruptTime);
|
|
||||||
}
|
|
||||||
FspIoqRemoveExpired(FsvolDeviceExtension->Ioq, InterruptTime);
|
FspIoqRemoveExpired(FsvolDeviceExtension->Ioq, InterruptTime);
|
||||||
|
|
||||||
KeAcquireSpinLock(&FsvolDeviceExtension->ExpirationLock, &Irql);
|
KeAcquireSpinLock(&FsvolDeviceExtension->ExpirationLock, &Irql);
|
||||||
|
@ -1079,6 +1079,7 @@ typedef struct
|
|||||||
PVPB SwapVpb;
|
PVPB SwapVpb;
|
||||||
FSP_DELAYED_WORK_ITEM DeleteVolumeDelayedWorkItem;
|
FSP_DELAYED_WORK_ITEM DeleteVolumeDelayedWorkItem;
|
||||||
FSP_FSCTL_VOLUME_PARAMS VolumeParams;
|
FSP_FSCTL_VOLUME_PARAMS VolumeParams;
|
||||||
|
FSP_FSEXT_PROVIDER *Provider;
|
||||||
UNICODE_STRING VolumePrefix;
|
UNICODE_STRING VolumePrefix;
|
||||||
UNICODE_PREFIX_TABLE_ENTRY VolumePrefixEntry;
|
UNICODE_PREFIX_TABLE_ENTRY VolumePrefixEntry;
|
||||||
FSP_IOQ *Ioq;
|
FSP_IOQ *Ioq;
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
* the data structure used to store providers (currently 2 parallel
|
* the data structure used to store providers (currently 2 parallel
|
||||||
* arrays) must be revisited.
|
* arrays) must be revisited.
|
||||||
*/
|
*/
|
||||||
#define FSP_FSEXT_PROVIDER_COUNTMAX 4
|
#define FSP_FSEXT_PROVIDER_COUNTMAX 16
|
||||||
|
|
||||||
static KSPIN_LOCK FsextSpinLock = 0;
|
static KSPIN_LOCK FsextSpinLock = 0;
|
||||||
static UINT32 FsextControlCodes[FSP_FSEXT_PROVIDER_COUNTMAX];
|
static UINT32 FsextControlCodes[FSP_FSEXT_PROVIDER_COUNTMAX];
|
||||||
@ -37,23 +37,9 @@ static FSP_FSEXT_PROVIDER *FsextProviders[FSP_FSEXT_PROVIDER_COUNTMAX];
|
|||||||
static inline
|
static inline
|
||||||
FSP_FSEXT_PROVIDER *FspFsextProviderGet(UINT32 FsextControlCode)
|
FSP_FSEXT_PROVIDER *FspFsextProviderGet(UINT32 FsextControlCode)
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
for (ULONG I = 0; FSP_FSEXT_PROVIDER_COUNTMAX > I; I++)
|
for (ULONG I = 0; FSP_FSEXT_PROVIDER_COUNTMAX > I; I++)
|
||||||
if (FsextControlCode == FsextControlCodes[I])
|
if (FsextControlCode == FsextControlCodes[I])
|
||||||
return FsextProviders[I];
|
return FsextProviders[I];
|
||||||
#else
|
|
||||||
/* unroll by hand */
|
|
||||||
FSP_FSCTL_STATIC_ASSERT(4 == FSP_FSEXT_PROVIDER_COUNTMAX,
|
|
||||||
"unrolled loop expects FsextProviders to have 4 elements");
|
|
||||||
if (FsextControlCode == FsextControlCodes[0])
|
|
||||||
return FsextProviders[0];
|
|
||||||
if (FsextControlCode == FsextControlCodes[1])
|
|
||||||
return FsextProviders[1];
|
|
||||||
if (FsextControlCode == FsextControlCodes[2])
|
|
||||||
return FsextProviders[2];
|
|
||||||
if (FsextControlCode == FsextControlCodes[3])
|
|
||||||
return FsextProviders[3];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -992,14 +992,13 @@ NTSTATUS FspVolumeTransactFsext(
|
|||||||
if (!FspDeviceReference(FsvolDeviceObject))
|
if (!FspDeviceReference(FsvolDeviceObject))
|
||||||
return STATUS_CANCELLED;
|
return STATUS_CANCELLED;
|
||||||
|
|
||||||
|
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject);
|
||||||
NTSTATUS Result = STATUS_INVALID_DEVICE_REQUEST;
|
NTSTATUS Result = STATUS_INVALID_DEVICE_REQUEST;
|
||||||
if (IrpSp->Parameters.FileSystemControl.FsControlCode ==
|
if (IrpSp->Parameters.FileSystemControl.FsControlCode ==
|
||||||
FspFsvolDeviceExtension(FsvolDeviceObject)->VolumeParams.FsextControlCode)
|
FsvolDeviceExtension->VolumeParams.FsextControlCode)
|
||||||
{
|
{
|
||||||
FSP_FSEXT_PROVIDER *Provider = FspFsextProvider(
|
if (0 != FsvolDeviceExtension->Provider)
|
||||||
IrpSp->Parameters.FileSystemControl.FsControlCode, 0);
|
Result = FsvolDeviceExtension->Provider->DeviceTransact(FsvolDeviceObject, Irp);
|
||||||
if (0 != Provider)
|
|
||||||
Result = Provider->DeviceTransact(FsvolDeviceObject, Irp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FspDeviceDereference(FsvolDeviceObject);
|
FspDeviceDereference(FsvolDeviceObject);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user