Commit 56a6bd15 authored by Chuck Lever's avatar Chuck Lever Committed by Anna Schumaker

xprtrdma: Revert commit d0f36c46

Device removal is now adequately supported. Pinning the underlying
device driver to prevent removal while an NFS mount is active is no
longer necessary.
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
parent a9b0e381
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
#include <linux/sunrpc/addr.h> #include <linux/sunrpc/addr.h>
#include <linux/sunrpc/svc_rdma.h> #include <linux/sunrpc/svc_rdma.h>
#include <asm/bitops.h> #include <asm/bitops.h>
#include <linux/module.h> /* try_module_get()/module_put() */
#include <rdma/ib_cm.h> #include <rdma/ib_cm.h>
#include "xprt_rdma.h" #include "xprt_rdma.h"
...@@ -344,14 +344,6 @@ rpcrdma_conn_upcall(struct rdma_cm_id *id, struct rdma_cm_event *event) ...@@ -344,14 +344,6 @@ rpcrdma_conn_upcall(struct rdma_cm_id *id, struct rdma_cm_event *event)
return 0; return 0;
} }
static void rpcrdma_destroy_id(struct rdma_cm_id *id)
{
if (id) {
module_put(id->device->owner);
rdma_destroy_id(id);
}
}
static struct rdma_cm_id * static struct rdma_cm_id *
rpcrdma_create_id(struct rpcrdma_xprt *xprt, rpcrdma_create_id(struct rpcrdma_xprt *xprt,
struct rpcrdma_ia *ia, struct sockaddr *addr) struct rpcrdma_ia *ia, struct sockaddr *addr)
...@@ -386,16 +378,6 @@ rpcrdma_create_id(struct rpcrdma_xprt *xprt, ...@@ -386,16 +378,6 @@ rpcrdma_create_id(struct rpcrdma_xprt *xprt,
goto out; goto out;
} }
/* FIXME:
* Until xprtrdma supports DEVICE_REMOVAL, the provider must
* be pinned while there are active NFS/RDMA mounts to prevent
* hangs and crashes at umount time.
*/
if (!ia->ri_async_rc && !try_module_get(id->device->owner)) {
dprintk("RPC: %s: Failed to get device module\n",
__func__);
ia->ri_async_rc = -ENODEV;
}
rc = ia->ri_async_rc; rc = ia->ri_async_rc;
if (rc) if (rc)
goto out; goto out;
...@@ -405,21 +387,20 @@ rpcrdma_create_id(struct rpcrdma_xprt *xprt, ...@@ -405,21 +387,20 @@ rpcrdma_create_id(struct rpcrdma_xprt *xprt,
if (rc) { if (rc) {
dprintk("RPC: %s: rdma_resolve_route() failed %i\n", dprintk("RPC: %s: rdma_resolve_route() failed %i\n",
__func__, rc); __func__, rc);
goto put; goto out;
} }
rc = wait_for_completion_interruptible_timeout(&ia->ri_done, wtimeout); rc = wait_for_completion_interruptible_timeout(&ia->ri_done, wtimeout);
if (rc < 0) { if (rc < 0) {
dprintk("RPC: %s: wait() exited: %i\n", dprintk("RPC: %s: wait() exited: %i\n",
__func__, rc); __func__, rc);
goto put; goto out;
} }
rc = ia->ri_async_rc; rc = ia->ri_async_rc;
if (rc) if (rc)
goto put; goto out;
return id; return id;
put:
module_put(id->device->owner);
out: out:
rdma_destroy_id(id); rdma_destroy_id(id);
return ERR_PTR(rc); return ERR_PTR(rc);
...@@ -546,7 +527,7 @@ rpcrdma_ia_close(struct rpcrdma_ia *ia) ...@@ -546,7 +527,7 @@ rpcrdma_ia_close(struct rpcrdma_ia *ia)
if (ia->ri_id != NULL && !IS_ERR(ia->ri_id)) { if (ia->ri_id != NULL && !IS_ERR(ia->ri_id)) {
if (ia->ri_id->qp) if (ia->ri_id->qp)
rdma_destroy_qp(ia->ri_id); rdma_destroy_qp(ia->ri_id);
rpcrdma_destroy_id(ia->ri_id); rdma_destroy_id(ia->ri_id);
} }
ia->ri_id = NULL; ia->ri_id = NULL;
ia->ri_device = NULL; ia->ri_device = NULL;
...@@ -800,7 +781,7 @@ rpcrdma_ep_reconnect(struct rpcrdma_xprt *r_xprt, struct rpcrdma_ep *ep, ...@@ -800,7 +781,7 @@ rpcrdma_ep_reconnect(struct rpcrdma_xprt *r_xprt, struct rpcrdma_ep *ep,
rdma_destroy_qp(old); rdma_destroy_qp(old);
out_destroy: out_destroy:
rpcrdma_destroy_id(old); rdma_destroy_id(old);
out: out:
return rc; return rc;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment