xprtrdma: Revert commit d0f36c46deea
authorChuck Lever <chuck.lever@oracle.com>
Tue, 11 Apr 2017 17:23:34 +0000 (13:23 -0400)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Tue, 25 Apr 2017 20:12:30 +0000 (16:12 -0400)
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: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
net/sunrpc/xprtrdma/verbs.c

index b69daa30874fd5350f8f09415df9fe412f5f98f4..d7c16005491ec5261d99f9d20214b6476d44c662 100644 (file)
@@ -53,7 +53,7 @@
 #include <linux/sunrpc/addr.h>
 #include <linux/sunrpc/svc_rdma.h>
 #include <asm/bitops.h>
-#include <linux/module.h> /* try_module_get()/module_put() */
+
 #include <rdma/ib_cm.h>
 
 #include "xprt_rdma.h"
@@ -344,14 +344,6 @@ connected:
        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 *
 rpcrdma_create_id(struct rpcrdma_xprt *xprt,
                        struct rpcrdma_ia *ia, struct sockaddr *addr)
@@ -386,16 +378,6 @@ rpcrdma_create_id(struct rpcrdma_xprt *xprt,
                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;
        if (rc)
                goto out;
@@ -405,21 +387,20 @@ rpcrdma_create_id(struct rpcrdma_xprt *xprt,
        if (rc) {
                dprintk("RPC:       %s: rdma_resolve_route() failed %i\n",
                        __func__, rc);
-               goto put;
+               goto out;
        }
        rc = wait_for_completion_interruptible_timeout(&ia->ri_done, wtimeout);
        if (rc < 0) {
                dprintk("RPC:       %s: wait() exited: %i\n",
                        __func__, rc);
-               goto put;
+               goto out;
        }
        rc = ia->ri_async_rc;
        if (rc)
-               goto put;
+               goto out;
 
        return id;
-put:
-       module_put(id->device->owner);
+
 out:
        rdma_destroy_id(id);
        return ERR_PTR(rc);
@@ -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->qp)
                        rdma_destroy_qp(ia->ri_id);
-               rpcrdma_destroy_id(ia->ri_id);
+               rdma_destroy_id(ia->ri_id);
        }
        ia->ri_id = NULL;
        ia->ri_device = NULL;
@@ -800,7 +781,7 @@ rpcrdma_ep_reconnect(struct rpcrdma_xprt *r_xprt, struct rpcrdma_ep *ep,
        rdma_destroy_qp(old);
 
 out_destroy:
-       rpcrdma_destroy_id(old);
+       rdma_destroy_id(old);
 out:
        return rc;
 }