Commit 32e85a0d authored by Julian Wiedmann's avatar Julian Wiedmann Committed by David S. Miller

s390/qeth: keep cmd alive after IO completion

Current code releases the cmd struct after its initial IO has completed.
Any reply processing is done independently, using a separate qeth_reply
struct.
In preparation for merging the cmd and reply structs together, take an
additional reference on the cmd object so that it stays around all the
way until qeth_send_control_data() returns.
Signed-off-by: default avatarJulian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 7c5f8ffb
......@@ -1742,6 +1742,9 @@ static int qeth_send_control_data(struct qeth_card *card,
qeth_enqueue_reply(card, reply);
/* This pairs with iob->callback, and keeps the iob alive after IO: */
qeth_get_cmd(iob);
QETH_CARD_TEXT(card, 6, "noirqpnd");
spin_lock_irq(get_ccwdev_lock(channel->ccwdev));
rc = ccw_device_start_timeout(channel->ccwdev, __ccw_from_cmd(iob),
......@@ -1752,11 +1755,10 @@ static int qeth_send_control_data(struct qeth_card *card,
CARD_DEVID(card), rc);
QETH_CARD_TEXT_(card, 2, " err%d", rc);
qeth_dequeue_reply(card, reply);
qeth_put_reply(reply);
qeth_put_cmd(iob);
atomic_set(&channel->irq_pending, 0);
wake_up(&card->wait_q);
return rc;
goto out;
}
timeout = wait_for_completion_interruptible_timeout(&reply->received,
......@@ -1777,7 +1779,10 @@ static int qeth_send_control_data(struct qeth_card *card,
if (!rc)
rc = reply->rc;
out:
qeth_put_reply(reply);
qeth_put_cmd(iob);
return rc;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment