 v9ses->transport->close(v9ses->transport); 
static int v9fs_recvproc(void *data){	struct v9fs_session_info *v9ses = (struct v9fs_session_info *)data;	struct v9fs_fcall *rcall = NULL;	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 = rptr = rreq = NULL;		rcall = kmalloc(v9ses->maxdata + V9FS_IOHDRSZ, GFP_KERNEL);		if (!rcall) {			eprintk(KERN_ERR, "no memory for buffers\n");			break;		}		err = read_message(v9ses, rcall, v9ses->maxdata + V9FS_IOHDRSZ);		if (err < 0) {			kfree(rcall);			break;		}		spin_lock(&v9ses->muxlock);		list_for_each_entry_safe(rreq, rptr, &v9ses->mux_fcalls, next) {			if (rreq->tcall->tag == rcall->tag) {				req = rreq;				req->rcall = rcall;				break;			}		}		if (req && (req->tcall->id == TFLUSH)) {			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->next);					kfree(treq->rcall);					break;				}			}		}		spin_unlock(&v9ses->muxlock);		if (!req) {			dprintk(DEBUG_ERROR,				"unexpected response: id %d tag %d\n",				rcall->id, rcall->tag);			kfree(rcall);		}		wake_up_all(&v9ses->read_wait);		set_current_state(TASK_INTERRUPTIBLE);	}	/* Inform all pending processes about the failure */	wake_up_all(&v9ses->read_wait);	if (signal_pending(current))		complete(&v9ses->proccmpl);	dprintk(DEBUG_MUX, "recvproc: end\n");	v9ses->recvproc = NULL;	return err >= 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/cb2e87a65d6cd735eb06fa595bf90497af28c37b/mux.c/buggy/fs/9p/mux.c