req.err = 0; 
v9fs_mux_rpc(struct v9fs_session_info *v9ses, struct v9fs_fcall *tcall,	     struct v9fs_fcall **rcall){	int tid = -1;	struct v9fs_fcall *fcall = NULL;	struct v9fs_rpcreq req;	int ret = -1;	if (!v9ses)		return -EINVAL;	if (rcall)		*rcall = NULL;	if (tcall->id != TVERSION) {		tid = v9fs_get_idpool(&v9ses->tidpool);		if (tid < 0)			return -ENOMEM;	}	tcall->tag = tid;	req.tcall = tcall;	req.rcall = NULL;	ret = v9fs_send(v9ses, &req);	if (ret < 0) {		if (tcall->id != TVERSION)			v9fs_put_idpool(tid, &v9ses->tidpool);		dprintk(DEBUG_MUX, "error %d\n", ret);		return ret;	}	ret = v9fs_recv(v9ses, &req);	fcall = req.rcall;	dprintk(DEBUG_MUX, "received: tag=%x, ret=%d\n", tcall->tag, ret);	if (ret == -ERESTARTSYS) {		if (v9ses->transport->status != Disconnected		    && tcall->id != TFLUSH) {			unsigned long flags;			dprintk(DEBUG_MUX, "flushing the tag: %d\n",				tcall->tag);			clear_thread_flag(TIF_SIGPENDING);			v9fs_t_flush(v9ses, tcall->tag);			spin_lock_irqsave(&current->sighand->siglock, flags);			recalc_sigpending();			spin_unlock_irqrestore(&current->sighand->siglock,					       flags);			dprintk(DEBUG_MUX, "flushing done\n");		}		goto release_req;	} else if (ret < 0)		goto release_req;	if (!fcall)		ret = -EIO;	else {		if (fcall->id == RERROR) {			ret = v9fs_errstr2errno(fcall->params.rerror.error);			if (ret == 0) {	/* string match failed */				if (fcall->params.rerror.errno)					ret = -(fcall->params.rerror.errno);				else					ret = -ESERVERFAULT;			}		} else if (fcall->id != tcall->id + 1) {			dprintk(DEBUG_ERROR,				"fcall mismatch: expected %d, got %d\n",				tcall->id + 1, fcall->id);			ret = -EIO;		}	}      release_req:	if (tcall->id != TVERSION)		v9fs_put_idpool(tid, &v9ses->tidpool);	if (rcall)		*rcall = fcall;	else		kfree(fcall);	return ret;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/cb2e87a65d6cd735eb06fa595bf90497af28c37b/mux.c/buggy/fs/9p/mux.c