diff options
Diffstat (limited to 'drivers/misc/mei/client.c')
| -rw-r--r-- | drivers/misc/mei/client.c | 20 | 
1 files changed, 12 insertions, 8 deletions
diff --git a/drivers/misc/mei/client.c b/drivers/misc/mei/client.c index 391936c1aa04..b0395601c6ae 100644 --- a/drivers/misc/mei/client.c +++ b/drivers/misc/mei/client.c @@ -1541,7 +1541,7 @@ int mei_cl_irq_write(struct mei_cl *cl, struct mei_cl_cb *cb,  	rets = first_chunk ? mei_cl_tx_flow_ctrl_creds(cl) : 1;  	if (rets < 0) -		return rets; +		goto err;  	if (rets == 0) {  		cl_dbg(dev, cl, "No flow control credentials: not sending.\n"); @@ -1575,11 +1575,8 @@ int mei_cl_irq_write(struct mei_cl *cl, struct mei_cl_cb *cb,  			cb->buf.size, cb->buf_idx);  	rets = mei_write_message(dev, &mei_hdr, buf->data + cb->buf_idx); -	if (rets) { -		cl->status = rets; -		list_move_tail(&cb->list, &cmpl_list->list); -		return rets; -	} +	if (rets) +		goto err;  	cl->status = 0;  	cl->writing_state = MEI_WRITING; @@ -1587,14 +1584,21 @@ int mei_cl_irq_write(struct mei_cl *cl, struct mei_cl_cb *cb,  	cb->completed = mei_hdr.msg_complete == 1;  	if (first_chunk) { -		if (mei_cl_tx_flow_ctrl_creds_reduce(cl)) -			return -EIO; +		if (mei_cl_tx_flow_ctrl_creds_reduce(cl)) { +			rets = -EIO; +			goto err; +		}  	}  	if (mei_hdr.msg_complete)  		list_move_tail(&cb->list, &dev->write_waiting_list.list);  	return 0; + +err: +	cl->status = rets; +	list_move_tail(&cb->list, &cmpl_list->list); +	return rets;  }  /**  | 
