24 Dec, 2008
16 commits
-
Signed-off-by: Trond Myklebust
-
Let the actual delegreturn stuff be run in the state manager thread rather
than allocating a separate kthread.Signed-off-by: Trond Myklebust
-
We really shouldn't be resetting the sequence ids when doing state
expiration recovery, since we don't know if the server still remembers our
previous state owners. There are servers out there that do attempt to
preserve client state even if the lease has expired. Such a server would
only release that state if a conflicting OPEN request occurs.Signed-off-by: Trond Myklebust
-
Fix up a potential race...
Signed-off-by: Trond Myklebust
-
It is really a more general purpose state management thread at this point.
Signed-off-by: Trond Myklebust
-
Add a delegation cleanup phase to the state management loop, and do the
NFS4ERR_CB_PATH_DOWN recovery there.Signed-off-by: Trond Myklebust
-
NFSv4 defines a number of state errors which the client does not currently
handle. Among those we should worry about are:
NFS4ERR_ADMIN_REVOKED - the server's administrator revoked our locks
and/or delegations.
NFS4ERR_BAD_STATEID - the client and server are out of sync, possibly
due to a delegation return racing with an OPEN
request.
NFS4ERR_OPENMODE - the client attempted to do something not sanctioned
by the open mode of the stateid. Should normally just
occur as a result of a delegation return race.Signed-off-by: Trond Myklebust
-
Now that we're using the flags to indicate state that needs to be
recovered, as well as having implemented proper refcounting and spinlocking
on the state and open_owners, we can get rid of nfs_client->cl_sem. The
only remaining case that was dubious was the file locking, and that case is
now covered by the nfsi->rwsem.Signed-off-by: Trond Myklebust
-
The unlock path is currently failing to take the nfs_client->cl_sem read
lock, and hence the recovery path may see locks disappear from underneath
it.
Also ensure that it takes the nfs_inode->rwsem read lock so that it there
is no conflict with delegation recalls.Signed-off-by: Trond Myklebust
-
Signed-off-by: Trond Myklebust
-
Signed-off-by: Trond Myklebust
-
Instead of doing a full setclientid, try doing a RENEW call first.
Signed-off-by: Trond Myklebust
-
Signed-off-by: Trond Myklebust
-
If the client for some reason is not able to recover all its state within
the time allotted for the grace period, and the server reboots again, the
client is not allowed to recover the state that was 'lost' using reboot
recovery.Signed-off-by: Trond Myklebust
-
Ditto for nfs4_get_setclientid_cred().
Signed-off-by: Trond Myklebust
-
Signed-off-by: Trond Myklebust
16 Jul, 2008
1 commit
-
Signed-off-by: Trond Myklebust
17 May, 2008
2 commits
-
nfs4_drop_state_owner() can now become static.
Signed-off-by: Adrian Bunk
Signed-off-by: Andrew Morton
Signed-off-by: Trond Myklebust -
__FUNCTION__ is gcc-specific, use __func__
Signed-off-by: Harvey Harrison
Cc: Trond Myklebust
Cc: "J. Bruce Fields"
Signed-off-by: Andrew Morton
Signed-off-by: Trond Myklebust
20 Apr, 2008
1 commit
-
Signed-off-by: Trond Myklebust
29 Feb, 2008
1 commit
-
Signed-off-by: Trond Myklebust
26 Feb, 2008
1 commit
-
An audit of the current RPC timeout functions shows that they don't really
ever need to run in the softirq context. As long as the softirq is
able to signal that the wakeup is due to a timeout (which it can do by
setting task->tk_status to -ETIMEDOUT) then the callback functions can just
run as standard task->tk_callback functions (in the rpciod/process
context).The only possible border-line case would be xprt_timer() for the case of
UDP, when the callback is used to reduce the size of the transport
congestion window. In testing, however, the effect of moving that update
to a callback would appear to be minor.Signed-off-by: Trond Myklebust
21 Feb, 2008
1 commit
-
fs/nfs/nfs4state.c:788:34: warning: Using plain integer as NULL pointer
fs/nfs/delegation.c:52:34: warning: Using plain integer as NULL pointer
fs/nfs/idmap.c:312:12: warning: Using plain integer as NULL pointer
fs/nfs/callback_xdr.c:257:6: warning: Using plain integer as NULL pointer
fs/nfs/callback_xdr.c:270:6: warning: Using plain integer as NULL pointer
fs/nfs/callback_xdr.c:281:6: warning: Using plain integer as NULL pointerSigned-off-by: Harvey Harrison
Signed-off-by: Trond Myklebust
14 Feb, 2008
1 commit
-
The warning message for a v4 server returning various bad sequence-ids is
missing spaces.Signed-off-by: Dan Muntz
Signed-off-by: Trond Myklebust
30 Jan, 2008
2 commits
-
To ensure the NFS client displays IPv6 addresses properly, replace
address family-specific NIPQUAD() invocations with a call to the RPC
client to get a formatted string representing the remote peer's
address.Signed-off-by: Chuck Lever
Cc: Aurelien Charbon
Signed-off-by: Trond Myklebust -
Reduce the time spent locking the rpc_sequence structure by queuing the
nfs_seqid only when we are ready to take the lock (when calling
nfs_wait_on_sequence).Signed-off-by: Trond Myklebust
11 Jan, 2008
1 commit
-
Sharing the open sequence queue causes a deadlock when we try to take
both a lock sequence id and and open sequence id.This fixes the regression reported by Dimitri Puzin and Jeff Garzik: See
http://bugzilla.kernel.org/show_bug.cgi?id=9712
for details.
Reported-and-tested-by: Dimitri Puzin
Signed-off-by: Trond Myklebust
Tested-by: Jeff Garzik
Signed-off-by: Linus Torvalds
20 Oct, 2007
1 commit
-
Otherwise, we do end up breaking close-to-open semantics. We also end up
breaking some of the silly-rename tests in Connectathon on some setups.Please refer to the bug-report at
http://bugzilla.linux-nfs.org/show_bug.cgi?id=150Signed-off-by: Trond Myklebust
10 Oct, 2007
1 commit
-
Signed-off-by: Trond Myklebust
08 Aug, 2007
1 commit
-
We don't really need to clear &state->inode_states inside
nfs4_set_mode_locked, and doing so without holding the inode->i_lock would
in any case be a bug...Signed-off-by: Trond Myklebust
11 Jul, 2007
10 commits
-
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
-
We really don't need to grab both the state->so_owner and the
inode->i_lock.Signed-off-by: Trond Myklebust
-
Signed-off-by: Trond Myklebust
-
Signed-off-by: Trond Myklebust
-
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
-
Currently we just use a 32-bit counter.
Signed-off-by: Trond Myklebust
-
It is a void function...
Signed-off-by: Trond Myklebust
-
That just confuses certain NFSv4 servers.
Signed-off-by: Trond Myklebust
-
Signed-off-by: Trond Myklebust
-
Use rpc_run_task() instead of doing it ourselves.
Signed-off-by: Trond Myklebust