This is part [6/7] of the v9fs-2.0.2 patch against Linux 2.6.13-rc2-mm2.

This part of the patch contains transport routine changes related to
hch's comments.

Signed-off-by: Eric Van Hensbergen <[EMAIL PROTECTED]>


 ----------

 fs/9p/trans_sock.c   |    2 +-
 fs/9p/mux.c          |   44 +++++++++++++++-----------------------------
 2 files changed, 16 insertions(+), 30 deletions(-)

 ----------

--- a/fs/9p/mux.c
+++ b/fs/9p/mux.c
@@ -29,9 +29,9 @@
 #include <linux/errno.h>
 #include <linux/fs.h>
 #include <linux/kthread.h>
+#include <linux/idr.h>
 
 #include "debug.h"
-#include "idpool.h"
 #include "v9fs.h"
 #include "9p.h"
 #include "transport.h"
@@ -160,30 +160,19 @@ static int v9fs_recv(struct v9fs_session
        int ret = 0;
 
        dprintk(DEBUG_MUX, "waiting for response: %d\n", req->tcall->tag);
-       ret = wait_event_interruptible_timeout(v9ses->read_wait,
+       ret = wait_event_interruptible(v9ses->read_wait,
                       ((v9ses->transport->status != Connected) ||
-                       (req->rcall != 0) || dprintcond(v9ses, req)),
-                      msecs_to_jiffies(v9ses->timeout));
+                       (req->rcall != 0) || dprintcond(v9ses, req)));
 
        dprintk(DEBUG_MUX, "got it: rcall %p\n", req->rcall);
        if (v9ses->transport->status == Disconnected)
                return -ECONNRESET;
 
-       if (ret >= 0) {
+       if (ret == 0) {
                spin_lock(&v9ses->muxlock);
                list_del(&req->next);
                spin_unlock(&v9ses->muxlock);
        }
-       if (ret == 0) {         /* timeout */
-                       dprintk(DEBUG_ERROR, "Connection timeout after %u 
(%u)\n",
-                       v9ses->timeout,
-                       (unsigned int)msecs_to_jiffies(v9ses->timeout));
-               v9ses->session_hung = 1;
-               v9ses->transport->status = Hung;
-               return -ETIMEDOUT;
-       } else {
-               ret = 0;        /* reset return code */
-       }
 
        return ret;
 }
@@ -273,7 +262,8 @@ v9fs_mux_rpc(struct v9fs_session_info *v
        ret = v9fs_send(v9ses, &req);
 
        if (ret < 0) {
-               v9fs_put_idpool(tid, &v9ses->tidpool);
+               if(tcall->id != TVERSION)
+                       v9fs_put_idpool(tid, &v9ses->tidpool);
                dprintk(DEBUG_MUX, "error %d\n", ret);
                return ret;
        }
@@ -323,7 +313,8 @@ v9fs_mux_rpc(struct v9fs_session_info *v
        }
 
       release_req:
-       v9fs_put_idpool(tid, &v9ses->tidpool);
+       if(tcall->id != TVERSION)
+               v9fs_put_idpool(tid, &v9ses->tidpool);
        if (rcall)
                *rcall = fcall;
        else
@@ -342,16 +333,16 @@ static int v9fs_recvproc(void *data)
 {
        struct v9fs_session_info *v9ses = (struct v9fs_session_info *)data;
        struct v9fs_fcall *rcall = NULL;
-       struct list_head *rptr;
-       struct list_head *rrptr;
+       struct v9fs_rpcreq *rptr;
        struct v9fs_rpcreq *req;
+       struct v9fs_rpcreq *rreq;
        int err = 0;
 
        allow_signal(SIGKILL);
        set_current_state(TASK_INTERRUPTIBLE);
        complete(&v9ses->proccmpl);
        while (!kthread_should_stop() && err >= 0) {
-               req = NULL;
+               req = rptr = rreq = NULL;
 
                rcall = kmalloc(v9ses->maxdata + V9FS_IOHDRSZ, GFP_KERNEL);
                if(!rcall) {
@@ -365,10 +356,7 @@ static int v9fs_recvproc(void *data)
                        break;
                }
                spin_lock(&v9ses->muxlock);
-               list_for_each_safe(rptr, rrptr, &v9ses->mux_fcalls) {
-                       struct v9fs_rpcreq *rreq =
-                           list_entry(rptr, struct v9fs_rpcreq, next);
-
+               list_for_each_entry_safe(rreq, rptr, &v9ses->mux_fcalls, next) {
                        if (rreq->tcall->tag == rcall->tag) {
                                req = rreq;
                                req->rcall = rcall;
@@ -377,13 +365,11 @@ static int v9fs_recvproc(void *data)
                }
 
                if (req && (req->tcall->id == TFLUSH)) {
-                       list_for_each_safe(rptr, rrptr, &v9ses->mux_fcalls) {
-                               struct v9fs_rpcreq *treq =
-                                   list_entry(rptr, struct v9fs_rpcreq, next);
-
+                       struct v9fs_rpcreq *treq = NULL;
+                       list_for_each_entry_safe(treq, rptr, 
&v9ses->mux_fcalls, next) {
                                if (treq->tcall->tag ==
                                    req->tcall->params.tflush.oldtag) {
-                                       list_del(rptr);
+                                       list_del(&rptr->next);
                                        kfree(treq->rcall);
                                        break;
                                }
diff --git a/fs/9p/trans_sock.c b/fs/9p/trans_sock.c
--- a/fs/9p/trans_sock.c
+++ b/fs/9p/trans_sock.c
@@ -34,9 +34,9 @@
 #include <linux/un.h>
 #include <asm/uaccess.h>
 #include <linux/inet.h>
+#include <linux/idr.h>
 
 #include "debug.h"
-#include "idpool.h"
 #include "v9fs.h"
 #include "transport.h"
 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to