summaryrefslogtreecommitdiff
path: root/include/linux/lockd
AgeCommit message (Collapse)Author
2006-03-20LOCKD: Make nlmsvc_traverse_shares return voidJ. Bruce Fields
The nlmsvc_traverse_shares return value is always zero, hence useless. Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2006-03-20LOCKD: nlmsvc_traverse_blocks return is unusedJ. Bruce Fields
Note that we never return non-zero. Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2006-03-20lockd: Add helper for *_RES callbacksTrond Myklebust
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2006-03-20NLM: Add nlmclnt_release_callTrond Myklebust
Add a helper function to simplify the freeing of NLM client requests. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2006-03-20NLM: Simplify client locksTrond Myklebust
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2006-03-20lockd: stop abusing file_lock_listChristoph Hellwig
Currently lockd directly access the file_lock_list from fs/locks.c. It does so to mark locks granted or reclaimable. This is very suboptimal, because a) lockd needs to poke into locks.c internals, and b) it needs to iterate over all locks in the system for marking locks granted or reclaimable. This patch adds lists for granted and reclaimable locks to the nlm_host structure instead, and adds locks to those. nlmclnt_lock: now adds the lock to h_granted instead of setting the NFS_LCK_GRANTED, still O(1) nlmclnt_mark_reclaim: goes away completely, replaced by a list_splice_init. Complexity reduced from O(locks in the system) to O(1) reclaimer: iterates over h_reclaim now, complexity reduced from O(locks in the system) to O(locks per nlm_host) Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2006-03-20lockd: Clean up of the server-side GRANTED codeTrond Myklebust
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2006-03-20lockd: Add refcounting to struct nlm_blockTrond Myklebust
Otherwise, the block may disappear from underneath us when in nlmsvc_retry_blocked. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2006-03-20lockd: Don't expose the process pid to the NLM serverTrond Myklebust
Instead we use the nlm_lockowner->pid. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2006-02-14[PATCH] NLM: Fix the NLM_GRANTED callback checksTrond Myklebust
If 2 threads attached to the same process are blocking on different locks on different files (maybe even on different servers) but have the same lock arguments (i.e. same offset+length - actually quite common, since most processes try to lock the entire file) then the first GRANTED call that wakes one up will also wake the other. Currently when the NLM_GRANTED callback comes in, lockd walks the list of blocked locks in search of a match to the lock that the NLM server has granted. Although it checks the lock pid, start and end, it fails to check the filehandle and the server address. By checking the filehandle and server IP address, we ensure that this only happens if the locks truly are referencing the same file. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-02-01NLM: Ensure that nlmclnt_cancel_callback() doesn't loop foreverTrond Myklebust
If the server returns NLM_LCK_DENIED_NOLOCKS, we currently retry the entire NLM_CANCEL request. This may end up looping forever unless the server changes its mind (why would it do that, though?). Ensure that we limit the number of retries (to 3). See bug# 5957 in bugzilla.kernel.org. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2006-02-01NLM: Fix arguments to NLM_CANCEL callTrond Myklebust
The OpenGroup docs state that the arguments "block", "exclusive" and "alock" must exactly match the arguments for the lock call that we are trying to cancel. Currently, "block" is always set to false, which is wrong. See bug# 5956 on bugzilla.kernel.org. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2006-01-06RPC: Clean up RPC task structureTrond Myklebust
Shrink the RPC task structure. Instead of storing separate pointers for task->tk_exit and task->tk_release, put them in a structure. Also pass the user data pointer as a parameter instead of passing it via task->tk_calldata. This enables us to nest callbacks. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2005-06-22[PATCH] NLM: fix a client-side race on blocking locks.Trond Myklebust
If the lock blocks, the server may send us a GRANTED message that races with the reply to our LOCK request. Make sure that we catch the GRANTED by queueing up our request on the nlm_blocked list before we send off the first LOCK rpc call. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2005-03-10[NLM] fs/lockd/clntproc.c: make 2 functions staticTrond Myklebust
This patch makes two needlessly global functions static. Signed-off-by: Adrian Bunk <bunk@stusta.de> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2005-03-10NLM: Always use AUTH_UNIX authentication for NLM locking.Trond Myklebust
Most existing servers do not implement RPCSEC_GSS for either the lockd or statd daemons. Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
2004-10-19[PATCH] lockd: remove hardcoded maximum NLM cookie lengthEd Schouten
At the moment, the NLM cookie length is fixed to 8 bytes, while 1024 is the theoretical maximum. FreeBSD uses 16 bytes, Mac OS X uses 20 bytes. Therefore we need to make the length dynamic (which I set to 32 bytes). This patch is based on an old patch for Linux 2.4.23-pre9, which I changed to patch properly (also added some stylish NIPQUAD fixes). From: Neil Brown <neilb@cse.unsw.edu.au> Further lockd tidyups. - NIPQUAD everywhere that is appropriate - use XDR_QUADLEN in more places as appropriate - discard QUADLEN which is a lockd-specific version of XDR_QUADLEN Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2004-08-23[PATCH] Fix posix file locking (5/9)Trond Myklebust
NLM: file_lock->fl_owner may live for longer than the pid of the original process that created it. Fix NFSv2/v3 client locking code to map file_lock->fl_owner into a unique 32-bit number or "pseudo-pid". Signed-off-by: Trond Myklebust <trond.myklebust@fys.uio.no> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2004-08-23[PATCH] Fix posix file locking (4/9)Trond Myklebust
NLM: fix lockd to use the new posix locking callbacks. Signed-off-by: Trond Myklebust <trond.myklebust@fys.uio.no> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2004-08-22[PATCH] kNFSd: get rid of open_private_fileNeil Brown
This is only used by nfsd to save one kmalloc, and the code is not always kept up-to-date with dentry_open, so just get rid of it. Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2004-03-13NFSv2/v3 locking: Patch by Patrice Dumas to ensure that the server index ↵Trond Myklebust
blocks uniquely by using the client address in addition to the value of the NLM cookie field.
2004-03-13NFSv2/v3 locking: Patch by Patrice Dumas to implement nlmsvc_proc_granted_res.Trond Myklebust
When a server receives that callback it should deallocate the corresponding blocked lock using the nlmsvc_grant_reply function.
2004-03-13NFSv2/v3/v4: Parenthesize #defines in nfs?xdr.c. Fix an off-by-one error on ↵Trond Myklebust
the value of compound_decode_hdr_maxsz. NFSv4: fix a printk() typo (spotted by Linda Dunaphant). NFSv4: Ensure that nfs4_open_reclaim() copies the value of the new stateid back into the shared nfsv4 state structure. NFSv4: Don't leak NFS4ERR_WRONGSEC errors back into nfs_lookup(). RPC,NFS,Lockd: Mark the debugging code as "unlikely" so that gcc moves it out of the mainline code paths.
2003-08-17[PATCH] make NFS lockd port numbers assignable at run timeJamie Lokier
When writing firewall rules, and you are serving NFS, it's really useful to know the port numbers of the various NFS services. nfsd has a standard value; mountd and statd are userspace daemons, and those ports are settable on the command line. The fiddly one is lockd. nlm_udpport and nlm_tcpport can be set on the kernel command line or at module load time, but after that it's a bit awkward (particularly as the lockd module can't be unloaded safely - "rmmod -f lockd" sometimes panics). This patch allows the port numbers and the other lockd parameters to be set through files in /proc/sys/fs/nfs/nlm_*. The port numbers take effect when lockd is next started or restarted. In order to install the sysctl table even when compiled into the kernel, it was necessary to update the initialisation code to the current methods, using module_init() et al. This patch does that and in so doing updates the module/kernel parameters to use the 2.6 module_param() method, as well as making the numeric range changes consistent between the two.
2002-11-16[PATCH] cleanup: switch to passing *(struct rpc_procinfo) in rpc_message.Trond Myklebust
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.
2002-10-11[PATCH] kNFSd: Use new cache infrastructure for auth_unix specific lookups.Neil Brown
This patch introduces two caches using the new infrastucture, and the concept of a 'domain'. A 'domain' refers to a collection of clients that all have the same view of the nfs server, and all have the same access rights (modulo different users on the clients). For AUTH_UNIX (and AUTH_NULL), the domain is determined from the IP address. For other authentication styles, the domain might be determined directly from the credentials. Each auth flavour knows how to allocate and free it's domain-specific infomation. auth_domain_cache maps a name to a domain which is owned by an auth flavour. ip_map_cache is a cache specific to AUTH_UNIX which maps IP address to domain. With this patch, svcauth_unix.c is created to store all auth_unix related code. The IP address lookup code is removed from nfsd/exports.c sunrpc module initilisation is moved out of stats.c into sunrpc_syms which seemed to be the most central .c file. It now registers these two caches. Now that the caches are being used, nfsd needs to call cache_clean periodically.
2002-09-17[PATCH] stricter type checking for rpc auth flavorsChuck Lever
This implements stricter type checking for rpc auth flavors. it is a prerequisite for RPC GSSAPI and its authentication pseudoflavors. please apply it.
2002-09-12[PATCH] kNFSd 3: Increase separation between lockd and nfsd.Neil Brown
lockd currently asks nfsd for a 'client handle' for each request. This is used as a key for finding (or creating) a 'nlm_host' structure, so that there is only one of these per client...almost. There can currently be up to 4 nlm_hosts for a given client, depending on protocol (udp/tcp) or version (v1 or v4). But this isn't handled very well. So the question is: is there any advantage in having only on nlm_host per real host, or have we simply have one for each IP address that makes requests, whether they are separate hosts or not. The nlm_host structure is used: 1/ to hold a lockd rpc client for talking to the remote lockd. Having multiple lockd clients cannot hurt except possibly to waste a little space. 2/ to identify resources to free when we receive notification from statd that a client has restarted. As statd gets a hostname and looks up all IP addresses, and then sends a notification for each IP for which it has a registration, there is no need to minimise the number of nlm_host structures (each of which register for monitoring). 3/ to identify resources to free when a client sends a "free_all" request. If a client uses multiple IP addresses to create locks, and then sends free_all from just one IP address we will loose here. However it is not clear that a client would ever want to send a free_all request, and the linux client doesn't seem to, so there is unlikely to be any loss here. This patch does not ask nfsd for a client identifier, but rather finds an nlm_host based on IP, version, protocol (udp/tcp) and whether we are acting as NFS server or client. All of this information is then placed in the cookie that is passed to statd and returned by statd when the client restarts. Previously only the IP address was passing the cookie, so possibly not all nlm_host structures would have been found. Because of these changes, lockd does not need to know anything about the nfsd export table, so the interface to nfsd is much more narrow. Another consequence is that when nfsd is told to delete a client, it cannot tell lockd to forget all the locks for that client. However it is not clear that lockd should ever forget any locks unless it is told to shutdown (or simulate a shutdown), and in anycase, the current nfsd admin tools never tell nfsd to delete a client anyway.
2002-09-12[PATCH] kNFSd 2: Lockd to shutdown without engaging with nfsdNeil Brown
Currently, when lockd wants to invalidate all it's clients, it asks nfsd to iterate through them. Now it iterates itself.
2002-02-04v2.4.10.1 -> v2.4.10.2Linus Torvalds
- me/Al Viro: fix bdget() oops with block device modules that don't clean up after they exit - Alan Cox: continued merging (drivers, license tags) - David Miller: sparc update, network fixes - Christoph Hellwig: work around broken drivers that add a gendisk more than once - Jakub Jelinek: handle more ELF loading special cases - Trond Myklebust: NFS client and lockd reclaimer cleanups/fixes - Greg KH: USB updates - Mikael Pettersson: sparate out local APIC / IO-APIC config options
2002-02-04v2.4.9.12 -> v2.4.9.13Linus Torvalds
- Manfred Spraul: /proc/pid/maps cleanup (and bugfix for non-x86) - Al Viro: "block device fs" - cleanup of page cache handling - Hugh Dickins: VM/shmem cleanups and swap search speedup - David Miller: sparc updates, soc driver typo fix, net updates - Jeff Garzik: network driver updates (dl2k, yellowfin and tulip) - Neil Brown: knfsd cleanups and fixues - Ben LaHaise: zap_page_range merge from -ac
2002-02-04v2.4.9.4 -> v2.4.9.5Linus Torvalds
- Merge with Alan - Trond Myklebust: NFS fixes - kmap and root inode special case - Al Viro: more superblock cleanups, inode leak in rd.c, minix directories in page cache - Paul Mackerras: clean up rubbish from sl82c105.c - Neil Brown: md/raid cleanups, NFS filehandles - Johannes Erdfelt: USB update (usb-2.0 support, visor fix, Clie fix, pl2303 driver update) - David Miller: sparc and net update - Eric Biederman: simplify and correct bootdata allocation - don't overwrite ramdisks - Tim Waugh: support multiple SuperIO devices, parport doc updates
2002-02-04v2.4.7 -> v2.4.7.1Linus Torvalds
- Anton Altaparmakov: NTFS error checking - Johannes Erdfelt: USB updates - OGAWA Hirofumi: FAT update - Alan Cox: driver + s390 update merge - Richard Henderson: fix alpha sigsuspend error return value - Marcelo Tosatti: per-zone VM shortage - Daniel Phillips: generic use-once optimization instead of drop-behind - Bjorn Wesen: Cris architecture update - Anton Altaparmakov: support for Windows Dynamic Disks - James Washer: LDT loading SMP bug fix
2002-02-04Import changesetLinus Torvalds