mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 13:14:07 +08:00
SUNRPC add function to offline remove trunkable transports
Iterate thru available transports in the xprt_switch for all trunkable transports offline and possibly remote them as well. Signed-off-by: Olga Kornievskaia <kolga@netapp.com> Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
7ffcdaa670
commit
895245ccea
@ -234,6 +234,7 @@ int rpc_clnt_setup_test_and_add_xprt(struct rpc_clnt *,
|
||||
struct rpc_xprt_switch *,
|
||||
struct rpc_xprt *,
|
||||
void *);
|
||||
void rpc_clnt_manage_trunked_xprts(struct rpc_clnt *);
|
||||
|
||||
const char *rpc_proc_name(const struct rpc_task *task);
|
||||
|
||||
|
@ -3000,6 +3000,52 @@ out_put_switch:
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rpc_clnt_add_xprt);
|
||||
|
||||
static int rpc_xprt_offline(struct rpc_clnt *clnt,
|
||||
struct rpc_xprt *xprt,
|
||||
void *data)
|
||||
{
|
||||
struct rpc_xprt *main_xprt;
|
||||
struct rpc_xprt_switch *xps;
|
||||
int err = 0;
|
||||
|
||||
xprt_get(xprt);
|
||||
|
||||
rcu_read_lock();
|
||||
main_xprt = xprt_get(rcu_dereference(clnt->cl_xprt));
|
||||
xps = xprt_switch_get(rcu_dereference(clnt->cl_xpi.xpi_xpswitch));
|
||||
err = rpc_cmp_addr_port((struct sockaddr *)&xprt->addr,
|
||||
(struct sockaddr *)&main_xprt->addr);
|
||||
rcu_read_unlock();
|
||||
xprt_put(main_xprt);
|
||||
if (err)
|
||||
goto out;
|
||||
|
||||
if (wait_on_bit_lock(&xprt->state, XPRT_LOCKED, TASK_KILLABLE)) {
|
||||
err = -EINTR;
|
||||
goto out;
|
||||
}
|
||||
xprt_set_offline_locked(xprt, xps);
|
||||
|
||||
xprt_release_write(xprt, NULL);
|
||||
out:
|
||||
xprt_put(xprt);
|
||||
xprt_switch_put(xps);
|
||||
return err;
|
||||
}
|
||||
|
||||
/* rpc_clnt_manage_trunked_xprts -- offline trunked transports
|
||||
* @clnt rpc_clnt structure
|
||||
*
|
||||
* For each active transport found in the rpc_clnt structure call
|
||||
* the function rpc_xprt_offline() which will identify trunked transports
|
||||
* and will mark them offline.
|
||||
*/
|
||||
void rpc_clnt_manage_trunked_xprts(struct rpc_clnt *clnt)
|
||||
{
|
||||
rpc_clnt_iterate_for_each_xprt(clnt, rpc_xprt_offline, NULL);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rpc_clnt_manage_trunked_xprts);
|
||||
|
||||
struct connect_timeout_data {
|
||||
unsigned long connect_timeout;
|
||||
unsigned long reconnect_timeout;
|
||||
|
Loading…
Reference in New Issue
Block a user