|
@@ -148,6 +148,28 @@ _data_server_lookup_locked(const struct list_head *dsaddrs)
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * Lookup DS by nfs_client pointer. Zero data server client pointer
|
|
|
+ */
|
|
|
+void nfs4_ds_disconnect(struct nfs_client *clp)
|
|
|
+{
|
|
|
+ struct nfs4_pnfs_ds *ds;
|
|
|
+ struct nfs_client *found = NULL;
|
|
|
+
|
|
|
+ dprintk("%s clp %p\n", __func__, clp);
|
|
|
+ spin_lock(&nfs4_ds_cache_lock);
|
|
|
+ list_for_each_entry(ds, &nfs4_data_server_cache, ds_node)
|
|
|
+ if (ds->ds_clp && ds->ds_clp == clp) {
|
|
|
+ found = ds->ds_clp;
|
|
|
+ ds->ds_clp = NULL;
|
|
|
+ }
|
|
|
+ spin_unlock(&nfs4_ds_cache_lock);
|
|
|
+ if (found) {
|
|
|
+ set_bit(NFS_CS_STOP_RENEW, &clp->cl_res_state);
|
|
|
+ nfs_put_client(clp);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Create an rpc connection to the nfs4_pnfs_ds data server
|
|
|
* Currently only supports IPv4 and IPv6 addresses
|