An error occurred fetching the project authors.
- 15 Dec, 2002 2 commits
-
-
Trond Myklebust authored
- Move the encoding/decoding of the actual COMPOUND XDR header out of encode_compound()/decode_compound(). - Make each NFSv4 operation 'decode_' routine also take care of decoding its own header, and checking it for correctness. Also allows us to get rid of the 'nfserr' parameter...
-
Trond Myklebust authored
This fixes a couple of incorrect XDR buffer reservations. The values passed to RESERVE_SPACE() must reflect precisely the number of bytes that we wish to send down the wire.
-
- 22 Nov, 2002 1 commit
-
-
Trond Myklebust authored
Here is the a pre-patch in the attempt to get rid of 'struct nfs4_compound', and the associated horrible union in 'struct nfs4_op'. It splits out the fields that are meant to do buffer overflow checking and iovec adjusting on the XDR received/sent data. It moves support for that nto the dedicated structure 'xdr_stream', and the associated functions 'xdr_reserve_space()', 'xdr_inline_decode()'. The patch also expands out the all macros ENCODE_HEAD, ENCODE_TAIL, ADJUST_ARGS and DECODE_HEAD, as well as most of the DECODE_TAILs.
-
- 18 Nov, 2002 1 commit
-
-
Trond Myklebust authored
Given Andi Kleen's patch that introduces of VFS-level support for nanosecond time resolutions, we should finally be able to export the existing NFS client level support to userland. In order to do so, the following patch will convert all NFS private 'raw u64' values into the kernel-supported struct timespec directly in the xdr_encode/xdr_decode routines. It adds support for the nanosecond field in NFS 'setattr' calls, and in nfs_refresh_inode(). Finally, there are a few cleanups in the nfs_refresh_inode code that convert multiple use of the NFS_*(inode) macros into a single dereference of NFS_I(inode).
-
- 17 Nov, 2002 2 commits
-
-
Andi Kleen authored
stat64 has been changed to return jiffies granuality as nsec in previously unused fields. This allows make to make better decisions on when to recompile a file. Follows losely the Solaris API. CURRENT_TIME has been redefined to return struct timespec. The users who don't use it in a inode/attr context have been changed to use a new get_seconds() function. CURRENT_TIME is implemented by an out-of-line function. There is a small performance penalty in this patch. The previous filemap code had an optimization to flush atime only once a second. This is currently gone, which will increase flushes a bit. I believe the correct solution if it should be a problem is to have per super block fields that give an arbitary atime flush granuality - so that you can set it to be only flushed once a hour if you prefer that. I will work on that later in separate patches if the need should arise. struct inode and the attr struct has been changed to store struct timespec instead of time_t for [cma]time. Not all file systems support this granuality, but some like XFS,NFSv3,CIFS,JFS do. The others will currently truncate the nsec part on flushing to disk. There was some discussion on this rounding on l-k previously. I went for simple truncation because there is not much evidence IMHO that the more complicated roundings have any advantages. In practice application will be rather unlikely to notice the rounding anyways - they can only see a difference when an inode is flush from memory and reloaded in less than a second, which is rather unlikely.
-
Trond Myklebust authored
The "procedure number" has been used for 2 purposes in the kernel client RPC implementation: 1) As a number to pass to the server in the RPC header. 2) As an index into the "procedure array" of type 'struct rpc_procinfo', from which the RPC layer can find the XDR encode/decode functions, buffer size, and all the other static data that it needs to construct the on-wire RPC message. This works fine for NFSv2, v3 and for the NLM locking code for which there is a one-to-one mapping between NFS file operations, and RPC procedures. For NFSv4 on the other hand, the mapping is many-to-one, since there is only one RPC procedure number: NFSPROC4_COMPOUND. For efficiency purposes, we want to have a one-to-one mapping between NFS file operations and the corresponding XDR encode/decode routines, but currently this is not possible because of (2). The result is the mess that is 'struct nfs4_op' and encode/decode_compound. In the process eliminating (2), we might as well change to passing a pointer to the appropriate procedure array entry instead of an index. This change can be made transparent The appended patch therefore does the following: - Substitute a pointer to the rpc_procinfo instead of the RPC procedure number in the struct rpc_message. - Make the RPC procedure number an entry in the struct rpc_procinfo. - Clean out the largely unused (except in some obscure lockd debugging code) p_name field. The latter was just a stringified version of the RPC procedure name, so for those lockd cases, we can use the RPC procedure number instead.
-
- 16 Oct, 2002 1 commit
-
-
Trond Myklebust authored
Thanks again to davem...
-
- 15 Oct, 2002 1 commit
-
-
Trond Myklebust authored
Now that all the hooks are in place, this large patch imports all of the new code for the NFSv4 client. nfs4proc.c - procedure vectors nfs4xdr.c - XDR nfs4state.c - state bookkeeping (very minimal for now) nfs4renewd.c - a daemon (implemented as an rpc_task) to keep state from expiring on the server Note: The RPCSEC_GSS authentication code is not yet included here. For the moment we make do with AUTH_UNIX aka. AUTH_SYS. Neither is the code to do upcalls to userland in order to do uid/gid <-> name mappings. Instead, stubs have been added to translate everything to 'nobody:nobody' == '-2:-2'
-