From 31c40d017d6e016178ac897eb68250896d61eb41 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Fri, 4 Nov 2016 13:08:10 -0700 Subject: [PATCH] sys: create: allow user mode file system to disable caching for individual files --- inc/winfsp/fsctl.h | 1 + src/sys/create.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/inc/winfsp/fsctl.h b/inc/winfsp/fsctl.h index 81b314cc..7dcc92e6 100644 --- a/inc/winfsp/fsctl.h +++ b/inc/winfsp/fsctl.h @@ -388,6 +388,7 @@ typedef struct UINT32 GrantedAccess; /* FILE_{READ_DATA,WRITE_DATA,etc.} */ FSP_FSCTL_FILE_INFO FileInfo; FSP_FSCTL_TRANSACT_BUF FileName; + UINT32 DisableCache:1; } Opened; /* IoStatus.Status == STATUS_REPARSE */ struct diff --git a/src/sys/create.c b/src/sys/create.c index 0ab32728..71843c5b 100644 --- a/src/sys/create.c +++ b/src/sys/create.c @@ -843,7 +843,8 @@ NTSTATUS FspFsvolCreateComplete( FileObject->FsContext = FileNode; FileObject->FsContext2 = FileDesc; if (FspTimeoutInfinity32 == FsvolDeviceExtension->VolumeParams.FileInfoTimeout && - !FlagOn(IrpSp->Parameters.Create.Options, FILE_NO_INTERMEDIATE_BUFFERING)) + !FlagOn(IrpSp->Parameters.Create.Options, FILE_NO_INTERMEDIATE_BUFFERING) && + !Response->Rsp.Create.Opened.DisableCache) /* enable caching! */ SetFlag(FileObject->Flags, FO_CACHE_SUPPORTED);