23 Sep, 2016
1 commit
-
For now, the callback doesn't do anything. Support for that will be
added in later patches.Signed-off-by: Jeff Layton
Signed-off-by: Anna Schumaker
20 Sep, 2016
2 commits
-
Add support for the kernel parameter nfs.callback_nr_threads to set
the number of threads that will be assigned to the callback channel.Add support for the kernel parameter nfs.nfs.max_session_cb_slots
to set the maximum size of the callback channel slot table.Signed-off-by: Trond Myklebust
Signed-off-by: Anna Schumaker -
This will allow us to bump the number of callback threads at will.
Signed-off-by: Trond Myklebust
Signed-off-by: Anna Schumaker
25 Jan, 2016
1 commit
-
Hook the callback channel into the same session management machinery
as we use for the forward channel.Signed-off-by: Trond Myklebust
22 Oct, 2015
3 commits
-
Commit 778be232a207 "NFS do not find client in NFSv4 pg_authenticate" has remove
the define and using of nfs4_set_callback_sessionid(), and
commit 36281caa839f "NFSv4: Further clean-ups of delegation stateid validation"
has update the checking of stateid, and move the code to nfs4proc.c.This patch remove those function defines left in callback.h
Signed-off-by: Kinglong Mee
Signed-off-by: Trond Myklebust -
Commit bbe0a3aa4e22 "NFS: make nfs_callback_tcpport per network context" has
make nfs_callback_tcpport per network, but left the global nfs_callback_tcpport,
remove it.Signed-off-by: Kinglong Mee
Signed-off-by: Trond Myklebust -
Commit c36fca52f5 "NFS refactor nfs_find_client and reference client
across callback processing" has store clp in cb_process_state
which is set in cb_sequence.So that, it's unneeded to store address pointer in any callback arguments.
Signed-off-by: Kinglong Mee
Signed-off-by: Trond Myklebust
09 Jun, 2013
2 commits
-
NFS v4.2 adds a CB_OFFLOAD operation used by COPY and WRITE_PLUS. Since
neither of these operations have been implemented yet, simply return
NFS4ERR_NOTSUPP.Signed-off-by: Bryan Schumaker
Signed-off-by: Trond Myklebust -
I found a few places that hardcode the minor version number rather than
making it dependent on the protocol the callback came in over. This
patch makes it easier to add new minor versions in the future.Signed-off-by: Bryan Schumaker
Signed-off-by: Trond Myklebust
06 Dec, 2012
2 commits
-
Coalesce nfs4_check_drain_bc_complete and nfs4_check_drain_fc_complete
into a single function that can be called when the slot table is known
to be empty, then change nfs4_callback_free_slot() and nfs4_free_slot()
to use it.Signed-off-by: Trond Myklebust
-
Don't confuse the table size and the target_highest_slotid...
Signed-off-by: Trond Myklebust
02 Oct, 2012
4 commits
-
Sparse warning:
fs/nfs/super.c:2638:16: sparse: symbol 'nfs_callback_tcpport' was not
declared. Should it be static?Reported-by: Fengguang Wu
Signed-off-by: Stanislav Kinsbursky
Signed-off-by: Trond Myklebust -
Signed-off-by: Stanislav Kinsbursky
Signed-off-by: Trond Myklebust -
Signed-off-by: Stanislav Kinsbursky
Signed-off-by: Trond Myklebust -
Signed-off-by: Stanislav Kinsbursky
Signed-off-by: Trond Myklebust
31 Jul, 2012
1 commit
-
This patch exports symbols needed by the v4 module. In addition, I also
switch over to using IS_ENABLED() to check if CONFIG_NFS_V4 or
CONFIG_NFS_V4_MODULE are set.The module (nfs4.ko) will be created in the same directory as nfs.ko and
will be automatically loaded the first time you try to mount over NFS v4.Signed-off-by: Bryan Schumaker
Signed-off-by: Trond Myklebust
15 Feb, 2012
1 commit
-
It is perfectly legal to negotiate up to 2^32-1 slots in the protocol,
and with 10GigE, we are already seeing that 255 slots is far too limiting.Signed-off-by: Trond Myklebust
07 Feb, 2012
1 commit
-
Network namespace is taken from request transport and passed as a part of
cb_process_state structure.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: Trond Myklebust
13 Jan, 2012
1 commit
-
This function returns a big endian value. The implementation in
fs/nfs/callback_proc.c is declared with "__be32" but the .h file uses
"unsigned" instead. It makes sparse complain:fs/nfs/callback_proc.c:232:8: error:
symbol 'nfs4_callback_layoutrecall' redeclared with different
type (originally declared at fs/nfs/callback.h:165) - different
base typesSigned-off-by: Dan Carpenter
Signed-off-by: Trond Myklebust
04 Aug, 2011
1 commit
-
Currently, there is no guarantee that we will call nfs4_cb_take_slot() even
though nfs4_callback_compound() will consistently call
nfs4_cb_free_slot() provided the cb_process_state has set the 'clp' field.
The result is that we can trigger the BUG_ON() upon the next call to
nfs4_cb_take_slot().This patch fixes the above problem by using the slot id that was taken in
the CB_SEQUENCE operation as a flag for whether or not we need to call
nfs4_cb_free_slot().
It also fixes an atomicity problem: we need to set tbl->highest_used_slotid
atomically with the check for NFS4_SESSION_DRAINING, otherwise we end up
racing with the various tests in nfs4_begin_drain_session().Cc: stable@kernel.org [2.6.38+]
Signed-off-by: Trond Myklebust
30 May, 2011
1 commit
-
Note: This functionlaity is incomplete as all layout segments referring to
the 'to be removed device id' need to be reaped, and all in flight I/O drained.[use be32 res in nfs4_callback_devicenotify]
[use nfs_client to qualify deviceid for cb_notify_deviceid]
[use global deviceid cache for CB_NOTIFY_DEVICEID]
[refactor device cache _lookup_deviceid]
[refactor device cache _find_get_deviceid]
Signed-off-by: Benny Halevy
[Bug in new global-device-cache code]
[layout_driver MUST set free_deviceid_node if using dev-cache]
Signed-off-by: Boaz Harrosh
Signed-off-by: Benny Halevy
26 Jan, 2011
1 commit
-
The information required to find the nfs_client cooresponding to the incoming
back channel request is contained in the NFS layer. Perform minimal checking
in the RPC layer pg_authenticate method, and push more detailed checking into
the NFS layer where the nfs_client can be found.Signed-off-by: Andy Adamson
Signed-off-by: Trond Myklebust
07 Jan, 2011
5 commits
-
While here, update the code a bit.
Signed-off-by: Alexandros Batsakis
Signed-off-by: Fred Isaman
Signed-off-by: Trond Myklebust -
This is the xdr decoding for CB_LAYOUTRECALL.
Signed-off-by: Alexandros Batsakis
Signed-off-by: Dean Hildebrand
Signed-off-by: Marc Eshel
Signed-off-by: Andy Adamson
Signed-off-by: Benny Halevy
Signed-off-by: Fred Isaman
Signed-off-by: Trond Myklebust -
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
Signed-off-by: Trond Myklebust -
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
Signed-off-by: Trond Myklebust -
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
Signed-off-by: Trond Myklebust
10 Feb, 2010
1 commit
-
Drain the fore channel and reset the max_slots to the new value.
Signed-off-by: Andy Adamson
Signed-off-by: Trond Myklebust
06 Dec, 2009
2 commits
-
in NFSv4.1 the seqid part of a stateid in CB_RECALL must be 0
Signed-off-by: Alexandros Batsakis
Signed-off-by: Trond Myklebust -
For now the clients returns _all_ the delegations of the specificed type
it holdsSigned-off-by: Alexandros Batsakis
Signed-off-by: Trond Myklebust
18 Jun, 2009
10 commits
-
Change the type of cs_addr and csr_status to 'struct sockaddr' and
'__be32' since the cb_sequence processing function will use existing
functionality that expects these types.Signed-off-by: Ricardo Labiaga
Signed-off-by: Benny Halevy -
Currently, just free up any referring calls information.
Signed-off-by: Benny Halevy
[nfs41: fix csr_{,target}highestslotid]
Signed-off-by: Benny Halevy -
Signed-off-by: Benny Halevy
-
Note that this patch changes the nfsv4.0 behavior also when
CONFIG_NFS_V4_1 is not defined where NFS4ERR_MINOR_VERS_MISMATCH
will be returned if the client received a CB_COMPOUND
with minorversion != 0. Previously, it would have
returned NFS4ERR_OP_ILLEGAL for CB_SEQUENCE.
(or if the server is broken and sent OP_CB_GETATTR or OP_CB_RECALL
with minorversion!=0, they would have been processed normally.Signed-off-by: Benny Halevy
[nfs41: refactor op preprocessing out of process_op]
See http://linux-nfs.org/pipermail/pnfs/2009-June/007845.html
[nfs41: define CB_NOTIFY_DEVICEID as not supported]
Signed-off-by: Benny Halevy -
Signed-off-by: Benny Halevy
-
decode cb_compound header conforming to
http://tools.ietf.org/html/draft-ietf-nfsv4-minorversion1-26Get rid of cb_compound_hdr_arg.callback_ident
callback_ident is not used anywhere so we shouldn't waste any memory to
store it.Signed-off-by: Benny Halevy
[nfs41: no need to break read_buf in decode_compound_hdr_arg]
See http://linux-nfs.org/pipermail/pnfs/2009-June/007844.html
Signed-off-by: Benny Halevy -
Signed-off-by: Benny Halevy
-
Tracks the nfs_callback_info for both versions, enabling the callback
service for v4 and v4.1 to run concurrently and be stopped independently
of each other.Signed-off-by: Ricardo Labiaga
Signed-off-by: Benny Halevy -
nfs41_callback_up() initializes the necessary queues and creates the new
nfs41_callback_svc thread. This thread executes the callback service which
waits for requests to arrive on the svc_serv->sv_cb_list.NFS41_BC_MIN_CALLBACKS is set to 1 because we expect callbacks to not
cause substantial latency.The actual processing of the callback will be implemented as a separate patch.
There is only one NFSv4.1 callback service. The first caller of
nfs4_callback_up() creates the service, subsequent callers increment a
reference count on the service. The service is destroyed when the last
caller invokes nfs_callback_down().The transport needs to hold a reference to the callback service in order
to invoke it during callback processing. Currently this reference is only
obtained when the service is first created. This is incorrect, since
subsequent registrations for other transports will leave the xprt->serv
pointer uninitialized, leading to an oops when a callback arrives on
the "unreferenced" transport.This patch fixes the problem by ensuring that a reference to the service
is saved in xprt->serv, either because the service is created by this
invocation to nfs4_callback_up() or by a prior invocation.Signed-off-by: Ricardo Labiaga
Signed-off-by: Benny Halevy
[nfs41: Add a reference to svc_serv during callback service bring up]
Signed-off-by: Ricardo Labiaga
Signed-off-by: Benny Halevy
[Type check arguments of nfs_callback_up]
Signed-off-by: Ricardo Labiaga
Signed-off-by: Benny Halevy
[nfs41: save svc_serv in nfs_callback_info]
Signed-off-by: Benny Halevy
[Removal of ugly #ifdefs]
[nfs41: Update to removal of ugly #ifdefs]
Signed-off-by: Ricardo Labiaga
Signed-off-by: Benny Halevy -
move nfs4_init_callback into nfs4_init_client_minor_version
and nfs4_destroy_callback into nfs4_clear_client_minor_versionas these need to happen also when auto-negotiating the minorversion
once the callback service for nfs41 becomes different than for nfs4.0Signed-off-by: Benny Halevy
[nfs41: Fix checkpatch warning]
Signed-off-by: Ricardo Labiaga
Signed-off-by: Benny Halevy
[Type check arguments of nfs_callback_up]
Signed-off-by: Ricardo Labiaga
Signed-off-by: Benny Halevy
[nfs41: Backchannel: Remove FIXME comment]
Signed-off-by: Ricardo Labiaga
Signed-off-by: Benny Halevy