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/