Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a314f274 authored by Jim Garlick's avatar Jim Garlick Committed by Eric Van Hensbergen
Browse files

net/9p: don't allow Tflush to be interrupted



When a signal is received while sending a Tflush, the client,
which has recursed into p9_client_rpc() while sending another request,
should wait for Rflush as long as the transport is still up.

Signed-off-by: default avatarJim Garlick <garlick@llnl.gov>
Signed-off-by: default avatarEric Van Hensbergen <ericvh@gmail.com>
parent 3c761ea0
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -740,10 +740,18 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...)
			c->status = Disconnected;
		goto reterr;
	}
again:
	/* Wait for the response */
	err = wait_event_interruptible(*req->wq,
				       req->status >= REQ_STATUS_RCVD);

	if ((err == -ERESTARTSYS) && (c->status == Connected)
				  && (type == P9_TFLUSH)) {
		sigpending = 1;
		clear_thread_flag(TIF_SIGPENDING);
		goto again;
	}

	if (req->status == REQ_STATUS_ERROR) {
		p9_debug(P9_DEBUG_ERROR, "req_status error %d\n", req->t_err);
		err = req->t_err;