respecting FILE_WRITE_THROUGH flag on open
This commit is contained in:
parent
0285d46a26
commit
73294dff68
1 changed files with 11 additions and 5 deletions
|
|
@ -417,6 +417,7 @@ typedef struct _NFS41_FOBX {
|
||||||
DWORD acl_len;
|
DWORD acl_len;
|
||||||
LARGE_INTEGER time;
|
LARGE_INTEGER time;
|
||||||
DWORD deleg_type;
|
DWORD deleg_type;
|
||||||
|
BOOLEAN write_thru;
|
||||||
} NFS41_FOBX, *PNFS41_FOBX;
|
} NFS41_FOBX, *PNFS41_FOBX;
|
||||||
#define NFS41GetFobxExtension(pFobx) \
|
#define NFS41GetFobxExtension(pFobx) \
|
||||||
(((pFobx) == NULL) ? NULL : (PNFS41_FOBX)((pFobx)->Context))
|
(((pFobx) == NULL) ? NULL : (PNFS41_FOBX)((pFobx)->Context))
|
||||||
|
|
@ -3548,7 +3549,9 @@ NTSTATUS nfs41_Create(
|
||||||
SrvOpen->BufferingFlags |=
|
SrvOpen->BufferingFlags |=
|
||||||
(FCB_STATE_WRITECACHING_ENABLED |
|
(FCB_STATE_WRITECACHING_ENABLED |
|
||||||
FCB_STATE_WRITEBUFFERING_ENABLED);
|
FCB_STATE_WRITEBUFFERING_ENABLED);
|
||||||
}
|
} else if (params.CreateOptions & FILE_WRITE_THROUGH ||
|
||||||
|
pVNetRootContext->write_thru)
|
||||||
|
nfs41_fobx->write_thru = TRUE;
|
||||||
if (entry->u.Open.deleg_type >= 1 ||
|
if (entry->u.Open.deleg_type >= 1 ||
|
||||||
params.DesiredAccess & FILE_READ_DATA) {
|
params.DesiredAccess & FILE_READ_DATA) {
|
||||||
#ifdef DEBUG_OPEN
|
#ifdef DEBUG_OPEN
|
||||||
|
|
@ -5147,10 +5150,12 @@ void enable_caching(
|
||||||
|
|
||||||
if (SrvOpen->DesiredAccess & FILE_READ_DATA)
|
if (SrvOpen->DesiredAccess & FILE_READ_DATA)
|
||||||
flag = ENABLE_READ_CACHING;
|
flag = ENABLE_READ_CACHING;
|
||||||
if (SrvOpen->DesiredAccess & FILE_WRITE_DATA)
|
if ((SrvOpen->DesiredAccess & FILE_WRITE_DATA) &&
|
||||||
|
!nfs41_fobx->write_thru)
|
||||||
flag = ENABLE_WRITE_CACHING;
|
flag = ENABLE_WRITE_CACHING;
|
||||||
if ((SrvOpen->DesiredAccess & FILE_READ_DATA) &&
|
if ((SrvOpen->DesiredAccess & FILE_READ_DATA) &&
|
||||||
(SrvOpen->DesiredAccess & FILE_WRITE_DATA))
|
(SrvOpen->DesiredAccess & FILE_WRITE_DATA) &&
|
||||||
|
!nfs41_fobx->write_thru)
|
||||||
flag = ENABLE_READWRITE_CACHING;
|
flag = ENABLE_READWRITE_CACHING;
|
||||||
|
|
||||||
#if defined(DEBUG_TIME_BASED_COHERENCY) || \
|
#if defined(DEBUG_TIME_BASED_COHERENCY) || \
|
||||||
|
|
@ -5383,14 +5388,15 @@ NTSTATUS nfs41_Write(
|
||||||
nfs41_fcb->changeattr = entry->u.ReadWrite.ChangeTime;
|
nfs41_fcb->changeattr = entry->u.ReadWrite.ChangeTime;
|
||||||
|
|
||||||
//re-enable write buffering
|
//re-enable write buffering
|
||||||
if ((!BooleanFlagOn(LowIoContext->ParamsFor.ReadWrite.Flags,
|
if (!BooleanFlagOn(LowIoContext->ParamsFor.ReadWrite.Flags,
|
||||||
LOWIO_READWRITEFLAG_PAGING_IO) &&
|
LOWIO_READWRITEFLAG_PAGING_IO) &&
|
||||||
(SrvOpen->DesiredAccess & (FILE_WRITE_DATA | FILE_APPEND_DATA)) &&
|
(SrvOpen->DesiredAccess & (FILE_WRITE_DATA | FILE_APPEND_DATA)) &&
|
||||||
!pVNetRootContext->write_thru &&
|
!pVNetRootContext->write_thru &&
|
||||||
!pVNetRootContext->nocache &&
|
!pVNetRootContext->nocache &&
|
||||||
|
!nfs41_fobx->write_thru &&
|
||||||
!(SrvOpen->BufferingFlags &
|
!(SrvOpen->BufferingFlags &
|
||||||
(FCB_STATE_WRITEBUFFERING_ENABLED |
|
(FCB_STATE_WRITEBUFFERING_ENABLED |
|
||||||
FCB_STATE_WRITECACHING_ENABLED)))) {
|
FCB_STATE_WRITECACHING_ENABLED))) {
|
||||||
enable_caching(SrvOpen, nfs41_fobx, nfs41_fcb->changeattr,
|
enable_caching(SrvOpen, nfs41_fobx, nfs41_fcb->changeattr,
|
||||||
pVNetRootContext->session);
|
pVNetRootContext->session);
|
||||||
} else if (!nfs41_fobx->deleg_type)
|
} else if (!nfs41_fobx->deleg_type)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue