+ }
+
+ if (m->req->rc == NULL) {
+ m->req->rc = kmalloc(sizeof(struct p9_fcall) +
+ m->client->msize, GFP_KERNEL);
+ if (!m->req->rc) {
+ m->req = NULL;
+ err = -ENOMEM;
+ goto error;
+ }
+ }
+ m->rbuf = (char *)m->req->rc + sizeof(struct p9_fcall);
+ memcpy(m->rbuf, m->tmp_buf, m->rsize);
+ m->rsize = n;
+ }
+
+ /* not an else because some packets (like clunk) have no payload */
+ if ((m->req) && (m->rpos == m->rsize)) { /* packet is read in */
+ P9_DPRINTK(P9_DEBUG_MUX, "got new packet\n");
+ m->rbuf = (char *)m->req->rc + sizeof(struct p9_fcall);
+ err = p9_deserialize_fcall(m->rbuf, m->rsize, m->req->rc,
+ m->client->dotu);
+ if (err < 0) {
+ m->req = NULL;
+ goto error;
+ }