Hi Linus, Please pull from the "nfs-for-2.6.38" branch of the repository at git pull git://git.linux-nfs.org/projects/trondmy/nfs-2.6.git nfs-for-2.6.38 This will update the following files through the appended changesets. Cheers, Trond ---- fs/lockd/Makefile | 6 +- fs/lockd/clnt4xdr.c | 605 ++++++++ fs/lockd/clntlock.c | 4 +- fs/lockd/clntproc.c | 18 +- fs/lockd/clntxdr.c | 627 +++++++++ fs/lockd/host.c | 409 ++++--- fs/lockd/mon.c | 110 +- fs/lockd/svc4proc.c | 20 +- fs/lockd/svclock.c | 34 +- fs/lockd/svcproc.c | 28 +- fs/lockd/xdr.c | 287 ---- fs/lockd/xdr4.c | 255 ---- fs/nfs/callback.c | 83 +- fs/nfs/callback.h | 59 +- fs/nfs/callback_proc.c | 326 +++-- fs/nfs/callback_xdr.c | 143 ++- fs/nfs/client.c | 302 +++-- fs/nfs/delegation.c | 362 ++++-- fs/nfs/delegation.h | 1 + fs/nfs/dir.c | 72 +- fs/nfs/idmap.c | 2 +- fs/nfs/inode.c | 3 +- fs/nfs/internal.h | 19 +- fs/nfs/mount_clnt.c | 83 +- fs/nfs/nfs2xdr.c | 1294 ++++++++++++------ fs/nfs/nfs3xdr.c | 2889 ++++++++++++++++++++++++++++----------- fs/nfs/nfs4_fs.h | 13 +- fs/nfs/nfs4filelayout.c | 6 +- fs/nfs/nfs4proc.c | 188 ++- fs/nfs/nfs4renewd.c | 11 +- fs/nfs/nfs4state.c | 293 +++-- fs/nfs/nfs4xdr.c | 1426 +++++++++---------- fs/nfs/pagelist.c | 7 +- fs/nfs/pnfs.c | 524 +++++--- fs/nfs/pnfs.h | 76 +- fs/nfs/proc.c | 5 +- fs/nfs/super.c | 18 +- fs/nfs/unlink.c | 2 +- fs/nfsd/nfs4callback.c | 686 ++++++---- include/linux/lockd/debug.h | 10 - include/linux/lockd/lockd.h | 6 +- include/linux/nfs3.h | 3 + include/linux/nfs4.h | 8 +- include/linux/nfs_fs_sb.h | 15 +- include/linux/nfs_xdr.h | 6 +- include/linux/sunrpc/auth.h | 8 +- include/linux/sunrpc/bc_xprt.h | 15 +- include/linux/sunrpc/clnt.h | 4 +- include/linux/sunrpc/svc.h | 2 +- include/linux/sunrpc/svc_xprt.h | 1 + include/linux/sunrpc/xdr.h | 14 +- net/sunrpc/auth.c | 28 +- net/sunrpc/auth_gss/auth_gss.c | 44 +- net/sunrpc/bc_svc.c | 2 +- net/sunrpc/clnt.c | 21 +- net/sunrpc/rpc_pipe.c | 2 +- net/sunrpc/rpcb_clnt.c | 147 +-- net/sunrpc/svc.c | 36 +- net/sunrpc/svcsock.c | 106 ++- net/sunrpc/xdr.c | 155 ++- 60 files changed, 7852 insertions(+), 4077 deletions(-) commit 357f54d6b38252737116a6d631f6ac28ded018ed Author: Andy Adamson <andros@xxxxxxxxxx> Date: Tue Dec 14 10:11:57 2010 -0500 NFS fix the setting of exchange id flag Indicate support for referrals. Do not set any PNFS roles. Check the flags returned by the server for validity. Do not use exchange flags from an old client ID instance when recovering a client ID. Update the EXCHID4_FLAG_XXX set to RFC 5661. Signed-off-by: Andy Adamson <andros@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 6650239a4b01077e80d5a4468562756d77afaa59 Author: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> Date: Sat Jan 8 17:45:38 2011 -0500 NFS: Don't use vm_map_ram() in readdir vm_map_ram() is not available on NOMMU platforms, and causes trouble on incoherrent architectures such as ARM when we access the page data through both the direct and the virtual mapping. The alternative is to use the direct mapping to access page data for the case when we are not crossing a page boundary, but to copy the data into a linear scratch buffer when we are accessing data that spans page boundaries. Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> Tested-by: Marc Kleine-Budde <mkl@xxxxxxxxxxxxxx> Cc: stable@xxxxxxxxxx [2.6.37] commit d035c36c58dd9183ad6aa7875dea89893faedb55 Author: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> Date: Tue Dec 21 10:45:27 2010 -0500 NFSv4: Ensure continued open and lockowner name uniqueness In order to enable migration support, we will want to move some of the structures that are subject to migration into the struct nfs_server. In particular, if we are to move the state_owner and state_owner_id to being a per-filesystem structure, then we should label the resulting open/lock owners with a per-filesytem label to ensure global uniqueness. This patch does so by adding the super block s_dev to the open/lock owner name. Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit d3978bb325510f0a26ebd92f211b36c5f98b2306 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Fri Dec 24 01:33:04 2010 +0000 NFS: Move cl_delegations to the nfs_server struct Delegations are per-inode, not per-nfs_client. When a server file system is migrated, delegations on the client must be moved from the source to the destination nfs_server. Make it easier to manage a mount point's delegation list across a migration event by moving the list to the nfs_server struct. Clean up: I added documenting comments to public functions I changed in this patch. For consistency I added comments to all the other public functions in fs/nfs/delegation.c. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit dda4b225623f316335052828c24a16e2da313f8f Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Fri Dec 24 01:32:54 2010 +0000 NFS: Introduce nfs_detach_delegations() Clean up: Refactor code that takes clp->cl_lock and calls nfs_detach_delegations_locked() into its own function. While we're changing the call sites, get rid of the second parameter and the logic in nfs_detach_delegations_locked() that uses it, since callers always set that parameter of nfs_detach_delegations_locked() to NULL. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 24d292b894273495f9664bb495e575f8cb7e8cac Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Fri Dec 24 01:32:43 2010 +0000 NFS: Move cl_state_owners and related fields to the nfs_server struct NFSv4 migration needs to reassociate state owners from the source to the destination nfs_server data structures. To make that easier, move the cl_state_owners field to the nfs_server struct. cl_openowner_id and cl_lockowner_id accompany this move, as they are used in conjunction with cl_state_owners. The cl_lock field in the parent nfs_client continues to protect all three of these fields. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit fca5238ef3232cd0cf4bf0457e751b3bb20912a9 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Fri Dec 24 01:32:32 2010 +0000 NFS: Allow walking nfs_client.cl_superblocks list outside client.c We're about to move some fields from struct nfs_client to struct nfs_server. There is a many-to-one relationship between nfs_servers and nfs_clients. After these fields are moved to the nfs_server struct, to visit all of the data in these fields that is owned by one nfs_client, code will need to visit each nfs_server on the cl_superblocks list for that nfs_client. To serialize changes to the cl_superblocks list during these little expeditions, protect the list with RCU. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit f7e8917a67980924651a9e244510e63ef05c7755 Author: Fred Isaman <iisaman@xxxxxxxxxx> Date: Thu Jan 6 11:36:32 2011 +0000 pnfs: layout roc code A layout can request return-on-close. How this interacts with the forgetful model of never sending LAYOUTRETURNS is a bit ambiguous. We forget any layouts marked roc, and wait for them to be completely forgotten before continuing with the close. In addition, to compensate for races with any inflight LAYOUTGETs, and the fact that we do not get any layout stateid back from the server, we set the barrier to the worst case scenario of current_seqid + number of outstanding LAYOUTGETS. Signed-off-by: Fred Isaman <iisaman@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 36840370845629e6cb4324d1dd4aff6778670503 Author: Alexandros Batsakis <batsakis@xxxxxxxxxx> Date: Thu Jan 6 11:36:31 2011 +0000 pnfs: update nfs4_callback_recallany to handle layouts While here, update the code a bit. Signed-off-by: Alexandros Batsakis <batsakis@xxxxxxxxxx> Signed-off-by: Fred Isaman <iisaman@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 43f1b3da8b35d706d6c47880fc211d2519b4a587 Author: Fred Isaman <iisaman@xxxxxxxxxx> Date: Thu Jan 6 11:36:30 2011 +0000 pnfs: add CB_LAYOUTRECALL handling This is the heart of the wave 2 submission. Add the code to trigger drain and forget of any afected layouts. In addition, we set a "barrier", below which any LAYOUTGET reply is ignored. This is to compensate for the fact that we do not wait for outstanding LAYOUTGETs to complete as per section 12.5.5.2.1 of RFC 5661. Signed-off-by: Fred Isaman <iisaman@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit f2a625616045fe46e1d5fceebdd825f5acdecdb7 Author: Fred Isaman <iisaman@xxxxxxxxxx> Date: Thu Jan 6 11:36:29 2011 +0000 pnfs: CB_LAYOUTRECALL xdr code This is the xdr decoding for CB_LAYOUTRECALL. Signed-off-by: Alexandros Batsakis <batsakis@xxxxxxxxxx> Signed-off-by: Dean Hildebrand <dhildeb@xxxxxxxxxx> Signed-off-by: Marc Eshel <eshel@xxxxxxxxxxxxxxx> Signed-off-by: Andy Adamson <andros@xxxxxxxxxx> Signed-off-by: Benny Halevy <bhalevy@xxxxxxxxxxx> Signed-off-by: Fred Isaman <iisaman@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit cc6e5340b0981feac5a00a992bab6154cb4b1fa1 Author: Fred Isaman <iisaman@xxxxxxxxxx> Date: Thu Jan 6 11:36:28 2011 +0000 pnfs: change lo refcounting to atomic_t This will be required to allow us to grab reference outside of i_lock. While we are at it, make put_layout_hdr take the same argument as all the related functions. Signed-off-by: Fred Isaman <iisaman@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit fc1794c5b04f5322bad05385cd91b52ec85aab72 Author: Fred Isaman <iisaman@xxxxxxxxxx> Date: Thu Jan 6 11:36:27 2011 +0000 pnfs: check that partial LAYOUTGET return is ignored Either a bad server reply, or our ignoring of multiple array segments in a reply, can cause a reply to not meet our requirements. Ensure that we ignore such replies. Signed-off-by: Fred Isaman <iisaman@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 2130ff663633e8a57921779ebfe62fc39d5585ec Author: Fred Isaman <iisaman@xxxxxxxxxx> Date: Thu Jan 6 11:36:26 2011 +0000 pnfs: add layout to client list before sending rpc Since this list will be used to search for layouts to recall, this is necessary to avoid a race where the recall comes in, sees there is nothing in the client list, and prepares to return NOMATCHING, while the LAYOUTGET gets processed before the recall updates the stateid. Signed-off-by: Fred Isaman <iisaman@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit cf7d63f1f9895713551df2e6d18b006f8af26e91 Author: Fred Isaman <iisaman@xxxxxxxxxx> Date: Thu Jan 6 11:36:25 2011 +0000 pnfs: serialize LAYOUTGET(openstateid) We shouldn't send a LAYOUTGET(openstateid) unless all outstanding RPCs using the previous stateid are completed. This requires choosing the stateid to encode earlier, so we can abort if one is not available (we want to use the open stateid, but a LAYOUTGET is already out using it), and adding a count of the number of outstanding rpc calls using layout state (which for now consist solely of LAYOUTGETs). Signed-off-by: Fred Isaman <iisaman@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit c31663d4a1fac5ce1954d656cbcf80eb883b814a Author: Fred Isaman <iisaman@xxxxxxxxxx> Date: Thu Jan 6 11:36:24 2011 +0000 pnfs: layoutget rpc code cleanup No functional changes, just some code minor code rearrangement and comments. Signed-off-by: Fred Isaman <iisaman@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 4541d16c024ce40a0781e03c185ecdfe34aec46f Author: Fred Isaman <iisaman@xxxxxxxxxx> Date: Thu Jan 6 11:36:23 2011 +0000 pnfs: change how lsegs are removed from layout list This is to prepare the way for sensible io draining. Instead of just removing the lseg from the list, we instead clear the VALID flag (preventing new io from grabbing references to the lseg) and remove the reference holding it in the list. Thus the lseg will be removed once any io in progress completes and any references still held are dropped. Signed-off-by: Fred Isaman <iisaman@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit fd6002e9b8a93220d5f53b93d9624caf73cdc8a2 Author: Fred Isaman <iisaman@xxxxxxxxxx> Date: Thu Jan 6 11:36:22 2011 +0000 pnfs: change layout state seqlock to a spinlock This prepares for future changes, where the layout state needs to change atomically with several other variables. In particular, it will need to know if lo->segs is empty, as we test that instead of manipulating the NFS_LAYOUT_STATEID_SET bit. Moreover, the layoutstateid is not really a read-mostly structure, as it is written almost as often as it is read. The behavior of pnfs_get_layout_stateid is also slightly changed, so that it no longer changes the stateid. Its name is changed to +pnfs_choose_layoutget_stateid. Signed-off-by: Fred Isaman <iisaman@xxxxxxxxxx> Signed-off-by: Benny Halevy <bhalevy@xxxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit b7edfaa1983362842351e425adeb8e297b4c11fb Author: Fred Isaman <iisaman@xxxxxxxxxx> Date: Thu Jan 6 11:36:21 2011 +0000 pnfs: add prefix to struct pnfs_layout_hdr fields Signed-off-by: Fred Isaman <iisaman@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 566052c53b5146e23a99ab95fb5c11f8a295a084 Author: Fred Isaman <iisaman@xxxxxxxxxx> Date: Thu Jan 6 11:36:20 2011 +0000 pnfs: add prefix to struct pnfs_layout_segment fields While we are renaming all the fields, change lo->state to lo->plh_flags. Signed-off-by: Fred Isaman <iisaman@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit daaa82d1c72e10dc16cad3a810e225f9188dc7aa Author: Fred Isaman <iisaman@xxxxxxxxxx> Date: Thu Jan 6 11:36:19 2011 +0000 pnfs: remove unnecessary field lgp->status Signed-off-by: Fred Isaman <iisaman@xxxxxxxxxx> Signed-off-by: Benny Halevy <bhalevy@xxxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 52fabd73199cd00932f92c9f548bdf66a5bbc23d Author: Fred Isaman <iisaman@xxxxxxxxxx> Date: Thu Jan 6 11:36:18 2011 +0000 pnfs: fix incorrect comment in destroy_lseg Comment references get_layout_hdr_locked, which never existed in submitted code. Signed-off-by: Fred Isaman <iisaman@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 4a19de0f4b693139bb10b7cc3cfe1f618576ba67 Author: Andy Adamson <andros@xxxxxxxxxx> Date: Thu Jan 6 02:04:35 2011 +0000 NFS rename client back channel transport field Differentiate from server backchannel Signed-off-by: Andy Adamson <andros@xxxxxxxxxx> Acked-by: Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 42acd021824578fa0eeb6eb58d457c23ec5dc9c0 Author: Andy Adamson <andros@xxxxxxxxxx> Date: Thu Jan 6 02:04:34 2011 +0000 NFS add session back channel draining Currently session draining only drains the fore channel. The back channel processing must also be drained. Use the back channel highest_slot_used to indicate that a callback is being processed by the callback thread. Move the session complete to be per channel. When the session is draininig, wait for any current back channel processing to complete and stop all new back channel processing by returning NFS4ERR_DELAY to the back channel client. Drain the back channel, then the fore channel. Signed-off-by: Andy Adamson <andros@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit ece0de633c4d9106c39ea9f0db1638c42ead2541 Author: Andy Adamson <andros@xxxxxxxxxx> Date: Thu Jan 6 02:04:33 2011 +0000 NFS RPC_AUTH_GSS unsupported on v4.1 back channel Signed-off-by: Andy Adamson <andros@xxxxxxxxxx> Acked-by: Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit c36fca52f5e4594ffd0ff175b328966b0d393184 Author: Andy Adamson <andros@xxxxxxxxxx> Date: Thu Jan 6 02:04:32 2011 +0000 NFS refactor nfs_find_client and reference client across callback processing Fixes a bug where the nfs_client could be freed during callback processing. Refactor nfs_find_client to use minorversion specific means to locate the correct nfs_client structure. In the NFS layer, V4.0 clients are found using the callback_ident field in the CB_COMPOUND header. V4.1 clients are found using the sessionID in the CB_SEQUENCE operation which is also compared against the sessionID associated with the back channel thread after a successful CREATE_SESSION. Each of these methods finds the one an only nfs_client associated with the incoming callback request - so nfs_find_client_next is not needed. In the RPC layer, the pg_authenticate call needs to find the nfs_client. For the v4.0 callback service, the callback identifier has not been decoded so a search by address, version, and minorversion is used. The sessionid for the sessions based callback service has (usually) not been set for the pg_authenticate on a CB_NULL call which can be sent prior to the return of a CREATE_SESSION call, so the sessionid associated with the back channel thread is not used to find the client in pg_authenticate for CB_NULL calls. Pass the referenced nfs_client to each CB_COMPOUND operation being proceesed via the new cb_process_state structure. The reference is held across cb_compound processing. Use the new cb_process_state struct to move the NFS4ERR_RETRY_UNCACHED_REP processing from process_op into nfs4_callback_sequence where it belongs. Signed-off-by: Andy Adamson <andros@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 2c2618c6f29c41a0a966f14f05c8bf45fcabb750 Author: Andy Adamson <andros@xxxxxxxxxx> Date: Thu Jan 6 02:04:31 2011 +0000 NFS associate sessionid with callback connection The sessions based callback service is started prior to the CREATE_SESSION call so that it can handle CB_NULL requests which can be sent before the CREATE_SESSION call returns and the session ID is known. Set the callback sessionid after a sucessful CREATE_SESSION. Signed-off-by: Andy Adamson <andros@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit f4eecd5da3422e82e88e36c33cbd2595eebcacb1 Author: Andy Adamson <andros@xxxxxxxxxx> Date: Thu Jan 6 02:04:30 2011 +0000 NFS implement v4.0 callback_ident Use the small id to pointer translator service to provide a unique callback identifier per SETCLIENTID call used to identify the v4.0 callback service associated with the clientid. Signed-off-by: Andy Adamson <andros@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit ea00528126a701845d7c445e725b271940381e3d Author: Andy Adamson <andros@xxxxxxxxxx> Date: Thu Jan 6 02:04:29 2011 +0000 NFS do not clear minor version at nfs_client free Resetting the client minor version operations causes nfs4_destroy_callback to fail to shutdown the NFSv4.1 callback service. There is no reason to reset the client minorversion operations when the nfs_client struct is being freed. Remove the minorverion reset and rename the function. Signed-off-by: Andy Adamson <andros@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 01c9a0bc60507af7f28cb9138a81836de4528199 Author: Andy Adamson <andros@xxxxxxxxxx> Date: Thu Jan 6 02:04:28 2011 +0000 NFS use svc_create_xprt for NFSv4.1 callback service The new back channel transport means we call the normal creation routine as well as svc_xprt_put. Signed-off-by: Andy Adamson <andros@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 16b2d1e1d12de000404d7c845d0db1226511f84d Author: Andy Adamson <andros@xxxxxxxxxx> Date: Thu Jan 6 02:04:27 2011 +0000 SUNRPC register and unregister the back channel transport Signed-off-by: Andy Adamson <andros@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 1f11a034cdc4b45ee56d51b87a9e37cb776fb15b Author: Andy Adamson <andros@xxxxxxxxxx> Date: Thu Jan 6 02:04:26 2011 +0000 SUNRPC new transport for the NFSv4.1 shared back channel Move the current sock create and destroy routines into the new transport ops. Back channel socket will be destroyed by the svc_closs_all call in svc_destroy. Added check: only TCP supported on shared back channel. Signed-off-by: Andy Adamson <andros@xxxxxxxxxx> Acked-by: Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 71e161a6a9fa021a280e564254fcda894e6fbd14 Author: Andy Adamson <andros@xxxxxxxxxx> Date: Thu Jan 6 02:04:25 2011 +0000 SUNRPC fix bc_send print Signed-off-by: Andy Adamson <andros@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 4b5b3ba16be1b195d2e1161746637acd4b9fed4f Author: Andy Adamson <andros@xxxxxxxxxx> Date: Thu Jan 6 02:04:24 2011 +0000 SUNRPC move svc_drop to caller of svc_process_common The NFSv4.1 shared back channel does not need to call svc_drop because the callback service never outlives the single connection it services, and it reuses it's buffers and keeps the trasport. Signed-off-by: Andy Adamson <andros@xxxxxxxxxx> Acked-by: Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 64c2ce8b72eceec4030b04bca32d098b3d1431bb Author: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxxxxxxx> Date: Thu Dec 9 11:35:25 2010 +0000 nfsv4: Switch to generic xattr handling code This patch make nfsv4 use the generic xattr handling code to get the nfsv4 acl. This will help us to add richacl support to nfsv4 in later patches Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit a8a5da996df7d2d91b5aef2752da9adcefea4bc6 Author: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxxxxxxx> Date: Thu Dec 9 11:35:14 2010 +0000 nfs: Set MS_POSIXACL always We want to skip VFS applying mode for NFS. So set MS_POSIXACL always and selectively use umask. Ideally we would want to use umask only when we don't have inheritable ACEs set. But NFS currently don't allow to send umask to the server. So this is best what we can do and this is consistent with NFSv3 Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit bf0c84f1614bffc59565d04f09b9ac6b1aa269a9 Author: Namhyung Kim <namhyung@xxxxxxxxx> Date: Tue Dec 28 17:02:46 2010 +0000 NFS: use ERR_CAST() Use ERR_CAST() intead of wierd-looking cast. Signed-off-by: Namhyung Kim <namhyung@xxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 5f3e97c9ee6290befb5a2e78baf95ff951a8a34a Author: J. Bruce Fields <bfields@xxxxxxxxxx> Date: Tue Dec 21 23:49:34 2010 +0000 nfs: fix mispelling of idmap CONFIG symbol Trivial, but confusing when you're trying to grep through this code.... Signed-off-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit beb0f0a9fba1fa98b378329a9a5b0a73f25097ae Author: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> Date: Mon Dec 20 21:19:26 2010 +0000 kernel panic when mount NFSv4 On Tue, 2010-12-14 at 16:58 +0800, Mi Jinlong wrote: > Hi, > > When testing NFSv4 at RHEL6 with kernel 2.6.32, I got a kernel panic > at NFS client's __rpc_create_common function. > > The panic place is: > rpc_mkpipe > __rpc_lookup_create() <=== find pipefile *idmap* > __rpc_mkpipe() <=== pipefile is *idmap* > __rpc_create_common() > ****** BUG_ON(!d_unhashed(dentry)); ****** *panic* > > It means that the dentry's d_flags have be set DCACHE_UNHASHED, > but it should not be set here. > > Is someone known this bug? or give me some idea? > > A reproduce program is append, but it can't reproduce the bug every time. > the export is: "/nfsroot *(rw,no_root_squash,fsid=0,insecure)" > > And the panic message is append. > > ============================================================================ > #!/bin/sh > > LOOPTOTAL=768 > LOOPCOUNT=0 > ret=0 > > while [ $LOOPCOUNT -ne $LOOPTOTAL ] > do > ((LOOPCOUNT += 1)) > service nfs restart > /usr/sbin/rpc.idmapd > mount -t nfs4 127.0.0.1:/ /mnt|| return 1; > ls -l /var/lib/nfs/rpc_pipefs/nfs/*/ > umount /mnt > echo $LOOPCOUNT > done > > =============================================================================== > Code: af 60 01 00 00 89 fa 89 f0 e8 64 cf 89 f0 e8 5c 7c 64 cf 31 c0 8b 5c 24 10 8b > 74 24 14 8b 7c 24 18 8b 6c 24 1c 83 c4 20 c3 <0f> 0b eb fc 8b 46 28 c7 44 24 08 20 > de ee f0 c7 44 24 04 56 ea > EIP:[<f0ee92ea>] __rpc_create_common+0x8a/0xc0 [sunrpc] SS:ESP 0068:eccb5d28 > ---[ end trace 8f5606cd08928ed2]--- > Kernel panic - not syncing: Fatal exception > Pid:7131, comm: mount.nfs4 Tainted: G D -------------------2.6.32 #1 > Call Trace: > [<c080ad18>] ? panic+0x42/0xed > [<c080e42c>] ? oops_end+0xbc/0xd0 > [<c040b090>] ? do_invalid_op+0x0/0x90 > [<c040b10f>] ? do_invalid_op+0x7f/0x90 > [<f0ee92ea>] ? __rpc_create_common+0x8a/0xc0[sunrpc] > [<f0edc433>] ? rpc_free_task+0x33/0x70[sunrpc] > [<f0ed6508>] ? prc_call_sync+0x48/0x60[sunrpc] > [<f0ed656e>] ? rpc_ping+0x4e/0x60[sunrpc] > [<f0ed6eaf>] ? rpc_create+0x38f/0x4f0[sunrpc] > [<c080d80b>] ? error_code+0x73/0x78 > [<f0ee92ea>] ? __rpc_create_common+0x8a/0xc0[sunrpc] > [<c0532bda>] ? d_lookup+0x2a/0x40 > [<f0ee94b1>] ? rpc_mkpipe+0x111/0x1b0[sunrpc] > [<f10a59f4>] ? nfs_create_rpc_client+0xb4/0xf0[nfs] > [<f10d6c6d>] ? nfs_fscache_get_client_cookie+0x1d/0x50[nfs] > [<f10d3fcb>] ? nfs_idmap_new+0x7b/0x140[nfs] > [<c05e76aa>] ? strlcpy+0x3a/0x60 > [<f10a60ca>] ? nfs4_set_client+0xea/0x2b0[nfs] > [<f10a6d0c>] ? nfs4_create_server+0xac/0x1b0[nfs] > [<c04f1400>] ? krealloc+0x40/0x50 > [<f10b0e8b>] ? nfs4_remote_get_sb+0x6b/0x250[nfs] > [<c04f14ec>] ? kstrdup+0x3c/0x60 > [<c0520739>] ? vfs_kern_mount+0x69/0x170 > [<f10b1a3c>] ? nfs_do_root_mount+0x6c/0xa0[nfs] > [<f10b1b47>] ? nfs4_try_mount+0x37/0xa0[nfs] > [<f10afe6d>] ? nfs4_validate_text_mount_data+-x7d/0xf0[nfs] > [<f10b1c42>] ? nfs4_get_sb+0x92/0x2f0 > [<c0520739>] ? vfs_kern_mount+0x69/0x170 > [<c05366d2>] ? get_fs_type+0x32/0xb0 > [<c052089f>] ? do_kern_mount+0x3f/0xe0 > [<c053954f>] ? do_mount+0x2ef/0x740 > [<c0537740>] ? copy_mount_options+0xb0/0x120 > [<c0539a0e>] ? sys_mount+0x6e/0xa0 Hi, Does the following patch fix the problem? Cheers Trond -------------------------- SUNRPC: Fix a BUG in __rpc_create_common From: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> Mi Jinlong reports: When testing NFSv4 at RHEL6 with kernel 2.6.32, I got a kernel panic at NFS client's __rpc_create_common function. The panic place is: rpc_mkpipe __rpc_lookup_create() <=== find pipefile *idmap* __rpc_mkpipe() <=== pipefile is *idmap* __rpc_create_common() ****** BUG_ON(!d_unhashed(dentry)); ****** *panic* The test is wrong: we can find ourselves with a hashed negative dentry here if the idmapper tried to look up the file before we got round to creating it. Just replace the BUG_ON() with a d_drop(dentry). Reported-by: Mi Jinlong <mijinlong@xxxxxxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 51f128ea1c9224c1e3cf6c6a1498431d97699668 Author: Dan Carpenter <error27@xxxxxxxxx> Date: Sun Jan 2 20:20:42 2011 +0000 lockd: double unlock in next_host_state() We unlock again after we goto out. Signed-off-by: Dan Carpenter <error27@xxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 878215feb8b2417c4700090b4335739858cf7b5a Author: Jesper Juhl <jj@xxxxxxxxxxxxx> Date: Fri Dec 24 22:22:37 2010 +0000 NFS: Don't leak in nfs_proc_symlink() Hi, In fs/nfs/proc.c::nfs_proc_symlink() we will leak memory if either nfs_alloc_fhandle() or nfs_alloc_fattr() returns NULL but the other one doesn't. This patch ensures memory allocated by one when the other fails is always released (this is safe since nfs_free_fattr() and nfs_free_fhandle() both call kfree which deals gracefully with NULL pointers). Signed-off-by: Jesper Juhl <jj@xxxxxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 1174dd1f890b7f8be8ec6a7071657fe8f59e18b7 Author: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> Date: Tue Dec 21 10:52:24 2010 -0500 NFSv4: Convert a few commas into semicolons... Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit b3bcedadf23264c3b7afcbfbfe1965a17ef1352c Author: Joe Perches <joe@xxxxxxxxxxx> Date: Tue Dec 21 10:52:24 2010 -0500 net/sunrpc/clnt.c: Convert sprintf_symbol to %ps Signed-off-by: Joe Perches <joe@xxxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit aa69947399a119d7f1b35bbcd62c849839b35449 Author: Stanislav Kinsbursky <skinsbursky@xxxxxxxxxxxxx> Date: Wed Dec 8 12:40:13 2010 +0300 NFS: suppressing showing of default mount port value in /proc fixed Update: added check for zero value as it was before (note: can't simply check mountd_port for positive value because it's typeof unsigned short) Default value for mount server port is set to NFS_UNSPEC_PORT (-1) and will not be changed during parsing mount options for mound data version 6. This default value will be showed for mountport in /proc/mounts always since current default check is for zero value. This small mistake leads to big problem, because during umount.nfs execution from old user-space utils (at least nfs-utils 1.0.9) this value will be used as the server port to connect to. This request will be rejected (since port is 65535) and thus nfs mount point can't be unmounted. Note from Chuck Lever (chuck.lever@xxxxxxxxxx): this is only possible if /etc/mtab is a link to /proc/mounts. Not all systems have this configuration. Signed-off-by: Stanislav Kinsbursky <skinsbursky@xxxxxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 611c96c8f728c4bcdbadaa2387942d3c0641cadf Author: J. Bruce Fields <bfields@xxxxxxxxxx> Date: Mon Dec 13 19:05:46 2010 -0500 nfs4: fix units bug causing hang on recovery Note that cl_lease_time is in jiffies. This can cause a very long wait in the NFS4ERR_CLID_INUSE case. Signed-off-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 72895b1ac7baeda76835cddb3edb019a90d32bcb Author: Jesper Juhl <jj@xxxxxxxxxxxxx> Date: Thu Dec 9 23:17:15 2010 +0100 nfs: Take advantage of kmem_cache_zalloc() in nfs_page_alloc() Take advantage of kmem_cache_zalloc() in nfs_page_alloc(). Save a call to memset() and a few bytes. Before: [jj@dragon linux-2.6]$ size fs/nfs/pagelist.o text data bss dec hex filename 1765 0 8 1773 6ed fs/nfs/pagelist.o After: [jj@dragon linux-2.6]$ size fs/nfs/pagelist.o text data bss dec hex filename 1749 0 8 1757 6dd fs/nfs/pagelist.o Signed-off-by: Jesper Juhl <jj@xxxxxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit c8b031ebc1246d42463c5c69df8f610ca9f48e77 Author: Tobias Klauser <tklauser@xxxxxxxxxx> Date: Thu Dec 9 15:53:28 2010 +0100 NFS: Remove redundant unlikely() IS_ERR() already implies unlikely(), so it can be omitted here. Signed-off-by: Tobias Klauser <tklauser@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 79691836603541e81a3793970826ac4a75429572 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 15:06:52 2010 +0000 lockd: Remove src_sap and src_len from nlm_lookup_host_info struct Clean up. The contents of the src_sap field is not used in nlm_alloc_host(). Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 2025889828bb14b56d9aa4c1a785bd9847ccdc4b Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 15:06:41 2010 +0000 lockd: Remove nlm_lookup_host() Clean up. Remove the now unused helper nlm_lookup_host(). Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit fcc072c783491ca465e4d1e74da7dbb48dbf7a31 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 15:06:32 2010 +0000 lockd: Make nrhosts an unsigned long Clean up. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit d2df0484bb38f2e0d9754b00597d4a6d1cf666d0 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 15:06:22 2010 +0000 lockd: Rename nlm_hosts Clean up. nlm_hosts now contains only server-side entries. Rename it to match convention of client side cache. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 67216b94d498f5880d8bba2a6b841880739dd524 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 15:06:12 2010 +0000 lockd: Clean up nlmsvc_lookup_host() Clean up. Change nlmsvc_lookup_host() to be purpose-built for server-side nlm_host management. This replaces the generic nlm_lookup_host() helper function, just like on the client side. The lookup logic is specialized for server host lookups. The server side cache also gets its own specialized equivalent of the nlm_release_host() function. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 8ea6ecc8b0759756a766c05dc7c98c51ec90de37 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 15:05:52 2010 +0000 lockd: Create client-side nlm_host cache NFS clients don't need the garbage collection processing that is performed on nlm_host structures. The client picks up an nlm_host at mount time and holds a reference to it until the file system is unmounted. Servers, on the other hand, don't have a precise way to tell when an nlm_host is no longer being used, so zero refcount nlm_host entries are left to expire in the cache after a time. Basically there's nothing holding a reference to an nlm_host between individual server-side NLM requests, but we can't afford the expense of recreating them for every new NLM request from a client. The nlm_host cache adds some lifetime hysteresis to entries in the cache so the next time a particular nlm_host is needed, it's likely to be discovered by a lookup rather than created from whole cloth. With the new implementation, client nlm_host cache items are no longer garbage collected, and are destroyed directly by a new release function specialized for client entries, nlmclnt_release_host(). They are cached in their own data structure, and have their own lookup logic, simplified and specialized for client nlm_host entries. However, the client nlm_host cache still shares reboot recovery logic with the server nlm_host cache. The NSM "peer rebooted" downcall for clients and servers still come through the same RPC call. This is a legacy formal API that would be difficult to alter, and besides, the user space NSM implementation can't tell the difference between peers that are clients or servers. For this reason, the client cache continues to share the nlm_host_mutex (and reboot recovery logic) with the server cache. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 7db836d4a427c3c64406b00b6d8d745d6335d72a Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 15:05:42 2010 +0000 lockd: Split nlm_release_call() The nlm_release_call() function is invoked from both the server and the client side. We're about to introduce a distinct server- and client-side nlm_release_host(), so nlm_release_call() must first be split into a client-side and a server-side version. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 723bb5b5052faba57060a2feb564ced22416b5bc Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 15:05:33 2010 +0000 lockd: Add nlm_destroy_host_locked() Refactor the tail of nlm_gc_hosts() into nlm_destroy_host() so that this logic can be used separately from garbage collection. Rename it _locked() to document that it must be called with the hosts cache mutex held. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit a7952f4056d4d9c63c70534bcfd4f2c11e487000 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 15:05:23 2010 +0000 lockd: Add nlm_alloc_host() Refactor nlm_host allocation and initialization into a separate function. This will be the common piece of server and client nlm_host lookup logic after the nlm_host cache is split. Small change: use kmalloc() instead of kzalloc(), as we're overwriting almost all fields in the new nlm_host struct with non-zero values immediately after it is allocated. An added benefit is we now have an explicit reference to each field name where it is initialized (for all you cscope fans out there). Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit b10e30f6559978e3c8ca2a70c1cb35d6680a4021 Author: J. Bruce Fields <bfields@xxxxxxxxxxxxxx> Date: Tue Dec 14 15:05:13 2010 +0000 lockd: reorganize nlm_host_rebooted Minor reorganization; no change in behavior. This will save some duplicated code after we split the client and server host caches. Signed-off-by: J. Bruce Fields <bfields@xxxxxxxxxxxxxx> [ cel: Forward-ported to 2.6.37 ] Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit b113746888c260a02f6ae1e92b0b9ef7e9c38993 Author: J. Bruce Fields <bfields@xxxxxxxxxxxxxx> Date: Tue Dec 14 15:05:03 2010 +0000 lockd: define host_for_each{_safe} macros We've got a lot of loops like this, and I find them a little easier to read with the macros. More such loops are coming. Signed-off-by: J. Bruce Fields <bfields@xxxxxxxxxxxxxx> [ cel: Forward-ported to 2.6.37 ] Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit bf2695516db982e90a22fc94f93491b481796bb1 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:59:29 2010 +0000 SUNRPC: New xdr_streams XDR decoder API 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 <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 9f06c719f474be7003763284a990bed6377bb0d4 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:59:18 2010 +0000 SUNRPC: New xdr_streams XDR encoder API 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 <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 1ac7c23e4af5e83525137661595000099f1ce94f Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:59:09 2010 +0000 SUNRPC: Determine value of "nrprocs" automatically Clean up. Just fixed a panic where the nrprocs field in a different upper layer client was set by hand incorrectly. Use the compiler-generated method used by the other upper layer protocols. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 4129ccf303593a1922a934697f99e682ff491504 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:58:59 2010 +0000 SUNRPC: Avoid return code checking in rpcbind XDR encoder functions Clean up. The trend in the other XDR encoder functions is to BUG() when encoding problems occur, since a problem here is always due to a local coding error. Then, instead of a status, zero is unconditionally returned. Update the rpcbind XDR encoders to behave this way. To finish the update, use the new-style be32_to_cpup() and cpu_to_be32() macros, and compute the buffer sizes using raw integers instead of sizeof(). This matches the conventions used in other XDR functions. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit b43cd8c153f6902100ed50c1f7e11a470c73a73f Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:58:49 2010 +0000 NFS: Remove unused UMNT response data structure Clean up. The UMNT request has a NULL response. There's no need to set up a mountres structure for it. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 98eb2b4f9323bcf2a46476576d3155758cb0a473 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:58:40 2010 +0000 NFS: Avoid return code checking in mount XDR encoder functions Clean up. The trend in the other XDR encoder functions is to BUG() when encoding problems occur, since a problem here is always due to a local coding error. Then, instead of a status, zero is unconditionally returned. Update the mount client XDR encoders to behave this way. To finish the update, use the new-style be32_to_cpup() and cpu_to_be32() macros, and compute the buffer sizes using raw integers instead of sizeof(). This matches the conventions used in other XDR functions. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 49b170047f4a9fe1483132e14a11bdf493bdb8af Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:58:30 2010 +0000 NSM: Avoid return code checking in NSM XDR encoder functions Clean up. The trend in the other XDR encoder functions is to BUG() when encoding problems occur, since a problem here is always due to a local coding error. Then, instead of a status, zero is unconditionally returned. Update the NSM XDR encoders to behave this way. To finish the update, use the new-style be32_to_cpup() and cpu_to_be32() macros, and compute the buffer sizes using raw integers instead of sizeof(). This matches the conventions used in other XDR functions Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit ead00597882c4ee3c534d6880cc3bcb4d412cc4b Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:58:21 2010 +0000 NFS: Squelch compiler warning in decode_getdeviceinfo() Clean up. .../linux/nfs-2.6/fs/nfs/nfs4xdr.c: In function âdecode_getdeviceinfoâ: .../linux/nfs-2.6/fs/nfs/nfs4xdr.c:5008: warning: comparison between signed and unsigned integer expressions Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 573c4e1ef53a6b891b73cc2257e1604da754a2e4 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:58:11 2010 +0000 NFS: Simplify ->decode_dirent() calling sequence Clean up. The pointer returned by ->decode_dirent() is no longer used as a pointer. The only call site (xdr_decode() in fs/nfs/dir.c) simply extracts the errno value encoded in the pointer. Replace the returned pointer with a standard integer errno return value. Also, pass the "server" argument as part of the nfs_entry instead of as a separate parameter. It's faster to derive "server" in nfs_readdir_xdr_to_array() since we already have the directory's inode handy. "server" ought to be invariant for a set of entries in the same directory, right? The legacy versions of decode_dirent() don't use "server" anyway, so it's wasted work for them to derive and pass "server" for each entry. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 8111f373600cd43b3198b48b9238e3ad2fd9908d Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:58:01 2010 +0000 NFS: Fix hdrlen calculation in NFSv4's decode_read() When computing the length of the header, be sure to include the four octets consumed by "count". Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit d8367c504e39528a057a5d7a267b6724f7fdb4b8 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:57:52 2010 +0000 lockd: Move nlmdbg_cookie2a() to svclock.c Clean up. nlmdbg_cookie2a() is used only in svclock.c. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 7d93bd71cb3e2629cc88bc59f393bd4df4162b94 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:57:42 2010 +0000 NFS: Repair whitespace damage in NFS PROC macro Clean up. When I was making other changes in this area, checkscript.pl complained about the use of leading blanks in the PROC macros in the xdr files. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 85a56480191ca9f08fc775c129b9eb5c8c1f2c05 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:57:32 2010 +0000 NFSD: Update XDR decoders in NFSv4 callback client Clean up. Remove old-style NFSv4 XDR macros in favor of the style now used in fs/nfs/nfs4xdr.c. These were forgotten during the recent nfs4xdr.c rewrite. Additional whitespace cleanup adds to the size of this patch. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit a033db487eec09afde00a3562842982a8053c887 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:57:22 2010 +0000 NFSD: Update XDR encoders in NFSv4 callback client Clean up. Remove old-style NFSv4 XDR macros in favor of the style now used in fs/nfs/nfs4xdr.c. These were forgotten during the recent nfs4xdr.c rewrite. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 3460f29a27344db8c7af62cafdb961286ef0b6cd Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:57:12 2010 +0000 lockd: Introduce new-style XDR functions for NLMv4 We'd like to prevent local buffer overflows caused by malicious or broken servers. New xdr_stream style decoders can do that. For efficiency, we also want to be able to pass xdr_streams from call_encode() to all XDR encoding functions, rather than building an xdr_stream in every XDR encoding function in the kernel. Same idea as the NLM v3 XDR overhaul. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit f6048709391336cf27fb5c1cfca8e792103e5a73 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:57:02 2010 +0000 NFS: Move and update xdr_decode_foo() functions that we're keeping Clean up. Move the timestamp decoder to match the placement and naming conventions of the other helpers. Fold xdr_decode_fattr() into decode_fattr3(), which is now it's only user. Fold xdr_decode_wcc_attr() into decode_wcc_attr(), which is now it's only user. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit b2cdd9c9c95e0e389a8b75fe25f266fc5267bbb6 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:56:52 2010 +0000 NFS: Remove unused old NFSv3 decoder functions Clean up. Remove unused legacy result decoder functions, and any now unused decoder helper functions. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit f5fc3c50c99a7df2bf908dfe66f112d35178ee07 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:56:42 2010 +0000 NFS: Switch in new NFSv3 decoder functions The naming scheme of the new decoder functions, which follows the NFSv4 XDR decoder functions, is slightly different than the scheme used for the old functions. Rename the functions as a separate step to keep the patches clean. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit e4f9323409369a3aeb01885c0c4409d2eeec794a Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:56:30 2010 +0000 NFS: Introduce new-style XDR decoding functions for NFSv2 We'd like to prevent local buffer overflows caused by malicious or broken servers. New xdr_stream style decoders can do that. For efficiency, we also eventually want to be able to pass xdr_streams from call_decode() to all XDR decoding functions, rather than building an xdr_stream in every XDR decoding function in the kernel. Static helper functions are left without the "inline" directive. This allows the compiler to choose automatically how to optimize these for size or speed. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 9d5a64343925a152e1907c652a0d71d6640868b3 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:56:20 2010 +0000 NFS: Update xdr_encode_foo() functions that we're keeping Clean up. Move the timestamp and the sattr encoder to match the placement convention of the other helpers, update their coding style, and refresh their documenting comments. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 499ff710b2fd3a03c8195c82340e5166eed04205 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:56:10 2010 +0000 NFS: Remove unused old NFSv3 encoder functions Clean up. Remove unused legacy argument encoder functions, and any now unused encoder helper functions. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit ad96b5b5eae59696b97e207d730b8c8cfb9d4e42 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:56:01 2010 +0000 NFS: Replace old NFSv3 encoder functions with xdr_stream-based ones The naming scheme of the new encoder functions, which follows the NFSv4 XDR encoder functions, is slightly different than the scheme used for the old functions. Rename the functions as a separate step to keep the patches clean. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit d9c407b138926132e1f93c01fb2dee50eb0bb615 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:55:50 2010 +0000 NFS: Introduce new-style XDR encoding functions for NFSv3 We're interested in taking advantage of the safety benefits of xdr_streams. These data structures allow more careful checking for buffer overflow while encoding. More careful type checking is also introduced in the new functions. For efficiency, we also eventually want to be able to pass xdr_streams from call_encode() to all XDR encoding functions, rather than building an xdr_stream in every XDR encoding function in the kernel. To do this means all encoders must be ready to handle a passed-in xdr_stream. The new encoders follow the modern paradigm for XDR encoders: BUG on error, and always return a zero status code. Static helper functions are left without the "inline" directive. This allows the compiler to choose automatically how to optimize these for size or speed. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 2b061f9ef216b6d229b06267f188167fd6ab3d9b Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:55:40 2010 +0000 lockd: Introduce new-style XDR functions for NLMv3 We'd like to prevent local buffer overflows caused by malicious or broken servers. New xdr_stream style decoders can do that. For efficiency, we also eventually want to be able to pass xdr_streams from call_encode() and call_decode() to all XDR encoding functions, rather than building an xdr_stream in every XDR encoding and decoding function in the kernel. To do all of this, rewrite the XDR encoding and decoding functions in fs/lockd/xdr.c to use xdr_streams. This makes them more or less incompatible with server-side XDR helper functions, so break them out into a separate source file. Static helper functions are left without the "inline" directive. This allows the compiler to choose automatically how to optimize these for size or speed. SHARE-related functionality doesn't seem to be used, as those functions are hiding behind a #define that isn't set anywhere that I can find. And, they've been in there forever (at least as far back as the kernel's git history goes), yet remain unused. Let's take the opportunity to bin them. It should be easy enough for someone to introduce proper XDR functions if at some point SHARE-related NLM functionality is desired. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 5f96e5e31b4f4a2f126adfe0586a7555c11b0562 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:55:30 2010 +0000 NFS: Move and update xdr_decode_foo() functions that we're keeping Clean up. Move the timestamp decoder to match the placement and naming conventions of the other helpers. Fold xdr_decode_fattr() into decode_fattr(), which is now it's only user. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 661ad4239a51a2169a366a227c68cf3b654ab936 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:55:20 2010 +0000 NFS: Replace old NFSv2 decoder functions with xdr_stream-based ones Clean up. Remove unused legacy result decoder functions, and any now unused decoder helper functions. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit f796f8b3ae292abb9cb2931e8db6fc1d69bba09d Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:55:10 2010 +0000 NFS: Introduce new-style XDR decoding functions for NFSv2 We'd like to prevent local buffer overflows caused by malicious or broken servers. New xdr_stream style decoders can do that. For efficiency, we also eventually want to be able to pass xdr_streams from call_decode() to all XDR decoding functions, rather than building an xdr_stream in every XDR decoding function in the kernel. nfs_decode_dirent() is renamed to follow the naming convention of the other two dirent decoders. Static helper functions are left without the "inline" directive. This allows the compiler to choose automatically how to optimize these for size or speed. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 858284932462cec260f3d1d7426aeb03f5dbc2ad Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:55:00 2010 +0000 NFS: Use the "nfs_stat" enum for nfs_stat_to_errno()'s argument Clean up. To distinguish more clearly between the on-the-wire NFSERR_ value and our local errno values, use the proper type for the argument of nfs_stat_to_errno(). Add a documenting comment appropriate for a global function shared outside this source file. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 282ac2a573dd1be4230710932cd471ed5a3a94b8 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:54:50 2010 +0000 NFS: Update xdr_encode_foo() functions that we're keeping Clean up. The new helper functions are kept in order by section of RFC 1094. Move the two timestamp encoders we're keeping, update their coding style, and refresh their documenting comments. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 2d70f533eab0a0cabd05ee878b6709707bf63c86 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:54:40 2010 +0000 NFS: Remove old NFSv2 encoder functions Clean up: Remove unused legacy argument encoder functions, and any now unused encoder helper functions. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> commit 25a0866cc63281b480cc0c11ddeaccb2ffc57dc9 Author: Chuck Lever <chuck.lever@xxxxxxxxxx> Date: Tue Dec 14 14:54:30 2010 +0000 NFS: Introduce new-style XDR encoding functions for NFSv2 We're interested in taking advantage of the safety benefits of xdr_streams. These data structures allow more careful checking for buffer overflow while encoding. More careful type checking is also introduced in the new functions. For efficiency, we also eventually want to be able to pass xdr_streams from call_encode() to all XDR encoding functions, rather than building an xdr_stream in every XDR encoding function in the kernel. To do this means all encoders must be ready to handle a passed-in xdr_stream. The new encoders follow the modern paradigm for XDR encoders: BUG on any error, and always return a zero status code. Static helper functions are left without the "inline" directive. This allows the compiler to choose automatically how to optimize these for size or speed. Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> Tested-by: J. Bruce Fields <bfields@xxxxxxxxxx> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx> -- Trond Myklebust Linux NFS client maintainer NetApp Trond.Myklebust@xxxxxxxxxx www.netapp.com -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html