|
@@ -292,7 +292,6 @@ static void p9_read_work(struct work_struct *work)
|
|
|
__poll_t n;
|
|
|
int err;
|
|
|
struct p9_conn *m;
|
|
|
- int status = REQ_STATUS_ERROR;
|
|
|
|
|
|
m = container_of(work, struct p9_conn, rq);
|
|
|
|
|
@@ -375,11 +374,17 @@ static void p9_read_work(struct work_struct *work)
|
|
|
p9_debug(P9_DEBUG_TRANS, "got new packet\n");
|
|
|
m->rreq->rc.size = m->rc.offset;
|
|
|
spin_lock(&m->client->lock);
|
|
|
- if (m->rreq->status != REQ_STATUS_ERROR)
|
|
|
- status = REQ_STATUS_RCVD;
|
|
|
- list_del(&m->rreq->req_list);
|
|
|
- /* update req->status while holding client->lock */
|
|
|
- p9_client_cb(m->client, m->rreq, status);
|
|
|
+ if (m->rreq->status == REQ_STATUS_SENT) {
|
|
|
+ list_del(&m->rreq->req_list);
|
|
|
+ p9_client_cb(m->client, m->rreq, REQ_STATUS_RCVD);
|
|
|
+ } else {
|
|
|
+ spin_unlock(&m->client->lock);
|
|
|
+ p9_debug(P9_DEBUG_ERROR,
|
|
|
+ "Request tag %d errored out while we were reading the reply\n",
|
|
|
+ m->rc.tag);
|
|
|
+ err = -EIO;
|
|
|
+ goto error;
|
|
|
+ }
|
|
|
spin_unlock(&m->client->lock);
|
|
|
m->rc.sdata = NULL;
|
|
|
m->rc.offset = 0;
|