adding writethru mount option
for large writes it is beneficial to turnoff write buffering and allow large write buffer sizes than 1M (for win 7).
This commit is contained in:
parent
37f3fa0862
commit
aed1493e90
1 changed files with 13 additions and 2 deletions
|
|
@ -318,6 +318,7 @@ typedef struct _NFS41_MOUNT_CONFIG {
|
|||
DWORD ReadSize;
|
||||
DWORD WriteSize;
|
||||
BOOLEAN ReadOnly;
|
||||
BOOLEAN write_thru;
|
||||
WCHAR srv_buffer[SERVER_NAME_BUFFER_SIZE];
|
||||
UNICODE_STRING SrvName;
|
||||
WCHAR mntpt_buffer[MAX_PATH];
|
||||
|
|
@ -350,6 +351,7 @@ typedef struct _NFS41_V_NET_ROOT_EXTENSION {
|
|||
LONG FsAttrsLen;
|
||||
DWORD sec_flavor;
|
||||
BOOLEAN read_only;
|
||||
BOOLEAN write_thru;
|
||||
#define STORE_MOUNT_SEC_CONTEXT
|
||||
#ifdef STORE_MOUNT_SEC_CONTEXT
|
||||
SECURITY_CLIENT_CONTEXT mount_sec_ctx;
|
||||
|
|
@ -2409,6 +2411,7 @@ void nfs41_MountConfig_InitDefaults(
|
|||
Config->ReadSize = MOUNT_CONFIG_RW_SIZE_DEFAULT;
|
||||
Config->WriteSize = MOUNT_CONFIG_RW_SIZE_DEFAULT;
|
||||
Config->ReadOnly = FALSE;
|
||||
Config->write_thru = FALSE;
|
||||
Config->SrvName.Length = 0;
|
||||
Config->SrvName.MaximumLength = SERVER_NAME_BUFFER_SIZE;
|
||||
Config->SrvName.Buffer = Config->srv_buffer;
|
||||
|
|
@ -2500,6 +2503,11 @@ NTSTATUS nfs41_MountConfig_ParseOptions(
|
|||
status = nfs41_MountConfig_ParseBoolean(Option, &usValue,
|
||||
&Config->ReadOnly);
|
||||
}
|
||||
else if (wcsncmp(L"writethru", Name, NameLen) == 0)
|
||||
{
|
||||
status = nfs41_MountConfig_ParseBoolean(Option, &usValue,
|
||||
&Config->write_thru);
|
||||
}
|
||||
else if (wcsncmp(L"rsize", Name, NameLen) == 0)
|
||||
{
|
||||
status = nfs41_MountConfig_ParseDword(Option, &usValue,
|
||||
|
|
@ -2699,6 +2707,7 @@ NTSTATUS nfs41_CreateVNetRoot(
|
|||
if (status != STATUS_SUCCESS)
|
||||
goto out;
|
||||
pVNetRootContext->read_only = Config.ReadOnly;
|
||||
pVNetRootContext->write_thru = Config.write_thru;
|
||||
} else {
|
||||
/* use the SRV_CALL name (without leading \) as the hostname */
|
||||
Config.SrvName.Buffer = pSrvCall->pSrvCallName->Buffer + 1;
|
||||
|
|
@ -3335,7 +3344,8 @@ NTSTATUS nfs41_Create(
|
|||
// the file was opened read-only.
|
||||
if (/*(params.DesiredAccess & FILE_READ_DATA) && */
|
||||
(params.DesiredAccess & FILE_WRITE_DATA ||
|
||||
params.DesiredAccess & FILE_APPEND_DATA))
|
||||
params.DesiredAccess & FILE_APPEND_DATA) &&
|
||||
!pVNetRootContext->write_thru)
|
||||
SrvOpen->BufferingFlags |=
|
||||
(FCB_STATE_WRITECACHING_ENABLED | FCB_STATE_WRITEBUFFERING_ENABLED);
|
||||
#endif
|
||||
|
|
@ -5084,6 +5094,7 @@ NTSTATUS nfs41_Write (
|
|||
LOWIO_READWRITEFLAG_PAGING_IO) &&
|
||||
(SrvOpen->DesiredAccess & FILE_WRITE_DATA) &&
|
||||
(SrvOpen->DesiredAccess & FILE_READ_DATA) &&
|
||||
!pVNetRootContext->write_thru &&
|
||||
!(SrvOpen->BufferingFlags &
|
||||
(FCB_STATE_WRITEBUFFERING_ENABLED | FCB_STATE_WRITECACHING_ENABLED)))
|
||||
enable_caching(SrvOpen);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue