]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - net/sunrpc/xprtrdma/verbs.c
xprtrdma: Fix client lock-up after application signal fires
[karo-tx-linux.git] / net / sunrpc / xprtrdma / verbs.c
index 3dbce9ac4327a89ea6d84f348041609c5d653b4a..a215a8759dc202c19fe63831ace31f3589da7167 100644 (file)
@@ -971,7 +971,6 @@ rpcrdma_create_req(struct rpcrdma_xprt *r_xprt)
        if (req == NULL)
                return ERR_PTR(-ENOMEM);
 
-       INIT_LIST_HEAD(&req->rl_free);
        spin_lock(&buffer->rb_reqslock);
        list_add(&req->rl_all, &buffer->rb_allreqs);
        spin_unlock(&buffer->rb_reqslock);
@@ -1033,6 +1032,7 @@ rpcrdma_buffer_create(struct rpcrdma_xprt *r_xprt)
        spin_lock_init(&buf->rb_recovery_lock);
        INIT_LIST_HEAD(&buf->rb_mws);
        INIT_LIST_HEAD(&buf->rb_all);
+       INIT_LIST_HEAD(&buf->rb_pending);
        INIT_LIST_HEAD(&buf->rb_stale_mrs);
        INIT_DELAYED_WORK(&buf->rb_refresh_worker,
                          rpcrdma_mr_refresh_worker);
@@ -1055,7 +1055,7 @@ rpcrdma_buffer_create(struct rpcrdma_xprt *r_xprt)
                        goto out;
                }
                req->rl_backchannel = false;
-               list_add(&req->rl_free, &buf->rb_send_bufs);
+               list_add(&req->rl_list, &buf->rb_send_bufs);
        }
 
        INIT_LIST_HEAD(&buf->rb_recv_bufs);
@@ -1084,8 +1084,8 @@ rpcrdma_buffer_get_req_locked(struct rpcrdma_buffer *buf)
        struct rpcrdma_req *req;
 
        req = list_first_entry(&buf->rb_send_bufs,
-                              struct rpcrdma_req, rl_free);
-       list_del(&req->rl_free);
+                              struct rpcrdma_req, rl_list);
+       list_del_init(&req->rl_list);
        return req;
 }
 
@@ -1187,6 +1187,7 @@ rpcrdma_get_mw(struct rpcrdma_xprt *r_xprt)
 
        if (!mw)
                goto out_nomws;
+       mw->mw_flags = 0;
        return mw;
 
 out_nomws:
@@ -1267,7 +1268,7 @@ rpcrdma_buffer_put(struct rpcrdma_req *req)
 
        spin_lock(&buffers->rb_lock);
        buffers->rb_send_count--;
-       list_add_tail(&req->rl_free, &buffers->rb_send_bufs);
+       list_add_tail(&req->rl_list, &buffers->rb_send_bufs);
        if (rep) {
                buffers->rb_recv_count--;
                list_add_tail(&rep->rr_list, &buffers->rb_recv_bufs);