NFS client patches for Linux 2.6.22

The following set of patches fix known issues with the 2.6.22 NFS client code, and significantly enhance the support for NFSv4.

linux-2.6.22-001-odirect_cleanup.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sat, 19 May 2007 17:22:52 -0400

NFS: Clean ups in fs/nfs/direct.c

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-002-odirect_accept_short_get_user_pages.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Tue, 22 May 2007 10:22:20 -0400

NFS: Don't fail an O_DIRECT read/write if get_user_pages() returns pages

There is no need to fail the entire O_DIRECT read/write just because get_user_pages() returned fewer pages than we requested.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-003-fix_uptodate_write.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sat, 19 May 2007 11:58:03 -0400

NFS: Don't mark a written page as uptodate until it is on disk

The write may fail, so we should not mark the page as uptodate until we are certain that the data has been accepted and written to disk by the server.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-004-read_optimisation.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sun, 20 May 2007 13:05:05 -0400

NFS: Minor read optimisation...

Since PG_uptodate may now end up getting set during the call to nfs_wb_page(), we can avoid putting a read request on the wire in those situations.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-005-cleanup_open_context.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Tue, 5 Jun 2007 10:42:27 -0400

NFS: Replace vfsmount and dentry in nfs_open_context with struct path

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-006-cleanup_path2.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Tue, 5 Jun 2007 11:46:42 -0400

NFSv4: Cleanup: pass the nfs_open_context to open recovery code

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-007-ensure_open_pins_vfsmount.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Tue, 5 Jun 2007 12:30:00 -0400

NFSv4: Ensure asynchronous open() calls always pin the mountpoint

A number of race conditions may currently ensue if the user presses ^C and then unmounts the partition while an asynchronous open() is in progress.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-008-fix_close_oops.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Tue, 5 Jun 2007 10:31:33 -0400

NFSv4: Ensure that nfs4_do_close() doesn't race with umount

nfs4_do_close() does not currently have any way to ensure that the user won't attempt to unmount the partition while the asynchronous RPC call is completing. This again may cause Oopses in nfs_update_inode().

Add a vfsmount argument to nfs4_close_state to ensure that the partition remains mounted while we're closing the file.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-009-cleanup_nfs4_call_async.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Mon, 11 Jun 2007 23:05:07 -0400

NFSv4: Clean up nfs4_call_async()

Use rpc_run_task() instead of doing it ourselves.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-010-fix_nfs_reval_fsid.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Tue, 5 Jun 2007 13:26:15 -0400

NFS: Fix nfs_reval_fsid()

We don't need to revalidate the fsid on the root directory. It suffices to revalidate it on the current directory.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-011-use_highmem_for_symlinks.dif:

From: Jeff Layton <jlayton@redhat.com>

Date: Thu, 7 Jun 2007 09:58:08 -0400

NFS: Use GFP_HIGHUSER for page allocation in nfs_symlink()

nfs_symlink() allocates a GFP_KERNEL page for the pagecache. Most pagecache pages are allocated using GFP_HIGHUSER, and there's no reason not to do that in nfs_symlink() as well.

Signed-off-by: Jeff Layton <jlayton@redhat.com>

linux-2.6.22-012-reenable_forced_umount.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Tue, 5 Jun 2007 19:13:47 -0400

NFS: Re-enable forced umounts

They disappeared some time around 2.6.18.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-013-fix_nfs4_oexcl_create.dif:

From: Jeff Layton <jlayton@redhat.com>

Date: Tue, 5 Jun 2007 14:49:03 -0400

NFS4: on a O_EXCL OPEN make sure SETATTR sets the fields holding the verifier

The Linux NFS4 client simply skips over the bitmask in an O_EXCL open call and so it doesn't bother to reset any fields that may be holding the verifier. This patch has us save the first two words of the bitmask (which is all the current client has #defines for). The client then later checks this bitmask and turns on the appropriate flags in the sattr->ia_verify field for the following SETATTR call.

This patch only currently checks to see if the server used the atime and mtime slots for the verifier (which is what the Linux server uses for this). I'm not sure of what other fields the server could reasonably use, but adding checks for others should be trivial.

Signed-off-by: Jeff Layton <jlayton@redhat.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-014-fixup_nfs3_oexcl_create.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Tue, 5 Jun 2007 19:27:00 -0400

NFS: nfs3_proc_create() should use nfs_post_op_update_inode()

Also get rid of a redundant call to nfs_setattr_update_inode(). The call to nfs3_proc_setattr() already takes care of that.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-015-fix_nfs_access_shrinker.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Tue, 5 Jun 2007 19:23:43 -0400

NFS: Fix an Oops in the nfs_access_cache_shrinker()

The nfs_access_cache_shrinker may race with nfs_access_zap_cache().

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-016-convert_nfs_page_to_kref.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sun, 17 Jun 2007 13:26:38 -0400

NFS: Convert struct nfs_page to use krefs

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-017-rename_NFS_PAGE_TAG_WRITEBACK.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sun, 17 Jun 2007 15:10:24 -0400

NFS cleanup: Rename NFS_PAGE_TAG_WRITEBACK to NFS_PAGE_TAG_LOCKED

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-018-improve_scan_commit.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sun, 17 Jun 2007 15:27:42 -0400

NFS cleanup: speed up nfs_scan_commit using radix tree tags

Add a tag for requests that are waiting for a COMMIT

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-019-remove_dirty_commit_lists.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sun, 17 Jun 2007 15:40:59 -0400

NFS: Remove the redundant 'dirty' and 'commit' lists from nfs_inode

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-020-nfs_scan_list_dont_overflow.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sun, 17 Jun 2007 15:47:53 -0400

NFS: Prevent integer overflow in nfs_scan_list()

Also ensure that nfs_inode ncommit and npages are large enough to represent all possible values for the number of pages.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-021-resched_in_nfs_scan_list.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sun, 17 Jun 2007 16:02:34 -0400

NFS: reduce latency by using conditional rescheduling in nfs_scan_list

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-022-convert_nfs_open_context_to_kref.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sun, 17 Jun 2007 16:02:44 -0400

NFS: Convert struct nfs_open_context to use a kref

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-023-convert_nfs_opendata_to_kref.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sun, 17 Jun 2007 16:02:44 -0400

NFSv4: Convert struct nfs4_opendata to use struct kref

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-024-make_tk_tasks_list_per_client.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Thu, 14 Jun 2007 16:40:14 -0400

SUNRPC: Move rpc_task->tk_task list into struct rpc_clnt

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-025-add_a_per_client_spinlock.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sat, 16 Jun 2007 14:17:01 -0400

SUNRPC: Add a per-rpc_clnt spinlock

Use that to protect the rpc_clnt->cl_tasks list instead of using a global lock.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-026-cleanup_debug.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sat, 16 Jun 2007 14:17:01 -0400

SUNRPC: Clean up tk_pid allocation and make it lockless

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-027-convert_cl_users_to_kref.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Thu, 14 Jun 2007 16:40:31 -0400

SUNRPC: Convert rpc_clnt->cl_users to a kref

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-028-kill_rpc_clnt_cl_dead.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sat, 9 Jun 2007 19:39:12 -0400

SUNRPC: Kill rpc_clnt->cl_dead

Its use is at best racy, and there is only one user (lockd), which has additional locking that makes the whole thing redundant.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-029-kill_rpc_clnt_cl_oneshot.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sat, 9 Jun 2007 19:49:36 -0400

SUNRPC: Kill rpc_clnt->cl_oneshot

Replace it with explicit calls to rpc_shutdown_client() or rpc_destroy_client() (for the case of asynchronous calls).

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-030-rpc_clone_should_take_a_reference.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Thu, 14 Jun 2007 16:40:32 -0400

SUNRPC: Make rpc_clone take a reference instead of using cl_count

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-031-rpc_remove_cl_count.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Thu, 14 Jun 2007 16:40:32 -0400

SUNRPC: Remove rpc_clnt->cl_count

The kref now does most of what cl_count + cl_user used to do. The only remaining role for cl_count is to tell us if we are in a 'shutdown' phase. We can provide that information using a single bit field instead of a full atomic counter.

Also rename rpc_destroy_client() to rpc_close_client(), which reflects better what its role is these days.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-032-rpc_clone_fix_race.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sun, 17 Jun 2007 17:07:54 -0400

SUNRPC: Don't create an rpc_pipefs directory before rpc_clone is initialised

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-033-optimise_rpciod_up.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Thu, 14 Jun 2007 17:08:36 -0400

SUNRPC: Optimise rpciod_up()

Instead of taking the mutex every time we just need to increment/decrement rpciod_users, we can optmise by using atomic_inc_not_zero and atomic_dec_and_test.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-034-create_client_calls_rpciod_up.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Thu, 14 Jun 2007 17:26:17 -0400

SUNRPC: Make create_client() take a reference to the rpciod workqueue

Ensures that an rpc_client always has the possibility to send asynchronous RPC calls.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-035-remove_redundant_rpciod_up.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Thu, 14 Jun 2007 17:31:58 -0400

SUNRPC: Remove redundant calls to rpciod_up()/rpciod_down()

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-036-cleanup_rpc_sched_lock.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sat, 16 Jun 2007 14:18:40 -0400

SUNRPC: Move rpc_register_client and friends into net/sunrpc/clnt.c

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-037-simplify_rpc_call.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Tue, 12 Jun 2007 10:02:37 -0400

SUNRPC: clean up rpc_call_async/rpc_call_sync/rpc_run_task

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-038-fix_reconnect_deadlock.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Thu, 14 Jun 2007 18:00:42 -0400

SUNRPC: fix hang due to eventd deadlock...

Brian Behlendorf writes:

The root cause of the NFS hang we were observing appears to be a rare deadlock between the kernel provided usermodehelper API and the linux NFS client. The deadlock can arise because both of these services use the generic linux work queues. The usermodehelper API run the specified user application in the context of the work queue. And NFS submits both cleanup and reconnect work to the generic work queue for handling. Normally this is fine but a deadlock can result in the following situation.

- NFS client is in a disconnected state

- [events/0] runs a usermodehelper app with an NFS dependent operation, this triggers an NFS reconnect.

- NFS reconnect happens to be submitted to [events/0] work queue.

- Deadlock, the [events/0] work queue will never process the reconnect because it is blocked on the previous NFS dependent operation which will not complete.`

The solution is simply to run reconnect requests on rpciod.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-039-cred_backpointer_to_auth.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Thu, 7 Jun 2007 10:14:14 -0400

SUNRPC: Add a backpointer from the struct rpc_cred to the rpc_auth

Cleans up an issue whereby rpcsec_gss uses the rpc_clnt->cl_auth. If we want to be able to add several rpc_auths to a single rpc_clnt, then this abuse must go.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-040-remove_gss_auth_lock.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Thu, 7 Jun 2007 10:14:14 -0400

SUNRPC: Remove the gss_auth spinlock

We're just as well off using the inode spinlock instead.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-041-auth_gss_downcall_always_match_cred.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Thu, 7 Jun 2007 10:14:15 -0400

SUNRPC: Always match an upcall message in gss_pipe_downcall()

It used to be possible for an rpc.gssd daemon to stuff the RPC credential cache for any rpc client simply by creating RPCSEC_GSS contexts and then doing downcalls. In practice, no daemons ever made use of this feature.

Remove this feature now, since it will be impossible to figure out which mechanism a given context actually matches if we enable more than one gss mechanism to use the same upcall pipe.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-042-rpc_pipefs_move_downcall_queue.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Thu, 7 Jun 2007 15:31:36 -0400

SUNRPC: Add a downcall queue to struct rpc_inode

Currently, the downcall queue is tied to the struct gss_auth, which means that different RPCSEC_GSS pseudoflavours must use different upcall pipes. Add a list to struct rpc_inode that can be used instead.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-043-fix_rpc_mkpipe.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Thu, 7 Jun 2007 18:28:02 -0400

SUNRPC: Enable non-exclusive create in rpc_mkpipe()

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-044-rpc_pipe_cleanup.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Fri, 8 Jun 2007 14:14:46 -0400

SUNRPC: Clean up rpc_pipefs.

Add a dentry_ops with a d_delete() method in order to ensure that dentries are removed as soon as the last reference is gone.

Clean up rpc_depopulate() so that it only removes files that were created via rpc_populate().

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-045-track_kernel_rpc_pipe_users.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Fri, 8 Jun 2007 14:14:53 -0400

SUNRPC: Add a field to track the number of kernel users of an rpc_pipe

This allows us to correctly deduce when we need to remove the pipe.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-046-convert_rpc_pipefs_to_fsnotify.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Thu, 7 Jun 2007 22:44:34 -0400

SUNRPC: Convert rpc_pipefs to use the generic filesystem notification hooks

This will allow rpc.gssd to use inotify instead of dnotify in order to locate new rpc upcall pipes.

This also requires the exporting of __audit_inode_child(), which is used by fsnotify_create() and fsnotify_mkdir(). Ccing David Woodhouse.

Cc: David Woodhouse <dwmw2@infradead.org>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-047-fix_auth_memory_leak.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sat, 9 Jun 2007 15:41:42 -0400

SUNRPC: Fix a memory leak in the auth credcache code

The leak only affects the RPCSEC_GSS caches, since they are the only ones that are dynamically allocated... Rename the existing rpcauth_free_credcache() to rpcauth_clear_credcache() in order to better describe its role, then add a new function rpcauth_destroy_credcache() that actually frees the cache in addition to clearing it out.

Also move the call to destroy the credcache in gss_destroy() to come before the rpc upcall pipe is unlinked.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-048-fix_typo_in_auth_unix.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sun, 24 Jun 2007 15:24:29 -0400

SUNRPC: Fix a typo in unx_create()

We want to set the unix_cred_cache.nextgc on the first call to unx_create(), which should be when unix_auth.au_count === 1

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-049-fix_racy_gss_destroy.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sat, 9 Jun 2007 15:42:01 -0400

SUNRPC: Fix a memory leak in gss_create()

Fix a memory leak in gss_create() whereby the rpc credcache was not being freed if the rpc_mkpipe() call failed.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-050-fix_racy_rpcauth_create.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sat, 9 Jun 2007 16:15:46 -0400

SUNRPC: Fix races in rpcauth_create

See the FIXME: auth_flavors[] really needs a lock and module refcounting.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-051-make_rpc_ping_static.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sat, 23 Jun 2007 10:17:16 -0400

SUNRPC: Make rpc_ping() static

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-052-add_rpc_call_null.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sat, 23 Jun 2007 10:17:16 -0400

SUNRPC: Add the helper function 'rpc_call_null()'

Does a NULL RPC call and returns a pointer to the resulting rpc_task. The call may be either synchronous or asynchronous.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-053-rename_rpc_destroy_auth.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sat, 23 Jun 2007 10:46:47 -0400

SUNRPC: Rename rpcauth_destroy() to rpcauth_release()

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-054-make_auth_and_cred_operations_const.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sat, 23 Jun 2007 20:17:58 -0400

SUNRPC: Mark auth and cred operation tables as constant.

Also do the same for gss_api operation tables.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-055-cleanup_cred_initialisation.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sat, 23 Jun 2007 19:55:31 -0400

SUNRPC: Clean up rpc credential initialisation

Add a helper rpc_cred_init()

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-056-cleanup_remove_auth_unix_casts.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Mon, 25 Jun 2007 09:48:25 -0400

SUNRPC: replace casts in auth_unix.c with container_of()

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-057-make_cr_flags_updates_atomic.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Mon, 25 Jun 2007 10:15:15 -0400

SUNRPC: Enforce atomic updates of rpc_cred->cr_flags

Convert to the use of atomic bitops...

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-058-cleanup_auth_garbage_collection.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sat, 23 Jun 2007 19:45:36 -0400

SUNRPC: cleanup rpc credential cache garbage collection

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-059-make_auth_lookup_use_rcu.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sun, 24 Jun 2007 15:55:26 -0400

SUNRPC: Convert the credcache lookup code to use RCU

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-060-make_credcache_lock_local.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sun, 24 Jun 2007 15:57:57 -0400

SUNRPC: Give credential cache a local spinlock

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-061-convert_garbage_collector_to_shrinker.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Mon, 25 Jun 2007 17:11:20 -0400

SUNRPC: Convert the credential garbage collector into a shrinker callback

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-062-convert_gss_ctx_lock_to_rcu.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Tue, 26 Jun 2007 19:18:38 -0400

SUNRPC: Convert gss_ctx_lock to an RCU lock

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-063-allow_auth_cleanup.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Tue, 26 Jun 2007 16:57:41 -0400

SUNRPC: Allow rpc_auth to run clean up before the rpc_client is destroyed

RPCSEC_GSS needs to be able to send NULL RPC calls to the server in order to free up any remaining GSS contexts.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-064-remove_task_tk_auth.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Wed, 27 Jun 2007 14:29:04 -0400

SUNRPC: Remove the tk_auth macro...

We should almost always be deferencing the rpc_auth struct by means of the credential's cr_auth field instead of the rpc_clnt->cl_auth anyway. Fix up that historical mistake, and remove the macro that propagated it.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-065-dont_destroy_rpc_auth_before_creds.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Wed, 27 Jun 2007 14:29:12 -0400

SUNRPC: Ensure that the struct gss_auth lifetime exceeds the credential's

Add a refcount in order to ensure that the gss_auth doesn't disappear from underneath us while we're freeing up GSS contexts.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-066-ensure_rpcsecgss_destroys_context.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Tue, 26 Jun 2007 17:04:57 -0400

SUNRPC: Ensure RPCSEC_GSS destroys the security context when freeing a cred

Do so by set the gc_proc field to RPC_GSS_PROC_DESTROY, and then sending a NULL RPC call.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-067-suppress_call_verify_printks.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Wed, 27 Jun 2007 18:30:26 -0400

SUNRPC: Suppress some noisy and unnecessary printk() calls in call_verify()

Convert them into dprintk() calls.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-068-clean_up_lookup.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sun, 1 Jul 2007 18:13:52 -0400

NFSv4: Clean up _nfs4_proc_lookup() vs _nfs4_proc_lookupfh()

They differ only slightly in the arguments they take. Why have they not been merged?

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-069-cleanup_remove_nfsi_req_lock.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Mon, 2 Jul 2007 09:57:54 -0400

NFS: Replace NFS_I(inode)->req_lock with inode->i_lock

There is no justification for keeping a special spinlock for the exclusive use of the NFS writeback code.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-070-nfs4_get_state_owner_fix_cred_reference_leak.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Mon, 2 Jul 2007 10:24:56 -0400

NFSv4: Fix a credential reference leak in nfs4_get_state_owner()

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-071-nfs4_kill_nfs4_client_grab_unused.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Mon, 2 Jul 2007 12:49:23 -0400

NFSv4: Don't reuse expired nfs4_state_owner structs

That just confuses certain NFSv4 servers.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-072-fix_owner_size_estimate.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sun, 8 Jul 2007 18:38:23 -0400

NFSv4: Fix the NFSv4 owner and owner_group size estimates

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-073-fix_underestimate_of_nfs_enc_open_sz.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Mon, 2 Jul 2007 13:57:28 -0400

NFSv4: Fix the underestimate of NFSv4 open request size

The maximum size depends on the filename size and a number of other elements which are currently not being counted.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-074-fix_underestimate_of_nfs_enc_lookup_sz.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Mon, 2 Jul 2007 13:58:30 -0400

NFSv4: Fix underestimate of NFSv4 lookup request size

Also fix up the underestimate of fs_locations

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-075-void_returns_value.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Mon, 2 Jul 2007 14:03:03 -0400

NFSv4: nfs_increment_open_seqid should not return a value

It is a void function...

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-076-avoid_open_owner_collisions.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Mon, 2 Jul 2007 13:58:33 -0400

NFSv4: Reduce the chances of an open_owner identifier collision

Currently we just use a 32-bit counter.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-077-fix_atomic_open_for_exec.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Tue, 3 Jul 2007 13:04:56 -0400

NFSv4: Fix atomic open for execute...

Currently we do not check for the FMODE_EXEC flag as we should. For that particular case, we need to perform an ACCESS call to the server in order to check that the file is executable.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-078-fix_find_state_byowner.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Tue, 3 Jul 2007 14:41:19 -0400

NFSv4: Fix a bug in __nfs4_find_state_byowner

The test for state->state == 0 does not tell you that the stateid is in the process of being freed. It really tells you that the stateid is not yet initialised...

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-079-delegation_cleanup.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Tue, 3 Jul 2007 16:42:45 -0400

NFSv4: set the delegation in nfs4_opendata_to_nfs4_state

This ensures that nfs4_open_release() and nfs4_open_confirm_release() can now handle an eventual delegation that was returned with out open. As such, it fixes a delegation "leak" when the user breaks out of an open call.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-080-fixup_nfs4_open_recover.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Tue, 3 Jul 2007 23:48:13 -0400

NFSv4: Fix up a bug in nfs4_open_recover()

Don't clobber the delegation info...

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-081-recall_delegations_by_stateid.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Thu, 5 Jul 2007 14:55:18 -0400

NFSv4: Support recalling delegations by stateid

There appear to be some rogue servers out there that issue multiple delegations with different stateids for the same file. Ensure that when we return delegations, we do so on a per-stateid basis rather than a per-file basis.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-082-recall_delegations_by_stateid2.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Fri, 6 Jul 2007 15:10:43 -0400

NFSv4: Support recalling delegations by stateid part 2

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-083-rcu_protect_delegations.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Fri, 6 Jul 2007 15:12:04 -0400

NFSv4: Use RCU to protect delegations

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-084-delegation_defer_reval.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Tue, 3 Jul 2007 16:10:55 -0400

NFSv4: Defer inode revalidation when setting up a delegation

Currently we force a synchronous call to __nfs_revalidate_inode() in nfs_inode_set_delegation(). This not only ensures that we cannot call nfs_inode_set_delegation from an asynchronous context, but it also slows down any call to open().

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-085-fixup_open_confirm.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sun, 8 Jul 2007 16:19:56 -0400

NFSv4: Clean up confirmation of sequence ids...

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-086-delegation_cache_fixup.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Thu, 5 Jul 2007 18:07:55 -0400

NFSv4: Always use the delegation if we have one

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-087-improve_debugging_of_bad_seqid.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sun, 8 Jul 2007 16:49:11 -0400

NFSv4: Improve the debugging of bad sequence id errors...

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-088-return_errors_from_nfs4_opendata_to_nfs4_state.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sat, 7 Jul 2007 08:04:47 -0400

NFSv4: Allow nfs4_opendata_to_nfs4_state to return errors.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-089-cleanup_open.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sat, 7 Jul 2007 13:19:59 -0400

NFSv4: Clean up _nfs4_proc_open()

Use a flag instead of the 'data->rpc_status = -ENOMEM hack.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-090-check_for_delegation_in_nfs4_open_prepare.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Thu, 5 Jul 2007 19:02:21 -0400

NFSv4: Check for the existence of a delegation in nfs4_open_prepare()

We should not be calling open() on an inode that has a delegation unless we're doing a reclaim.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-091-do_cache_opens.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sun, 8 Jul 2007 14:11:36 -0400

NFSv4: Don't call OPEN if we already have an open stateid for a file

If we already have a stateid with the correct open mode for a given file, then we can reuse that stateid instead of re-issuing an OPEN call without violating the close-to-open caching semantics.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-092-cleanup_open_recover.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Sun, 8 Jul 2007 21:04:15 -0400

NFSv4: Clean up the callers of nfs4_open_recover_helper()

Rely on nfs4_try_open_cached() when appropriate.

Also fix an RCU violation in _nfs4_do_open_reclaim()

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-093-fixup_locking.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Mon, 9 Jul 2007 10:45:42 -0400

NFSv4: Fix up stateid locking...

We really don't need to grab both the state->so_owner and the inode->i_lock.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-094-clean_up_nfs_size_to_loff_t.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sun, 01 Jul 2007 12:12:14 -0400

NFS: Clean up nfs_size_to_loff_t()

Use the same file size limit that lockd uses.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-095-clean_up_use_correct_type_when_converting_nfs_blocks_to_local_blocks.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sun, 01 Jul 2007 12:12:19 -0400

NFS: Clean-up: use correct type when converting NFS blocks to local blocks

inode->i_blocks is a blkcnt_t these days, which can be a u64 or unsigned long, depending on the setting of CONFIG_LSF.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-096-clean_up_define_macros_for_maximum_host_and_export_path_name_lengths.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sun, 01 Jul 2007 12:12:24 -0400

NFS: Clean-up: Define macros for maximum host and export path name lengths

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-097-clean_up_replace_nfs_copy_user_string_with_strndup_user.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sun, 01 Jul 2007 12:12:30 -0400

NFS: Clean-up: Replace nfs_copy_user_string with strndup_user

The new string utility function strndup_user can be used instead of nfs_copy_user_string, eliminating an unnecessary duplication of function.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-098-clean_up_error_handling_in_nfs_get_sb.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sun, 01 Jul 2007 12:12:35 -0400

NFS: Clean up error handling in nfs_get_sb

The error return logic in nfs_get_sb now matches nfs4_get_sb, and is more maintainable. A subsequent patch will take advantage of this simplification.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-099-clean_up_fix_a_compiler_warning_in_fs_nfs_super_c.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sun, 01 Jul 2007 12:12:40 -0400

NFS: Clean-up: fix a compiler warning in fs/nfs/super.c

/home/cel/linux/fs/nfs/super.c: In function 'nfs_pseudoflavour_to_name': /home/cel/linux/fs/nfs/super.c:270: warning: comparison between signed and unsigned

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-100-clean_up_refactor_ip_address_sanity_checks_in_nfs_client.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sun, 01 Jul 2007 12:12:46 -0400

NFS: Clean-up: Refactor IP address sanity checks in NFS client

NFS and NFSv4 mounts can now share server address sanity checking. And, it provides an easy mechanism for adding IPv6 address checking at some later point.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Cc: Aurelien Charbon <aurelien.charbon@ext.bull.net>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-101-add_a_new_nfs_debugging_flag_just_for_mount_processing.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sun, 01 Jul 2007 12:12:51 -0400

NFS: Add a new NFS debugging flag just for mount processing

Note to self: fix up /usr/sbin/rpcdebug too

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-102-clean_up_nfs_validate_mount_data.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sun, 01 Jul 2007 12:12:56 -0400

NFS: Clean up nfs_validate_mount_data

Move error handling code out of the main code path. The switch statement was also improperly indented, according to Documentation/CodingStyle. This prepares nfs_validate_mount_data for the addition of option string parsing.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-103-introduce_nfs4_validate_mount_options.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sun, 01 Jul 2007 12:13:01 -0400

NFS: Introduce nfs4_validate_mount_options

Refactor NFSv4 mount processing to break out mount data validation in the same way it's broken out in the NFSv2/v3 mount path.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-104-allow_rpcbind_requests_to_be_interrupted_by_a_signal.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sun, 01 Jul 2007 12:13:07 -0400

SUNRPC: Allow rpcbind requests to be interrupted by a signal.

This allows NFS mount requests and RPC re-binding to be interruptible if the server isn't responding.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-105-rename_rpcb_getport_external_routine.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sun, 01 Jul 2007 12:13:12 -0400

SUNRPC: Rename rpcb_getport_external routine

In preparation for handling NFS mount option parsing in the kernel, rename rpcb_getport_external as rpcb_get_port_sync, and make it available always (instead of only when CONFIG_ROOT_NFS is enabled).

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-106-rename_rpcb_getport_to_be_consistent_with_new_rpcb_getport_sync_name.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sun, 01 Jul 2007 12:13:17 -0400

SUNRPC: Rename rpcb_getport to be consistent with new rpcb_getport_sync name

Clean up, for consistency. Rename rpcb_getport as rpcb_getport_async, to match the naming scheme of rpcb_getport_sync.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-107-add_a_convenient_default_for_the_hostname_when_calling_rpc_create.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sun, 01 Jul 2007 12:13:22 -0400

SUNRPC: Add a convenient default for the hostname when calling rpc_create()

A couple of callers just use a stringified IP address for the rpc client's hostname. Move the logic for constructing this into rpc_create(), so it can be shared.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-108-remake_nfsroot_mount_as_a_permanent_part_of_nfs_client.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sun, 01 Jul 2007 12:13:27 -0400

NFS: Remake nfsroot_mount as a permanent part of NFS client

In preparation for supporting NFSv2 and NFSv3 mount option handling in the kernel NFS client, convert mount_clnt.c to be a permanent part of the NFS client, instead of built only when CONFIG_ROOT_NFS is enabled.

In addition, we also replace the "struct sockaddr_in *" argument with something more generic, to help support IPv6 at some later point.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-109-clean_up_in_kernel_nfs_mount.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sun, 01 Jul 2007 12:13:33 -0400

NFS: Clean up in-kernel NFS mount

Clean up white space and coding conventions.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-110-improve_debugging_output_in_nfs_in_kernel_mount_client.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sun, 01 Jul 2007 12:13:38 -0400

NFS: Improve debugging output in NFS in-kernel mount client

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-111-add_enums_and_match_tables_for_mount_option_parsing.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sun, 01 Jul 2007 12:13:44 -0400

NFS: Add enums and match tables for mount option parsing

This generic infrastructure works for both NFS and NFSv4 mounts.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-112-introduce_generic_mount_client_api.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sun, 01 Jul 2007 12:13:49 -0400

NFS: Introduce generic mount client API

For NFSv2 and v3 mounts, the first step is to contact the server's MOUNTD and request the file handle for the root of the mounted share. Add a function to the NFS client that handles this operation.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-113-add_final_pieces_to_support_in_kernel_mount_option_parsing.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sun, 01 Jul 2007 12:13:54 -0400

NFS: Add final pieces to support in-kernel mount option parsing

Hook in final components required for supporting in-kernel mount option parsing for NFSv2 and NFSv3 mounts.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-114-add_support_for_mounting_nfsv4_file_systems_with_string_options.dif:

From: Chuck Lever <chuck.lever@oracle.com>

Date: Sun, 01 Jul 2007 12:13:59 -0400

NFS: Add support for mounting NFSv4 file systems with string options

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-115-mount_noshared.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Wed, 16 May 2007 16:53:28 -0400

NFS: Add the mount option "nosharecache"

Prior to David Howell's mount changes in 2.6.18, users who mounted different directories which happened to be from the same filesystem on the server would get different super blocks, and hence could choose different mount options. As long as there were no hard linked files that crossed from one subtree to another, this was quite safe. Post the changes, if the two directories are on the same filesystem (have the same 'fsid'), they will share the same super block, and hence the same mount options.

Add a flag to allow users to elect not to share the NFS super block with another mount point, even if the fsids are the same. This will allow users to set different mount options for the two different super blocks, as was previously possible. It is still up to the user to ensure that there are no cache coherency issues when doing this, however the default behaviour will be to share super blocks whenever two paths result in the same fsid.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-116-mount_shared_return_error.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Wed, 16 May 2007 16:53:28 -0400

NFS: Error when mounting the same filesystem with different options

Unless the user sets the NFS_MOUNT_NOSHAREDCACHE mount flag, we should return EBUSY if the filesystem is already mounted on a superblock that has set conflicting mount options.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-117-fix_nfs4_state_and_mount_shared.dif:

From: Trond Myklebust <Trond.Myklebust@netapp.com>

Date: Fri, 6 Jul 2007 10:53:21 -0400

NFSv4: Make the NFS state model work with the nosharedcache mount option

Consider the case where the user has mounted the remote filesystem server:/foo on the two local directories /bar and /baz using the nosharedcache mount option. The files /bar/file and /baz/file are represented by different inodes in the local namespace, but refer to the same file /foo/file on the server. Consider the case where a process opens both /bar/file and /baz/file, then closes /bar/file: because the nfs4_state is not shared between /bar/file and /baz/file, the kernel will see that the nfs4_state for /bar/file is no longer referenced, so it will send off a CLOSE rpc call. Unless the open_owners differ, then that CLOSE call will invalidate the open state on /baz/file too.

Conclusion: we cannot share open state owners between two different non-shared mount instances of the same filesystem.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-118-clean_up_transport_creation.dif:

From: Frank van Maarseveen <frankvm@frankvm.com>

Date: Sun, 8 Jul 2007 13:08:54 +0200

SUNRPC: cleanup transport creation argument passing

Cleanup argument passing to functions for creating an RPC transport.

Signed-off-by: Frank van Maarseveen <frankvm@frankvm.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-119-sunrpc_save_request_destination_address.dif:

From: Frank van Maarseveen <frankvm@frankvm.com>

Date: Mon, 9 Jul 2007 22:21:39 +0200

SUNRPC server: record the destination address of a request

Save the destination address of an incoming request over TCP like is done already for UDP. It is necessary later for callbacks by the server.

Signed-off-by: Frank van Maarseveen <frankvm@frankvm.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-120-sunrpc_bind_to_a_local_address.dif:

From: Frank van Maarseveen <frankvm@frankvm.com>

Date: Mon, 9 Jul 2007 22:23:35 +0200

SUNRPC client: add interface for binding to a local address

In addition to binding to a local privileged port the NFS client should allow binding to a specific local address. This is used by the server for callbacks. The patch adds the necessary interface.

Signed-off-by: Frank van Maarseveen <frankvm@frankvm.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-121-fix_granted_callback_source_address.dif:

From: Frank van Maarseveen <frankvm@frankvm.com>

Date: Mon, 9 Jul 2007 22:25:29 +0200

NLM: fix source address of callback to client

Use the destination address of the original NLM request as the source address in callbacks to the client.

Signed-off-by: Frank van Maarseveen <frankvm@frankvm.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-122-ensure_we_unlock_when_cancelling_a_lock.dif:

From: Frank Filz <ffilzlnx@us.ibm.com>

Date: Mon, 09 Jul 2007 15:32:29 -0700

NFSv4: Make sure unlock is really an unlock when cancelling a lock

I ran into a curious issue when a lock is being canceled. The cancellation results in a lock request to the vfs layer instead of an unlock request. This is particularly insidious when the process that owns the lock is exiting. In that case, sometimes the erroneous lock is applied AFTER the process has entered zombie state, preventing the lock from ever being released. Eventually other processes block on the lock causing a slow degredation of the system. In the 2.6.16 kernel this was investigated on, the problem is compounded by the fact that the cl_sem is held while blocking on the vfs lock, which results in most processes accessing the nfs file system in question hanging.

In more detail, here is how the situation occurs:

first _nfs4_do_setlk():

static int _nfs4_do_setlk(struct nfs4_state *state, int cmd, struct file_lock *fl, int reclaim) ... ret = nfs4_wait_for_completion_rpc_task(task); if (ret == 0) { ... } else data->cancelled = 1;

then nfs4_lock_release():

static void nfs4_lock_release(void *calldata) ... if (data->cancelled != 0) { struct rpc_task *task; task = nfs4_do_unlck(&data->fl, data->ctx, data->lsp, data->arg.lock_seqid);

The problem is the same file_lock that was passed in to _nfs4_do_setlk() gets passed to nfs4_do_unlck() from nfs4_lock_release(). So the type is still F_RDLCK or FWRLCK, not F_UNLCK. At some point, when cancelling the lock, the type needs to be changed to F_UNLCK. It seemed easiest to do that in nfs4_do_unlck(), but it could be done in nfs4_lock_release(). The concern I had with doing it there was if something still needed the original file_lock, though it turns out the original file_lock still needs to be modified by nfs4_do_unlck() because nfs4_do_unlck() uses the original file_lock to pass to the vfs layer, and a copy of the original file_lock for the RPC request.

It seems like the simplest solution is to force all situations where nfs4_do_unlck() is being used to result in an unlock, so with that in mind, I made the following change:

Signed-off-by: Frank Filz <ffilzlnx@us.ibm.com>

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

linux-2.6.22-NFS_ALL.dif:

All of the above

[ICO]NameLast modifiedSizeDescription

[PARENTDIR]Parent Directory   -  
[TXT]linux-2.6.22-001-odi..>2007-05-30 20:19 1.3K 
[TXT]linux-2.6.22-002-odi..>2007-05-30 20:19 1.5K 
[TXT]linux-2.6.22-003-fix..>2007-05-24 15:19 2.1K 
[TXT]linux-2.6.22-004-rea..>2007-05-24 15:19 2.2K 
[TXT]linux-2.6.22-005-cle..>2007-07-09 22:36 9.7K 
[TXT]linux-2.6.22-006-cle..>2007-06-06 00:44 7.0K 
[TXT]linux-2.6.22-007-ens..>2007-06-06 00:44 7.8K 
[TXT]linux-2.6.22-008-fix..>2007-06-28 03:10 9.1K 
[TXT]linux-2.6.22-009-cle..>2007-06-28 03:10 2.9K 
[TXT]linux-2.6.22-010-fix..>2007-06-06 00:44 2.0K 
[TXT]linux-2.6.22-011-use..>2007-06-28 03:10 799  
[TXT]linux-2.6.22-012-ree..>2007-06-28 03:10 950  
[TXT]linux-2.6.22-013-fix..>2007-07-09 22:36 4.4K 
[TXT]linux-2.6.22-014-fix..>2007-06-06 00:44 1.0K 
[TXT]linux-2.6.22-015-fix..>2007-06-28 03:10 1.0K 
[TXT]linux-2.6.22-016-con..>2007-07-09 22:36 3.8K 
[TXT]linux-2.6.22-017-ren..>2007-07-09 22:36 5.2K 
[TXT]linux-2.6.22-018-imp..>2007-07-09 22:36 4.2K 
[TXT]linux-2.6.22-019-rem..>2007-06-28 03:10 3.2K 
[TXT]linux-2.6.22-020-nfs..>2007-07-09 22:36 1.1K 
[TXT]linux-2.6.22-021-res..>2007-07-09 22:36 621  
[TXT]linux-2.6.22-022-con..>2007-06-28 03:10 2.9K 
[TXT]linux-2.6.22-023-con..>2007-06-28 03:10 5.0K 
[TXT]linux-2.6.22-024-mak..>2007-06-28 03:10 8.7K 
[TXT]linux-2.6.22-025-add..>2007-06-28 03:10 5.0K 
[TXT]linux-2.6.22-026-cle..>2007-06-28 03:10 1.4K 
[TXT]linux-2.6.22-027-con..>2007-06-28 03:10 6.0K 
[TXT]linux-2.6.22-028-kil..>2007-06-28 03:10 3.0K 
[TXT]linux-2.6.22-029-kil..>2007-06-28 03:10 6.9K 
[TXT]linux-2.6.22-030-rpc..>2007-06-28 03:10 1.0K 
[TXT]linux-2.6.22-031-rpc..>2007-06-28 03:10 4.1K 
[TXT]linux-2.6.22-032-rpc..>2007-06-28 03:10 1.5K 
[TXT]linux-2.6.22-033-opt..>2007-06-28 03:10 2.6K 
[TXT]linux-2.6.22-034-cre..>2007-06-28 03:10 3.4K 
[TXT]linux-2.6.22-035-rem..>2007-06-28 03:10 4.4K 
[TXT]linux-2.6.22-036-cle..>2007-06-28 03:10 5.4K 
[TXT]linux-2.6.22-037-sim..>2007-06-28 03:10 4.8K 
[TXT]linux-2.6.22-038-fix..>2007-06-16 18:28 3.6K 
[TXT]linux-2.6.22-039-cre..>2007-06-16 18:28 2.9K 
[TXT]linux-2.6.22-040-rem..>2007-06-16 18:28 6.4K 
[TXT]linux-2.6.22-041-aut..>2007-06-16 18:28 3.8K 
[TXT]linux-2.6.22-042-rpc..>2007-06-16 18:28 4.9K 
[TXT]linux-2.6.22-043-fix..>2007-06-16 18:28 2.0K 
[TXT]linux-2.6.22-044-rpc..>2007-06-28 03:10 4.2K 
[TXT]linux-2.6.22-045-tra..>2007-06-28 03:10 2.0K 
[TXT]linux-2.6.22-046-con..>2007-06-28 03:10 2.1K 
[TXT]linux-2.6.22-047-fix..>2007-06-16 18:28 3.9K 
[TXT]linux-2.6.22-048-fix..>2007-06-28 03:10 902  
[TXT]linux-2.6.22-049-fix..>2007-06-16 18:28 1.3K 
[TXT]linux-2.6.22-050-fix..>2007-06-16 18:28 2.4K 
[TXT]linux-2.6.22-051-mak..>2007-06-28 03:10 1.6K 
[TXT]linux-2.6.22-052-add..>2007-06-28 03:10 1.6K 
[TXT]linux-2.6.22-053-ren..>2007-06-28 03:10 2.0K 
[TXT]linux-2.6.22-054-mak..>2007-06-28 03:10 7.3K 
[TXT]linux-2.6.22-055-cle..>2007-06-28 03:10 4.9K 
[TXT]linux-2.6.22-056-cle..>2007-06-28 03:10 1.5K 
[TXT]linux-2.6.22-057-mak..>2007-06-28 03:10 8.7K 
[TXT]linux-2.6.22-058-cle..>2007-07-09 22:36 7.3K 
[TXT]linux-2.6.22-059-mak..>2007-07-09 22:36 7.6K 
[TXT]linux-2.6.22-060-mak..>2007-07-09 22:36 6.0K 
[TXT]linux-2.6.22-061-con..>2007-07-09 22:36 8.0K 
[TXT]linux-2.6.22-062-con..>2007-06-28 03:10 5.4K 
[TXT]linux-2.6.22-063-all..>2007-06-28 03:10 1.7K 
[TXT]linux-2.6.22-064-rem..>2007-07-09 22:36 10K 
[TXT]linux-2.6.22-065-don..>2007-06-28 03:10 2.8K 
[TXT]linux-2.6.22-066-ens..>2007-07-09 22:36 3.9K 
[TXT]linux-2.6.22-067-sup..>2007-06-28 03:10 2.9K 
[TXT]linux-2.6.22-068-cle..>2007-07-09 22:36 2.4K 
[TXT]linux-2.6.22-069-cle..>2007-07-09 22:36 12K 
[TXT]linux-2.6.22-070-nfs..>2007-07-09 22:36 1.6K 
[TXT]linux-2.6.22-071-nfs..>2007-07-09 22:36 3.4K 
[TXT]linux-2.6.22-072-fix..>2007-07-09 22:36 1.2K 
[TXT]linux-2.6.22-073-fix..>2007-07-09 22:36 5.2K 
[TXT]linux-2.6.22-074-fix..>2007-07-09 22:36 2.3K 
[TXT]linux-2.6.22-075-voi..>2007-07-09 22:36 1.3K 
[TXT]linux-2.6.22-076-avo..>2007-07-09 22:36 17K 
[TXT]linux-2.6.22-077-fix..>2007-07-09 22:36 1.7K 
[TXT]linux-2.6.22-078-fix..>2007-07-09 22:36 1.0K 
[TXT]linux-2.6.22-079-del..>2007-07-09 22:36 2.6K 
[TXT]linux-2.6.22-080-fix..>2007-07-09 22:36 4.6K 
[TXT]linux-2.6.22-081-rec..>2007-07-09 22:36 6.1K 
[TXT]linux-2.6.22-082-rec..>2007-07-09 22:36 3.0K 
[TXT]linux-2.6.22-083-rcu..>2007-07-09 22:36 9.3K 
[TXT]linux-2.6.22-084-del..>2007-07-09 22:36 2.7K 
[TXT]linux-2.6.22-085-fix..>2007-07-09 22:36 1.5K 
[TXT]linux-2.6.22-086-del..>2007-07-09 22:36 10K 
[TXT]linux-2.6.22-087-imp..>2007-07-09 22:36 1.6K 
[TXT]linux-2.6.22-088-ret..>2007-07-09 22:36 3.0K 
[TXT]linux-2.6.22-089-cle..>2007-07-09 22:36 3.1K 
[TXT]linux-2.6.22-090-che..>2007-07-09 22:36 9.8K 
[TXT]linux-2.6.22-091-do_..>2007-07-09 22:36 4.3K 
[TXT]linux-2.6.22-092-cle..>2007-07-09 22:36 3.5K 
[TXT]linux-2.6.22-093-fix..>2007-07-09 22:36 5.6K 
[TXT]linux-2.6.22-094-cle..>2007-07-09 22:36 966  
[TXT]linux-2.6.22-095-cle..>2007-07-09 22:36 1.0K 
[TXT]linux-2.6.22-096-cle..>2007-07-09 22:36 1.4K 
[TXT]linux-2.6.22-097-cle..>2007-07-09 22:36 3.4K 
[TXT]linux-2.6.22-098-cle..>2007-07-09 22:36 1.4K 
[TXT]linux-2.6.22-099-cle..>2007-07-09 22:36 1.0K 
[TXT]linux-2.6.22-100-cle..>2007-07-09 22:36 2.1K 
[TXT]linux-2.6.22-101-add..>2007-07-09 22:36 764  
[TXT]linux-2.6.22-102-cle..>2007-07-09 22:36 4.6K 
[TXT]linux-2.6.22-103-int..>2007-07-09 22:36 4.9K 
[TXT]linux-2.6.22-104-all..>2007-07-09 22:36 962  
[TXT]linux-2.6.22-105-ren..>2007-07-09 22:36 4.3K 
[TXT]linux-2.6.22-106-ren..>2007-07-09 22:36 5.4K 
[TXT]linux-2.6.22-107-add..>2007-07-09 22:36 3.9K 
[TXT]linux-2.6.22-108-rem..>2007-07-09 22:36 5.2K 
[TXT]linux-2.6.22-109-cle..>2007-07-09 22:36 4.3K 
[TXT]linux-2.6.22-110-imp..>2007-07-09 22:36 1.5K 
[TXT]linux-2.6.22-111-add..>2007-07-09 22:36 13K 
[TXT]linux-2.6.22-112-int..>2007-07-09 22:36 2.2K 
[TXT]linux-2.6.22-113-add..>2007-07-09 22:36 4.4K 
[TXT]linux-2.6.22-114-add..>2007-07-09 22:36 3.4K 
[TXT]linux-2.6.22-115-mou..>2007-07-09 22:36 7.5K 
[TXT]linux-2.6.22-116-mou..>2007-07-09 22:36 2.7K 
[TXT]linux-2.6.22-117-fix..>2007-07-09 22:36 3.5K 
[TXT]linux-2.6.22-118-cle..>2007-07-09 22:36 7.4K 
[TXT]linux-2.6.22-119-sun..>2007-07-09 22:36 2.5K 
[TXT]linux-2.6.22-120-sun..>2007-07-09 22:36 4.3K 
[TXT]linux-2.6.22-121-fix..>2007-07-09 22:36 3.9K 
[TXT]linux-2.6.22-122-ens..>2007-07-09 22:36 2.9K 
[TXT]linux-2.6.22-NFS_ALL..>2007-07-09 22:36 293K 
[   ]series 2007-07-09 22:36 6.2K 

Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.4.16 mod_perl/2.0.11 Perl/v5.16.3 Server at linux-nfs.org Port 80