diff --git a/daemon/open.c b/daemon/open.c index 4918818..1c02911 100644 --- a/daemon/open.c +++ b/daemon/open.c @@ -266,7 +266,7 @@ static int parse_open(unsigned char *buffer, uint32_t length, nfs41_upcall *upca if (status) goto out; status = safe_read(&buffer, &length, &args->disposition, sizeof(ULONG)); if (status) goto out; - status = safe_read(&buffer, &length, &args->open_owner_id, sizeof(ULONG)); + status = safe_read(&buffer, &length, &args->open_owner_id, sizeof(LONG)); if (status) goto out; status = safe_read(&buffer, &length, &args->mode, sizeof(DWORD)); if (status) goto out; @@ -428,7 +428,7 @@ static int handle_open(nfs41_upcall *upcall) status = create_open_state(args->path, args->open_owner_id, &state); if (status) { - eprintf("create_open_state(%u) failed with %d\n", + eprintf("create_open_state(%d) failed with %d\n", args->open_owner_id, status); goto out; } diff --git a/daemon/upcall.h b/daemon/upcall.h index e276f27..36c21da 100644 --- a/daemon/upcall.h +++ b/daemon/upcall.h @@ -51,7 +51,7 @@ typedef struct __open_upcall_args { ULONG file_attrs; ULONG disposition; ULONG create_opts; - ULONG open_owner_id; + LONG open_owner_id; DWORD mode; LONGLONG changeattr; BOOLEAN created; diff --git a/sys/nfs41_driver.c b/sys/nfs41_driver.c index 5ccbdba..8c4021d 100644 --- a/sys/nfs41_driver.c +++ b/sys/nfs41_driver.c @@ -71,7 +71,7 @@ FAST_MUTEX xidLock; FAST_MUTEX openOwnerLock; LONGLONG xid = 0; -ULONG open_owner_id = 1; +LONG open_owner_id = 1; #define DECLARE_CONST_ANSI_STRING(_var, _string) \ const CHAR _var ## _buffer[] = _string; \ @@ -171,7 +171,7 @@ typedef struct _updowncall_entry { ULONG copts; ULONG disp; ULONG cattrs; - ULONG open_owner_id; + LONG open_owner_id; DWORD mode; LONGLONG changeattr; BOOLEAN symlink_embedded; @@ -420,15 +420,6 @@ nfs41_start_driver_state nfs41_start_state = NFS41_START_DRIVER_STARTABLE; NTSTATUS map_readwrite_errors(DWORD status); -ULONG get_next_open_owner() -{ - ULONG x; - ExAcquireFastMutex(&openOwnerLock); - x = open_owner_id++; - ExReleaseFastMutex(&openOwnerLock); - return x; -} - void print_debug_header( PRX_CONTEXT RxContext) { @@ -617,7 +608,7 @@ NTSTATUS marshal_nfs41_open( else tmp += *len; header_len = *len + length_as_ansi(entry->u.Open.filename) + - 6 * sizeof(ULONG) + sizeof(DWORD); + 5 * sizeof(ULONG) + sizeof(LONG) + sizeof(DWORD); if (header_len > buf_len) { status = STATUS_INSUFFICIENT_RESOURCES; goto out; @@ -3197,7 +3188,7 @@ NTSTATUS nfs41_Create( entry->u.Open.disp = params.Disposition; entry->u.Open.copts = params.CreateOptions; if (isDataAccess(params.DesiredAccess)) - entry->u.Open.open_owner_id = get_next_open_owner(); + entry->u.Open.open_owner_id = InterlockedIncrement(&open_owner_id); // if we are creating a file check if nfsv3attributes were passed in if (params.Disposition != FILE_OPEN && params.Disposition != FILE_OVERWRITE) { if (RxContext->CurrentIrp->AssociatedIrp.SystemBuffer) {