Compare commits

...

7 Commits

Author SHA1 Message Date
7985827c73 build: update version number 2020-08-08 10:13:31 -07:00
13146e4854 update Changelog 2020-08-08 10:09:00 -07:00
84e0744c28 sys: FspVolumeTransact: FSP_FSCTL_TRANSACT_INTERNAL
Zero out OutputBuffer on error to avoid confusion for fsext providers.
2020-07-29 22:51:17 -07:00
20e19cb0fc update Changelog 2020-07-24 12:56:24 -07:00
2326521ef8 appveyor: disable cygfuse x86 build
This improves slow builds.
2020-07-22 15:45:04 -07:00
0296502f24 sys: FspFsvolReadNonCached: acquire FileNode shared
See GitHub issue #291 for discussion
2020-07-22 15:42:06 -07:00
5d0b10d0b6 Changelog: add missing changes for v1.7 2020-07-07 13:56:53 -07:00
5 changed files with 45 additions and 14 deletions

View File

@ -1,6 +1,25 @@
= Changelog = Changelog
v1.8B2 (2020.2 B2)::
Changes since v1.7:
* [FSD] WinFsp now supports Windows containers. See the link:doc/WinFsp-Container-Support.asciidoc[WinFsp Container Support] document for details.
* [FSD] The `FSP_FSCTL_QUERY_WINFSP` code provides a simple method to determine if
the file system backing a file is a WinFsp file system. To use issue a
+
----
DeviceIoControl(Handle, FSP_FSCTL_QUERY_WINFSP, 0, 0, 0, 0, &Bytes, 0)
----
+
If the return value is TRUE this is a WinFsp file system.
* [FSD] A fix regarding concurrency of READs on the same file: WinFsp was supposed to allow concurrent READ requests on the same file (e.g. two concurrent overlapped `ReadFile` requests on the same `HANDLE`) to be handled concurrently by the file system; unfortunately due to a problem in recent versions of WinFsp READ requests on the same file were serialized. This problem has now been fixed. See GitHub issue #291 for more details.
** *NOTE*: It may be that some file system was inadvertently relying on WinFsp's implicit serialization of READs in this case. Please test your file system thoroughly against this version, especially with regard to READ serialization. Related XKCD: https://imgs.xkcd.com/comics/workflow.png
v1.8B1 (2020.2 B1):: v1.8B1 (2020.2 B1)::
Changes since v1.7: Changes since v1.7:
@ -16,6 +35,20 @@ DeviceIoControl(Handle, FSP_FSCTL_QUERY_WINFSP, 0, 0, 0, 0, &Bytes, 0)
If the return value is TRUE this is a WinFsp file system. If the return value is TRUE this is a WinFsp file system.
v1.7 (2020.1)::
Changes since v1.6:
* [FUSE] FUSE invalid directory entries no longer break the entire directory listing. Such invalid directory entries are logged. (GitHub PR #292.)
* [LAUNCH] The Launcher can now restart file systems that have crashed. Set `Recovery=1` in the file system's registry entry.
* [LAUNCH] The Launcher can now redirect file system standard error output. Set `Stderr=PATH` in the file system's registry entry.
* [FIX] Work around a problem in CreateProcess/CreateSection that allowed a faulty or malicious file system to bugcheck Windows.
* [FIX] Work around an incompatibility with Avast Antivirus.
** Native and .NET file systems that experience this problem should set the flag `RejectIrpPriorToTransact0` in `FSP_FSCTL_VOLUME_PARAMS` to `1`. This is only required when mounting on a directory with Avast Antivirus present.
** FUSE file systems do not need to do anything special as this flag is always enabled.
* [FIX] Fix junction (mount point reparse point) handling. (GitHub issue #269.)
v1.7B2 (2020.1 B2):: v1.7B2 (2020.1 B2)::
Changes since v1.6: Changes since v1.6:

View File

@ -35,8 +35,8 @@ build_script:
# build cygfuse # build cygfuse
- C:\cygwin64\setup-x86_64.exe -qnNd -P cygport - C:\cygwin64\setup-x86_64.exe -qnNd -P cygport
- C:\cygwin64\bin\bash --login -c "make -C '%CD%\opt\cygfuse' dist" - C:\cygwin64\bin\bash --login -c "make -C '%CD%\opt\cygfuse' dist"
- C:\cygwin\setup-x86.exe -qnNd -P cygport #- C:\cygwin\setup-x86.exe -qnNd -P cygport
- C:\cygwin\bin\bash --login -c "make -C '%CD%\opt\cygfuse' dist" #- C:\cygwin\bin\bash --login -c "make -C '%CD%\opt\cygfuse' dist"
# build winfsp # build winfsp
- tools\build.bat %CONFIGURATION% - tools\build.bat %CONFIGURATION%

View File

@ -18,7 +18,7 @@
<MyCanonicalVersion>1.8</MyCanonicalVersion> <MyCanonicalVersion>1.8</MyCanonicalVersion>
<MyProductVersion>2020.2 Beta1</MyProductVersion> <MyProductVersion>2020.2 Beta2</MyProductVersion>
<MyProductStage>Beta</MyProductStage> <MyProductStage>Beta</MyProductStage>
<MyVersion>$(MyCanonicalVersion).$(MyBuildNumber)</MyVersion> <MyVersion>$(MyCanonicalVersion).$(MyBuildNumber)</MyVersion>

View File

@ -249,9 +249,9 @@ static NTSTATUS FspFsvolReadNonCached(
if (!NT_SUCCESS(Result)) if (!NT_SUCCESS(Result))
return Result; return Result;
/* acquire FileNode exclusive Full */ /* acquire FileNode shared Full */
Success = DEBUGTEST(90) && Success = DEBUGTEST(90) &&
FspFileNodeTryAcquireExclusiveF(FileNode, FspFileNodeAcquireFull, CanWait); FspFileNodeTryAcquireSharedF(FileNode, FspFileNodeAcquireFull, CanWait);
if (!Success) if (!Success)
return FspWqRepostIrpWorkItem(Irp, FspFsvolReadNonCached, 0); return FspWqRepostIrpWorkItem(Irp, FspFsvolReadNonCached, 0);
@ -279,22 +279,22 @@ static NTSTATUS FspFsvolReadNonCached(
/* if this is a non-cached transfer on a cached file then flush the file */ /* if this is a non-cached transfer on a cached file then flush the file */
if (!PagingIo && 0 != FileObject->SectionObjectPointer->DataSectionObject) if (!PagingIo && 0 != FileObject->SectionObjectPointer->DataSectionObject)
{
if (!CanWait)
{ {
FspFileNodeRelease(FileNode, Full); FspFileNodeRelease(FileNode, Full);
if (!CanWait)
return FspWqRepostIrpWorkItem(Irp, FspFsvolReadNonCached, 0); return FspWqRepostIrpWorkItem(Irp, FspFsvolReadNonCached, 0);
}
/* need to acquire exclusive for flushing */
FspFileNodeAcquireExclusive(FileNode, Full);
Result = FspFileNodeFlushAndPurgeCache(FileNode, Result = FspFileNodeFlushAndPurgeCache(FileNode,
IrpSp->Parameters.Read.ByteOffset.QuadPart, IrpSp->Parameters.Read.ByteOffset.QuadPart,
IrpSp->Parameters.Read.Length, IrpSp->Parameters.Read.Length,
FALSE); FALSE);
if (!NT_SUCCESS(Result))
{
FspFileNodeRelease(FileNode, Full); FspFileNodeRelease(FileNode, Full);
if (!NT_SUCCESS(Result))
return Result; return Result;
}
FspFileNodeAcquireShared(FileNode, Full);
} }
/* trim ReadLength during CreateProcess; resolve bugcheck for filesystem that reports incorrect size */ /* trim ReadLength during CreateProcess; resolve bugcheck for filesystem that reports incorrect size */
@ -310,9 +310,6 @@ static NTSTATUS FspFsvolReadNonCached(
ReadLength = (ULONG)(FileInfo.FileSize - ReadOffset.QuadPart); ReadLength = (ULONG)(FileInfo.FileSize - ReadOffset.QuadPart);
} }
/* convert FileNode to shared */
FspFileNodeConvertExclusiveToShared(FileNode, Full);
Request = FspIrpRequest(Irp); Request = FspIrpRequest(Irp);
if (0 == Request) if (0 == Request)
{ {

View File

@ -965,6 +965,7 @@ NTSTATUS FspVolumeTransact(
if (0 != InternalBuffer) if (0 != InternalBuffer)
{ {
ASSERT(FSP_FSCTL_TRANSACT_INTERNAL == ControlCode); ASSERT(FSP_FSCTL_TRANSACT_INTERNAL == ControlCode);
*(PVOID *)OutputBuffer = 0;
FspFree(InternalBuffer); FspFree(InternalBuffer);
} }
FspIopCompleteCanceledIrp(PendingIrp); FspIopCompleteCanceledIrp(PendingIrp);