aboutsummaryrefslogtreecommitdiff
path: root/include/linux/sunrpc
AgeCommit message (Collapse)AuthorFilesLines
2011-01-04svcrpc: simpler request droppingJ. Bruce Fields1-0/+1
Currently we use -EAGAIN returns to determine when to drop a deferred request. On its own, that is error-prone, as it makes us treat -EAGAIN returns from other functions specially to prevent inadvertent dropping. So, use a flag on the request instead. Returning an error on request deferral is still required, to prevent further processing, but we no longer need worry that an error return on its own could result in a drop. Signed-off-by: J. Bruce Fields <[email protected]>
2011-01-04SUNRPC: Remove more code when NFSD_DEPRECATED is not configuredJ. Bruce Fields1-0/+3
Signed-off-by: NeilBrown <[email protected]> [[email protected]: moved svcauth_unix_purge outside ifdef's.] Signed-off-by: J. Bruce Fields <[email protected]>
2010-12-17sunrpc: remove xpt_poolNeilBrown1-1/+0
The xpt_pool field is only used for reporting BUGs. And it isn't used correctly. In particular, when it is cleared in svc_xprt_received before XPT_BUSY is cleared, there is no guarantee that either the compiler or the CPU might not re-order to two assignments, just setting xpt_pool to NULL after XPT_BUSY is cleared. If a different cpu were running svc_xprt_enqueue at this moment, it might see XPT_BUSY clear and then xpt_pool non-NULL, and so BUG. This could be fixed by calling smp_mb__before_clear_bit() before the clear_bit. However as xpt_pool isn't really used, it seems safest to simply remove xpt_pool. Another alternate would be to change the clear_bit to clear_bit_unlock, and the test_and_set_bit to test_and_set_bit_lock. Signed-off-by: NeilBrown <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
2010-12-16SUNRPC: New xdr_streams XDR decoder APIChuck Lever3-4/+5
Now that all client-side XDR decoder routines use xdr_streams, there should be no need to support the legacy calling sequence [rpc_rqst *, __be32 *, RPC res *] anywhere. We can construct an xdr_stream in the generic RPC code, instead of in each decoder function. This is a refactoring change. It should not cause different behavior. Signed-off-by: Chuck Lever <[email protected]> Tested-by: J. Bruce Fields <[email protected]> Signed-off-by: Trond Myklebust <[email protected]>
2010-12-16SUNRPC: New xdr_streams XDR encoder APIChuck Lever3-5/+10
Now that all client-side XDR encoder routines use xdr_streams, there should be no need to support the legacy calling sequence [rpc_rqst *, __be32 *, RPC arg *] anywhere. We can construct an xdr_stream in the generic RPC code, instead of in each encoder function. Also, all the client-side encoder functions return 0 now, making a return value superfluous. Take this opportunity to convert them to return void instead. This is a refactoring change. It should not cause different behavior. Signed-off-by: Chuck Lever <[email protected]> Tested-by: J. Bruce Fields <[email protected]> Signed-off-by: Trond Myklebust <[email protected]>
2010-11-02nfsd4: fix 4.1 connection registration raceJ. Bruce Fields1-4/+14
If a connection is closed just after a sequence or create_session is sent over it, we could end up trying to register a callback that will never get called since the xprt is already marked dead. Signed-off-by: J. Bruce Fields <[email protected]>
2010-10-26Merge branch 'for-2.6.37' of git://linux-nfs.org/~bfields/linuxLinus Torvalds8-75/+98
* 'for-2.6.37' of git://linux-nfs.org/~bfields/linux: (99 commits) svcrpc: svc_tcp_sendto XPT_DEAD check is redundant svcrpc: no need for XPT_DEAD check in svc_xprt_enqueue svcrpc: assume svc_delete_xprt() called only once svcrpc: never clear XPT_BUSY on dead xprt nfsd4: fix connection allocation in sequence() nfsd4: only require krb5 principal for NFSv4.0 callbacks nfsd4: move minorversion to client nfsd4: delay session removal till free_client nfsd4: separate callback change and callback probe nfsd4: callback program number is per-session nfsd4: track backchannel connections nfsd4: confirm only on succesful create_session nfsd4: make backchannel sequence number per-session nfsd4: use client pointer to backchannel session nfsd4: move callback setup into session init code nfsd4: don't cache seq_misordered replies SUNRPC: Properly initialize sock_xprt.srcaddr in all cases SUNRPC: Use conventional switch statement when reclassifying sockets sunrpc/xprtrdma: clean up workqueue usage sunrpc: Turn list_for_each-s into the ..._entry-s ... Fix up trivial conflicts (two different deprecation notices added in separate branches) in Documentation/feature-removal-schedule.txt
2010-10-26Merge branch 'nfs-for-2.6.37' of ↵Linus Torvalds1-0/+7
git://git.linux-nfs.org/projects/trondmy/nfs-2.6 * 'nfs-for-2.6.37' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6: net/sunrpc: Use static const char arrays nfs4: fix channel attribute sanity-checks NFSv4.1: Use more sensible names for 'initialize_mountpoint' NFSv4.1: pnfs: filelayout: add driver's LAYOUTGET and GETDEVICEINFO infrastructure NFSv4.1: pnfs: add LAYOUTGET and GETDEVICEINFO infrastructure NFS: client needs to maintain list of inodes with active layouts NFS: create and destroy inode's layout cache NFSv4.1: pnfs: filelayout: introduce minimal file layout driver NFSv4.1: pnfs: full mount/umount infrastructure NFS: set layout driver NFS: ask for layouttypes during v4 fsinfo call NFS: change stateid to be a union NFSv4.1: pnfsd, pnfs: protocol level pnfs constants SUNRPC: define xdr_decode_opaque_fixed NFSD: remove duplicate NFS4_STATEID_SIZE
2010-10-25Merge branch 'nfs-for-2.6.37' of ↵Linus Torvalds2-1/+2
git://git.linux-nfs.org/projects/trondmy/nfs-2.6 * 'nfs-for-2.6.37' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6: (67 commits) SUNRPC: Cleanup duplicate assignment in rpcauth_refreshcred nfs: fix unchecked value Ask for time_delta during fsinfo probe Revalidate caches on lock SUNRPC: After calling xprt_release(), we must restart from call_reserve NFSv4: Fix up the 'dircount' hint in encode_readdir NFSv4: Clean up nfs4_decode_dirent NFSv4: nfs4_decode_dirent must clear entry->fattr->valid NFSv4: Fix a regression in decode_getfattr NFSv4: Fix up decode_attr_filehandle() to handle the case of empty fh pointer NFS: Ensure we check all allocation return values in new readdir code NFS: Readdir plus in v4 NFS: introduce generic decode_getattr function NFS: check xdr_decode for errors NFS: nfs_readdir_filler catch all errors NFS: readdir with vmapped pages NFS: remove page size checking code NFS: decode_dirent should use an xdr_stream SUNRPC: Add a helper function xdr_inline_peek NFS: remove readdir plus limit ...
2010-10-24SUNRPC: define xdr_decode_opaque_fixedBenny Halevy1-0/+7
A helper for decoding a fixed length opaque value. Returns a pointer to the next item in the xdr stream. Signed-off-by: Benny Halevy <[email protected]> Signed-off-by: Fred Isaman <[email protected]> Signed-off-by: Trond Myklebust <[email protected]>
2010-10-23SUNRPC: Add a helper function xdr_inline_peekTrond Myklebust1-0/+1
We sometimes need to be able to read ahead in an xdr_stream without incrementing the current pointer position. Signed-off-by: Trond Myklebust <[email protected]>
2010-10-07Merge commit 'v2.6.36-rc7' into core/rcuIngo Molnar1-1/+1
Merge reason: Update from -rc3 to -rc7. Signed-off-by: Ingo Molnar <[email protected]>
2010-10-01nfsd: provide callbacks on svc_xprt deletionJ. Bruce Fields1-0/+25
NFSv4.1 needs warning when a client tcp connection goes down, if that connection is being used as a backchannel, so that it can warn the client that it has lost the backchannel connection. Signed-off-by: J. Bruce Fields <[email protected]>
2010-10-01nfsd4: remove spkm3J. Bruce Fields1-55/+0
Unfortunately, spkm3 never got very far; while interoperability with one other implementation was demonstrated at some point, problems were found with the spec that were deemed not worth fixing. The kernel code is useless on its own without nfs-utils patches which were never merged into nfs-utils, and were only ever available from citi.umich.edu. They appear not to have been updated since 2005. Therefore it seems safe to assume that this code has no users, and never will. Signed-off-by: J. Bruce Fields <[email protected]>
2010-10-01sunrpc: Tag rpc_xprt with netPavel Emelyanov1-1/+2
The net is known from the xprt_create and this tagging will also give un the context in the conntection workers where real sockets are created. Signed-off-by: Pavel Emelyanov <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
2010-10-01sunrpc: Add net to xprt_createPavel Emelyanov1-0/+1
Signed-off-by: Pavel Emelyanov <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
2010-10-01sunrpc: Add net to rpc_create_argsPavel Emelyanov1-0/+1
Signed-off-by: Pavel Emelyanov <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
2010-10-01sunrpc: Pull net argument downto svc_create_socketPavel Emelyanov1-0/+1
After this the socket creation in it knows the context. Signed-off-by: Pavel Emelyanov <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
2010-10-01sunrpc: Add net argument to svc_create_xprtPavel Emelyanov1-2/+2
Signed-off-by: Pavel Emelyanov <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
2010-10-01sunrpc: Factor out rpc_xprt freeingPavel Emelyanov1-0/+1
Signed-off-by: Pavel Emelyanov <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
2010-10-01sunrpc: Factor out rpc_xprt allocationPavel Emelyanov1-0/+1
Signed-off-by: Pavel Emelyanov <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
2010-09-29sunrpc: fix up rpcauth_remove_module section mismatchStephen Rothwell1-2/+2
On Wed, 29 Sep 2010 14:02:38 +1000 Stephen Rothwell <[email protected]> wrote: > > After merging the final tree, today's linux-next build (powerpc > ppc44x_defconfig) produced tis warning: > > WARNING: net/sunrpc/sunrpc.o(.init.text+0x110): Section mismatch in reference from the function init_sunrpc() to the function .exit.text:rpcauth_remove_module() > The function __init init_sunrpc() references > a function __exit rpcauth_remove_module(). > This is often seen when error handling in the init function > uses functionality in the exit path. > The fix is often to remove the __exit annotation of > rpcauth_remove_module() so it may be used outside an exit section. > > Probably caused by commit 2f72c9b73730c335381b13e2bd221abe1acea394 > ("sunrpc: The per-net skeleton"). This actually causes a build failure on a sparc32 defconfig build: `rpcauth_remove_module' referenced in section `.init.text' of net/built-in.o: defined in discarded section `.exit.text' of net/built-in.o I applied the following patch for today: Fixes: `rpcauth_remove_module' referenced in section `.init.text' of net/built-in.o: defined in discarded section `.exit.text' of net/built-in.o Signed-off-by: Stephen Rothwell <[email protected]> Acked-by: Pavel Emelyanov <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
2010-09-27sunrpc: Make the /proc/net/rpc appear in net namespacesPavel Emelyanov1-8/+15
Signed-off-by: Pavel Emelyanov <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
2010-09-27sunrpc: Tag svc_xprt with netPavel Emelyanov1-0/+2
The transport representation should be per-net of course. Signed-off-by: Pavel Emelyanov <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
2010-09-27sunrpc: Add routines that allow registering per-net cachesPavel Emelyanov1-0/+2
Existing calls do the same, but for the init_net. Signed-off-by: Pavel Emelyanov <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
2010-09-27sunrpc: Add net to pure API callsPavel Emelyanov1-2/+2
There are two calls that operate on ip_map_cache and are directly called from the nfsd code. Other places will be handled in a different way. Signed-off-by: Pavel Emelyanov <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
2010-09-27sunrpc: Make xprt auth cache release work with the xprtPavel Emelyanov1-1/+2
This is done in order to facilitate getting the ip_map_cache from which to put the ip_map. Signed-off-by: Pavel Emelyanov <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
2010-09-21sunrpc/cache: change deferred-request hash table to use hlist.NeilBrown1-1/+1
Being a hash table, hlist is the best option. There is currently some ugliness were we treat "->next == NULL" as a special case to avoid having to initialise the whole array. This change nicely gets rid of that case. Signed-off-by: NeilBrown <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
2010-09-21sunrpc: close connection when a request is irretrievably lost.NeilBrown1-3/+7
If we drop a request in the sunrpc layer, either due kmalloc failure, or due to a cache miss when we could not queue the request for later replay, then close the connection to encourage the client to retry sooner. Note that if the drop happens in the NFS layer, NFSERR_JUKEBOX (aka NFS4ERR_DELAY) is returned to guide the client concerning replay. Signed-off-by: NeilBrown <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
2010-09-21SUNRPC: Refactor logic to NUL-terminate strings in pagesChuck Lever1-0/+1
Clean up: Introduce a helper to '\0'-terminate XDR strings that are placed in a page in the page cache. Signed-off-by: Chuck Lever <[email protected]> Signed-off-by: Trond Myklebust <[email protected]>
2010-09-19Merge remote branch 'trond/bugfixes' into for-2.6.37J. Bruce Fields1-1/+1
Without some client-side fixes, server testing is currently difficult.
2010-09-17SUNRPC: Remove rpcb_getport_sync()Chuck Lever1-1/+0
Clean up: rpcb_getport_sync() has no more users, so remove it. Signed-off-by: Chuck Lever <[email protected]> Signed-off-by: Trond Myklebust <[email protected]>
2010-09-12SUNRPC: Fix a race in rpc_info_openTrond Myklebust1-1/+1
There is a race between rpc_info_open and rpc_release_client() in that nothing stops a process from opening the file after the clnt->cl_kref goes to zero. Fix this by using atomic_inc_unless_zero()... Reported-by: J. Bruce Fields <[email protected]> Signed-off-by: Trond Myklebust <[email protected]> Cc: [email protected]
2010-09-07sunrpc/cache: allow threads to block while waiting for cache update.NeilBrown1-0/+3
The current practice of waiting for cache updates by queueing the whole request to be retried has (at least) two problems. 1/ With NFSv4, requests can be quite complex and re-trying a whole request when a later part fails should only be a last-resort, not a normal practice. 2/ Large requests, and in particular any 'write' request, will not be queued by the current code and doing so would be undesirable. In many cases only a very sort wait is needed before the cache gets valid data. So, providing the underlying transport permits it by setting ->thread_wait, arrange to wait briefly for an upcall to be completed (as reflected in the clearing of CACHE_PENDING). If the short wait was not long enough and CACHE_PENDING is still set, fall back on the old approach. The 'thread_wait' value is set to 5 seconds when there are spare threads, and 1 second when there are no spare threads. These values are probably much higher than needed, but will ensure some forward progress. Note that as we only request an update for a non-valid item, and as non-valid items are updated in place it is extremely unlikely that cache_check will return -ETIMEDOUT. Normally cache_defer_req will sleep for a short while and then find that the item is_valid. Signed-off-by: NeilBrown <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
2010-09-07sunrpc: use seconds since boot in expiry cacheNeilBrown1-3/+25
This protects us from confusion when the wallclock time changes. We convert to and from wallclock when setting or reading expiry times. Also use seconds since boot for last_clost time. Signed-off-by: NeilBrown <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
2010-09-07sunrpc: extract some common sunrpc_cache code from nfsdNeilBrown1-0/+6
Rather can duplicating this idiom twice, put it in an inline function. This reduces the usage of 'expiry_time' out side the sunrpc/cache.c code and thus the impact of a change that is about to be made to that field. Signed-off-by: NeilBrown <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
2010-08-19nfs: __rcu annotationsArnd Bergmann1-2/+2
Signed-off-by: Arnd Bergmann <[email protected]> Signed-off-by: Paul E. McKenney <[email protected]> Acked-by: Trond Myklebust <[email protected]>
2010-08-14include: replace unifdef-y with header-ySam Ravnborg1-1/+1
unifdef-y and header-y has same semantic. So there is no need to have both. Drop the unifdef-y variant and sort all lines again Signed-off-by: Sam Ravnborg <[email protected]>
2010-08-07Merge branch 'for-2.6.36' of git://linux-nfs.org/~bfields/linuxLinus Torvalds1-0/+1
* 'for-2.6.36' of git://linux-nfs.org/~bfields/linux: (34 commits) nfsd4: fix file open accounting for RDWR opens nfsd: don't allow setting maxblksize after svc created nfsd: initialize nfsd versions before creating svc net: sunrpc: removed duplicated #include nfsd41: Fix a crash when a callback is retried nfsd: fix startup/shutdown order bug nfsd: minor nfsd read api cleanup gcc-4.6: nfsd: fix initialized but not read warnings nfsd4: share file descriptors between stateid's nfsd4: fix openmode checking on IO using lock stateid nfsd4: miscellaneous process_open2 cleanup nfsd4: don't pretend to support write delegations nfsd: bypass readahead cache when have struct file nfsd: minor nfsd_svc() cleanup nfsd: move more into nfsd_startup() nfsd: just keep single lockd reference for nfsd nfsd: clean up nfsd_create_serv error handling nfsd: fix error handling in __write_ports_addxprt nfsd: fix error handling when starting nfsd with rpcbind down nfsd4: fix v4 state shutdown error paths ...
2010-08-04SUNRPC: Move the bound cred to struct rpc_rqstTrond Myklebust2-2/+1
This will allow us to save the original generic cred in rpc_message, so that if we migrate from one server to another, we can generate a new bound cred without having to punt back to the NFS layer. Signed-off-by: Trond Myklebust <[email protected]>
2010-08-04SUNRPC: Clean up of rpc_bindcred()Trond Myklebust1-3/+3
Signed-off-by: Trond Myklebust <[email protected]>
2010-08-04SUNRPC: Move remaining RPC client related task initialisation into clnt.cTrond Myklebust1-0/+1
Now that rpc_run_task() is the sole entry point for RPC calls, we can move the remaining rpc_client-related initialisation of struct rpc_task from sched.c into clnt.c. Also move rpc_killall_tasks() into the same file, since that too is relative to the rpc_clnt. Signed-off-by: Trond Myklebust <[email protected]>
2010-08-04SUNRPC: Ensure that rpc_exit() always wakes up a sleeping taskTrond Myklebust1-6/+1
Make rpc_exit() non-inline, and ensure that it always wakes up a task that has been queued. Kill off the now unused rpc_wake_up_task(). Signed-off-by: Trond Myklebust <[email protected]>
2010-08-04SUNRPC: Make the credential cache hashtable size configurableTrond Myklebust1-8/+1
This patch allows the user to configure the credential cache hashtable size using a new module parameter: auth_hashtable_size When set, this parameter will be rounded up to the nearest power of two, with a maximum allowed value of 1024 elements. Signed-off-by: Trond Myklebust <[email protected]>
2010-08-04SUNRPC: Store the hashtable size in struct rpc_cred_cacheTrond Myklebust1-0/+1
Cleanup in preparation for allowing the user to determine the maximum hash table size. Signed-off-by: Trond Myklebust <[email protected]>
2010-08-04NFS: Ensure the AUTH_UNIX credcache is allocated dynamicallyTrond Myklebust1-3/+4
Signed-off-by: Trond Myklebust <[email protected]>
2010-08-03SUNRPC: The function rpc_restart_call() should return success/failureTrond Myklebust1-2/+2
Both rpc_restart_call_prepare() and rpc_restart_call() test for the RPC_TASK_KILLED flag, and fail to restart the RPC call if that flag is set. This patch allows callers to know whether or not the restart was successful, so that they can perform cleanups etc in case of failure. Signed-off-by: Trond Myklebust <[email protected]>
2010-07-06sunrpc: make the cache cleaner workqueue deferrableArtem Bityutskiy1-0/+1
This patch makes the cache_cleaner workqueue deferrable, to prevent unnecessary system wake-ups, which is very important for embedded battery-powered devices. do_cache_clean() is called every 30 seconds at the moment, and often makes the system wake up from its power-save sleep state. With this change, when the workqueue uses a deferrable timer, the do_cache_clean() invocation will be delayed and combined with the closest "real" wake-up. This improves the power consumption situation. Note, I tried to create a DECLARE_DELAYED_WORK_DEFERRABLE() helper macro, similar to DECLARE_DELAYED_WORK(), but failed because of the way the timer wheel core stores the deferrable flag (it is the LSBit in the time->base pointer). My attempt to define a static variable with this bit set ended up with the "initializer element is not constant" error. Thus, I have to use run-time initialization, so I created a new cache_initialize() function which is called once when sunrpc is being initialized. Signed-off-by: Artem Bityutskiy <[email protected]> Signed-off-by: J. Bruce Fields <[email protected]>
2010-05-14SUNRPC: Don't spam gssd with upcall requests when the kerberos key expiredTrond Myklebust2-0/+2
Now that the rpc.gssd daemon can explicitly tell us that the key expired, we should cache that information to avoid spamming gssd. Signed-off-by: Trond Myklebust <[email protected]>
2010-05-14SUNRPC: Reorder the struct rpc_task fieldsTrond Myklebust1-6/+6
This improves the packing of the rpc_task, and ensures that on 64-bit platforms the size reduces to 216 bytes. Signed-off-by: Trond Myklebust <[email protected]>