timing out an upcall after 2mins
This commit is contained in:
parent
7d19a7ffef
commit
0285d46a26
1 changed files with 15 additions and 8 deletions
|
|
@ -97,6 +97,11 @@ LONG open_owner_id = 1;
|
||||||
const CHAR _var ## _buffer[] = _string; \
|
const CHAR _var ## _buffer[] = _string; \
|
||||||
const ANSI_STRING _var = { sizeof(_string) - sizeof(CHAR), \
|
const ANSI_STRING _var = { sizeof(_string) - sizeof(CHAR), \
|
||||||
sizeof(_string), (PCH) _var ## _buffer }
|
sizeof(_string), (PCH) _var ## _buffer }
|
||||||
|
#define RELATIVE(wait) (-(wait))
|
||||||
|
#define NANOSECONDS(nanos) (((signed __int64)(nanos)) / 100L)
|
||||||
|
#define MICROSECONDS(micros) (((signed __int64)(micros)) * NANOSECONDS(1000L))
|
||||||
|
#define MILLISECONDS(milli) (((signed __int64)(milli)) * MICROSECONDS(1000L))
|
||||||
|
#define SECONDS(seconds) (((signed __int64)(seconds)) * MILLISECONDS(1000L))
|
||||||
|
|
||||||
DECLARE_CONST_ANSI_STRING(NfsV3Attributes, "NfsV3Attributes");
|
DECLARE_CONST_ANSI_STRING(NfsV3Attributes, "NfsV3Attributes");
|
||||||
DECLARE_CONST_ANSI_STRING(NfsSymlinkTargetName, "NfsSymlinkTargetName");
|
DECLARE_CONST_ANSI_STRING(NfsSymlinkTargetName, "NfsSymlinkTargetName");
|
||||||
|
|
@ -1430,6 +1435,8 @@ NTSTATUS nfs41_UpcallWaitForReply(
|
||||||
nfs41_AddEntry(upcallLock, upcall, entry);
|
nfs41_AddEntry(upcallLock, upcall, entry);
|
||||||
KeSetEvent(&upcallEvent, 0, FALSE);
|
KeSetEvent(&upcallEvent, 0, FALSE);
|
||||||
if (!entry->async_op) {
|
if (!entry->async_op) {
|
||||||
|
LARGE_INTEGER timeout;
|
||||||
|
timeout.QuadPart = RELATIVE(SECONDS(120));
|
||||||
/* 02/03/2011 AGLO: it is not clear what the "right" waiting design
|
/* 02/03/2011 AGLO: it is not clear what the "right" waiting design
|
||||||
* should be. Having non-interruptable waiting seems to be the right
|
* should be. Having non-interruptable waiting seems to be the right
|
||||||
* approach. However, when things go wrong, the only wait to proceed
|
* approach. However, when things go wrong, the only wait to proceed
|
||||||
|
|
@ -1446,9 +1453,15 @@ NTSTATUS nfs41_UpcallWaitForReply(
|
||||||
if (entry->opcode == NFS41_CLOSE || entry->opcode == NFS41_UNLOCK)
|
if (entry->opcode == NFS41_CLOSE || entry->opcode == NFS41_UNLOCK)
|
||||||
status = KeWaitForSingleObject(&entry->cond, Executive,
|
status = KeWaitForSingleObject(&entry->cond, Executive,
|
||||||
KernelMode, FALSE, NULL);
|
KernelMode, FALSE, NULL);
|
||||||
else
|
else {
|
||||||
status = KeWaitForSingleObject(&entry->cond, Executive,
|
status = KeWaitForSingleObject(&entry->cond, Executive,
|
||||||
UserMode, TRUE, NULL);
|
UserMode, TRUE, &timeout);
|
||||||
|
if (status != STATUS_SUCCESS) {
|
||||||
|
print_wait_status(1, "[downcall]", status,
|
||||||
|
opcode2string(entry->opcode), entry, entry->xid);
|
||||||
|
entry->status = status;
|
||||||
|
}
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
|
|
||||||
status = KeWaitForSingleObject(&entry->cond, Executive, KernelMode, FALSE, NULL);
|
status = KeWaitForSingleObject(&entry->cond, Executive, KernelMode, FALSE, NULL);
|
||||||
|
|
@ -6034,12 +6047,6 @@ NTSTATUS nfs41_init_ops()
|
||||||
return(STATUS_SUCCESS);
|
return(STATUS_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define RELATIVE(wait) (-(wait))
|
|
||||||
#define NANOSECONDS(nanos) (((signed __int64)(nanos)) / 100L)
|
|
||||||
#define MICROSECONDS(micros) (((signed __int64)(micros)) * NANOSECONDS(1000L))
|
|
||||||
#define MILLISECONDS(milli) (((signed __int64)(milli)) * MICROSECONDS(1000L))
|
|
||||||
#define SECONDS(seconds) (((signed __int64)(seconds)) * MILLISECONDS(1000L))
|
|
||||||
|
|
||||||
KSTART_ROUTINE fcbopen_main;
|
KSTART_ROUTINE fcbopen_main;
|
||||||
VOID fcbopen_main(PVOID ctx)
|
VOID fcbopen_main(PVOID ctx)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue