History log of /fs/nfs/nfs4session.c
Revision Date Author Comments
20b9a9024540a775395d5d1f41eec0ec6ec41f9b 01-Feb-2014 Trond Myklebust <trond.myklebust@primarydata.com> NFSv4.1: nfs4_destroy_session must call rpc_destroy_waitqueue

There may still be timers active on the session waitqueues. Make sure
that we kill them before freeing the memory.

Cc: stable@vger.kernel.org # 3.12+
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
1cec16abf23d644b0e261956cb2b37a668354f5a 04-Sep-2013 Chuck Lever <chuck.lever@oracle.com> When CONFIG_NFS_V4_1 is not enabled, "make C=2" emits this warning:

linux/fs/nfs/nfs4session.c:337:6: warning:
symbol 'nfs41_set_target_slotid' was not declared. Should it be static?

Move nfs41_set_target_slotid() and nfs41_update_target_slotid() back
behind CONFIG_NFS_V4_1, since, in the final revision of this work,
they are used only in NFSv4.1 and later.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
eb2a1cd3c9df70ef84e91f2fc657fd19682346ca 09-Aug-2013 Chuck Lever <chuck.lever@oracle.com> NFS: Add global helper for releasing slot table resources

The nfs4_destroy_slot_tables() function is renamed to avoid
confusion with the new helper.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
744aa5253010636bb56f062336e9cae3132a46fb 09-Aug-2013 Chuck Lever <chuck.lever@oracle.com> NFS: Add global helper to set up a stand-along nfs4_slot_table

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
9d33059c1b76d77004753799479af6d359d83217 09-Aug-2013 Chuck Lever <chuck.lever@oracle.com> NFS: Enable slot table helpers for NFSv4.0

I'd like to re-use NFSv4.1's slot table machinery for NFSv4.0
transport blocking. Re-organize some of nfs4session.c so the slot
table code is built even when NFS_V4_1 is disabled.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
e8d92382dd65a3dd77ff533b09815c3dc65fa9a9 09-Aug-2013 Chuck Lever <chuck.lever@oracle.com> NFS: When displaying session slot numbers, use "%u" consistently

Clean up, since slot and sequence numbers are all unsigned anyway.

Among other things, squelch compiler warnings:

linux/fs/nfs/nfs4proc.c: In function ‘nfs4_setup_sequence’:
linux/fs/nfs/nfs4proc.c:703:2: warning: signed and unsigned type in
conditional expression [-Wsign-compare]

and

linux/fs/nfs/nfs4session.c: In function ‘nfs4_alloc_slot’:
linux/fs/nfs/nfs4session.c:151:31: warning: signed and unsigned type in
conditional expression [-Wsign-compare]

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
73d8bde5e4b658948be0d3df51b323ed323997a2 24-Jul-2013 Chuck Lever <chuck.lever@oracle.com> NFS: Never use user credentials for lease renewal

Never try to use a non-UID 0 user credential for lease management,
as that credential can change out from under us. The server will
block NFSv4 lease recovery with NFS4ERR_CLID_INUSE.

Since the mechanism to acquire a credential for lease management
is now the same for all minor versions, replace the minor version-
specific callout with a single function.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
18aad3d552c73adf2652a34baf0fe766058018e4 26-Jun-2013 Andy Adamson <andros@netapp.com> NFSv4.1 Refactor nfs4_init_session and nfs4_init_channel_attrs

nfs4_init_session was originally written to be called prior to
nfs4_init_channel_attrs, setting the session target_max response and request
sizes that nfs4_init_channel_attrs would pay attention to.

In the current code flow, nfs4_init_session, just like nfs4_init_ds_session
for the data server case, is called after the session is all negotiated, and
is actually used in a RECLAIM COMPLETE call to the server.

Remove the un-needed fc_target_max response and request fields from
nfs4_session and just set the max_resp_sz and max_rqst_sz in
nfs4_init_channel_attrs.

Signed-off-by: Andy Adamson <andros@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
774d5f14ee1ecac55f42a84ff35eb00b896b00b6 20-May-2013 Andy Adamson <andros@netapp.com> NFSv4.1 Fix a pNFS session draining deadlock

On a CB_RECALL the callback service thread flushes the inode using
filemap_flush prior to scheduling the state manager thread to return the
delegation. When pNFS is used and I/O has not yet gone to the data server
servicing the inode, a LAYOUTGET can preceed the I/O. Unlike the async
filemap_flush call, the LAYOUTGET must proceed to completion.

If the state manager starts to recover data while the inode flush is sending
the LAYOUTGET, a deadlock occurs as the callback service thread holds the
single callback session slot until the flushing is done which blocks the state
manager thread, and the state manager thread has set the session draining bit
which puts the inode flush LAYOUTGET RPC to sleep on the forechannel slot
table waitq.

Separate the draining of the back channel from the draining of the fore channel
by moving the NFS4_SESSION_DRAINING bit from session scope into the fore
and back slot tables. Drain the back channel first allowing the LAYOUTGET
call to proceed (and fail) so the callback service thread frees the callback
slot. Then proceed with draining the forechannel.

Signed-off-by: Andy Adamson <andros@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
ac20d163fccf9fa6acec8b68f127003635e13b72 15-Dec-2012 Trond Myklebust <Trond.Myklebust@netapp.com> NFSv4.1: Deal effectively with interrupted RPC calls.

If an RPC call is interrupted, assume that the server hasn't processed
the RPC call so that the next time we use the slot, we know that if we
get a NFS4ERR_SEQ_MISORDERED or NFS4ERR_SEQ_FALSE_RETRY, we just have
to bump the sequence number.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
8e63b6a8adabb0551124c3b78f7f5f36912c3728 15-Dec-2012 Trond Myklebust <Trond.Myklebust@netapp.com> NFSv4.1: Move the RPC timestamp out of the slot.

Shave a few bytes off the slot table size by moving the RPC timestamp
into the sequence results.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
b0ef9647a0cd6cfd63fed48fbbe6005e4ba92571 11-Dec-2012 Trond Myklebust <Trond.Myklebust@netapp.com> NFSv4.1: Be conservative about the client highest slotid

If the server sends us a target that looks like an outlier, but
is lower than the existing target, then respect it anyway.
However defer actually updating the generation counter until
we get a target that doesn't look like an outlier.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
1fa8064429d0acbf5bbf3c8a53f65679fdacc75e 02-Dec-2012 Trond Myklebust <Trond.Myklebust@netapp.com> NFSv4.1: Try to eliminate outliers when updating target_highest_slotid

Look for sudden changes in the first and second derivatives in order
to eliminate outlier changes to target_highest_slotid (which are
due to out-of-order RPC replies).

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
b75ad4cda5a6cd3431b1c65c2739c5ebd2c4b9da 29-Nov-2012 Trond Myklebust <Trond.Myklebust@netapp.com> NFSv4.1: Ensure smooth handover of slots from one task to the next waiting

Currently, we see a lot of bouncing for the value of highest_used_slotid
due to the fact that slots are getting freed, instead of getting instantly
transmitted to the next waiting task.

Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
73e39aaa8366694450cd6034050f542f965e277d 26-Nov-2012 Trond Myklebust <Trond.Myklebust@netapp.com> NFSv4.1: Cleanup move session slot management to fs/nfs/nfs4session.c

NFSv4.1 session management is getting complex enough to deserve
a separate file.

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