mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 16:33:02 -05:00
sys: FspIopRetryPrepareIrp()
This commit is contained in:
parent
dde82a1081
commit
b2e6ec0f44
@ -405,13 +405,10 @@ NTSTATUS FspFsvolCreatePrepare(
|
||||
FileObject = FspIopRequestContext(Request, RequestFileObject);
|
||||
|
||||
/* lock the FileNode for overwriting */
|
||||
Success = FspFileNodeTryAcquireExclusive(FileNode, Both);
|
||||
Success = DEBUGRANDTEST(90, TRUE) && FspFileNodeTryAcquireExclusive(FileNode, Both);
|
||||
if (!Success)
|
||||
{
|
||||
/* repost the IRP to retry later */
|
||||
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension =
|
||||
FspFsvolDeviceExtension(IrpSp->DeviceObject);
|
||||
FspIoqPostIrpBestEffort(FsvolDeviceExtension->Ioq, Irp, &Result);
|
||||
FspIopRetryPrepareIrp(Irp, &Result);
|
||||
return Result;
|
||||
}
|
||||
|
||||
|
@ -424,6 +424,7 @@ NTSTATUS FspIopPostWorkRequestFunnel(PDEVICE_OBJECT DeviceObject,
|
||||
FSP_FSCTL_TRANSACT_REQ *Request, BOOLEAN BestEffort);
|
||||
VOID FspIopCompleteIrpEx(PIRP Irp, NTSTATUS Result, BOOLEAN DeviceDereference);
|
||||
VOID FspIopCompleteCanceledIrp(PIRP Irp);
|
||||
BOOLEAN FspIopRetryPrepareIrp(PIRP Irp, NTSTATUS *PResult);
|
||||
BOOLEAN FspIopRetryCompleteIrp(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response, NTSTATUS *PResult);
|
||||
FSP_FSCTL_TRANSACT_RSP *FspIopIrpResponse(PIRP Irp);
|
||||
NTSTATUS FspIopDispatchPrepare(PIRP Irp, FSP_FSCTL_TRANSACT_REQ *Request);
|
||||
|
@ -562,6 +562,7 @@ NTSTATUS FspFsvolQueryInformationComplete(
|
||||
|
||||
ASSERT(FSP_STATUS_IOQ_POST != Result);
|
||||
|
||||
if (STATUS_PENDING != Result)
|
||||
Irp->IoStatus.Information = (UINT_PTR)((PUINT8)Buffer - (PUINT8)Irp->AssociatedIrp.SystemBuffer);
|
||||
|
||||
FSP_LEAVE_IOC("%s, FileObject=%p",
|
||||
|
@ -18,6 +18,7 @@ NTSTATUS FspIopPostWorkRequestFunnel(PDEVICE_OBJECT DeviceObject,
|
||||
static IO_COMPLETION_ROUTINE FspIopPostWorkRequestCompletion;
|
||||
VOID FspIopCompleteIrpEx(PIRP Irp, NTSTATUS Result, BOOLEAN DeviceDereference);
|
||||
VOID FspIopCompleteCanceledIrp(PIRP Irp);
|
||||
BOOLEAN FspIopRetryPrepareIrp(PIRP Irp, NTSTATUS *PResult);
|
||||
BOOLEAN FspIopRetryCompleteIrp(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response, NTSTATUS *PResult);
|
||||
FSP_FSCTL_TRANSACT_RSP *FspIopIrpResponse(PIRP Irp);
|
||||
NTSTATUS FspIopDispatchPrepare(PIRP Irp, FSP_FSCTL_TRANSACT_REQ *Request);
|
||||
@ -31,6 +32,7 @@ NTSTATUS FspIopDispatchComplete(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response
|
||||
#pragma alloc_text(PAGE, FspIopPostWorkRequestFunnel)
|
||||
#pragma alloc_text(PAGE, FspIopCompleteIrpEx)
|
||||
#pragma alloc_text(PAGE, FspIopCompleteCanceledIrp)
|
||||
#pragma alloc_text(PAGE, FspIopRetryPrepareIrp)
|
||||
#pragma alloc_text(PAGE, FspIopRetryCompleteIrp)
|
||||
#pragma alloc_text(PAGE, FspIopIrpResponse)
|
||||
#pragma alloc_text(PAGE, FspIopDispatchPrepare)
|
||||
@ -266,6 +268,16 @@ VOID FspIopCompleteCanceledIrp(PIRP Irp)
|
||||
FspIopCompleteIrpEx(Irp, STATUS_CANCELLED, TRUE);
|
||||
}
|
||||
|
||||
BOOLEAN FspIopRetryPrepareIrp(PIRP Irp, NTSTATUS *PResult)
|
||||
{
|
||||
PAGED_CODE();
|
||||
|
||||
PDEVICE_OBJECT DeviceObject = IoGetCurrentIrpStackLocation(Irp)->DeviceObject;
|
||||
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(DeviceObject);
|
||||
|
||||
return FspIoqPostIrpBestEffort(FsvolDeviceExtension->Ioq, Irp, PResult);
|
||||
}
|
||||
|
||||
BOOLEAN FspIopRetryCompleteIrp(PIRP Irp, const FSP_FSCTL_TRANSACT_RSP *Response, NTSTATUS *PResult)
|
||||
{
|
||||
PAGED_CODE();
|
||||
|
Loading…
x
Reference in New Issue
Block a user