mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 00:43:00 -05:00
sys: FspFsvolCreateSharingViolationOplock: fix problem with missed FspFsvolCreatePostClose
This commit is contained in:
parent
6e70500afc
commit
bfc41127d0
@ -878,7 +878,6 @@ NTSTATUS FspFsvolCreateComplete(
|
|||||||
|
|
||||||
Result = FspFsvolCreateSharingViolationOplock(
|
Result = FspFsvolCreateSharingViolationOplock(
|
||||||
FsvolDeviceObject, Irp, IrpSp, FALSE);
|
FsvolDeviceObject, Irp, IrpSp, FALSE);
|
||||||
if (STATUS_PENDING == Result)
|
|
||||||
FSP_RETURN();
|
FSP_RETURN();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1317,6 +1316,7 @@ static NTSTATUS FspFsvolCreateSharingViolationOplock(
|
|||||||
|
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request = FspIrpRequest(Irp);
|
FSP_FSCTL_TRANSACT_REQ *Request = FspIrpRequest(Irp);
|
||||||
FSP_FSCTL_TRANSACT_RSP *Response;
|
FSP_FSCTL_TRANSACT_RSP *Response;
|
||||||
|
FSP_FILE_DESC *FileDesc = FspIopRequestContext(Request, RequestFileDesc);
|
||||||
FSP_FILE_NODE *ExtraFileNode = FspIopRequestContext(Request, FspIopRequestExtraContext);
|
FSP_FILE_NODE *ExtraFileNode = FspIopRequestContext(Request, FspIopRequestExtraContext);
|
||||||
ULONG SharingViolationReason = (ULONG)Irp->IoStatus.Information;
|
ULONG SharingViolationReason = (ULONG)Irp->IoStatus.Information;
|
||||||
NTSTATUS Result;
|
NTSTATUS Result;
|
||||||
@ -1353,6 +1353,12 @@ static NTSTATUS FspFsvolCreateSharingViolationOplock(
|
|||||||
return FspWqRepostIrpWorkItem(Irp,
|
return FspWqRepostIrpWorkItem(Irp,
|
||||||
FspFsvolCreateSharingViolationOplock, FspFsvolCreateRequestFini);
|
FspFsvolCreateSharingViolationOplock, FspFsvolCreateRequestFini);
|
||||||
|
|
||||||
|
FspFileNodeClose(ExtraFileNode, 0, TRUE);
|
||||||
|
FspFileNodeDereference(ExtraFileNode);
|
||||||
|
FspIopRequestContext(Request, FspIopRequestExtraContext) = 0;
|
||||||
|
|
||||||
|
FspFsvolCreatePostClose(FileDesc);
|
||||||
|
|
||||||
Irp->IoStatus.Information = 0;
|
Irp->IoStatus.Information = 0;
|
||||||
return STATUS_SHARING_VIOLATION;
|
return STATUS_SHARING_VIOLATION;
|
||||||
}
|
}
|
||||||
@ -1371,7 +1377,6 @@ static NTSTATUS FspFsvolCreateSharingViolationOplock(
|
|||||||
* stream.
|
* stream.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
FSP_FILE_DESC *FileDesc = FspIopRequestContext(Request, RequestFileDesc);
|
|
||||||
FSP_FILE_NODE *FileNode = FileDesc->FileNode;
|
FSP_FILE_NODE *FileNode = FileDesc->FileNode;
|
||||||
|
|
||||||
/* break Batch oplocks on the main file and this stream */
|
/* break Batch oplocks on the main file and this stream */
|
||||||
@ -1427,14 +1432,14 @@ static NTSTATUS FspFsvolCreateSharingViolationOplock(
|
|||||||
|
|
||||||
Response = FspIopIrpResponse(Irp);
|
Response = FspIopIrpResponse(Irp);
|
||||||
|
|
||||||
if (STATUS_SUCCESS == Result)
|
|
||||||
{
|
|
||||||
FspFileNodeClose(ExtraFileNode, 0, TRUE);
|
FspFileNodeClose(ExtraFileNode, 0, TRUE);
|
||||||
FspFileNodeDereference(ExtraFileNode);
|
FspFileNodeDereference(ExtraFileNode);
|
||||||
FspIopRequestContext(Request, FspIopRequestExtraContext) = 0;
|
FspIopRequestContext(Request, FspIopRequestExtraContext) = 0;
|
||||||
}
|
|
||||||
else
|
if (STATUS_SUCCESS != Result)
|
||||||
{
|
{
|
||||||
|
FspFsvolCreatePostClose(FileDesc);
|
||||||
|
|
||||||
Response->IoStatus.Status = (UINT32)Result;
|
Response->IoStatus.Status = (UINT32)Result;
|
||||||
Response->IoStatus.Information = (UINT32)Irp->IoStatus.Information;
|
Response->IoStatus.Information = (UINT32)Irp->IoStatus.Information;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user