Skip to content

Commit

Permalink
s390/qdio: fix double return code evaluation
Browse files Browse the repository at this point in the history
qdio sometimes checks return codes twice. First with the ccw device's
lock held and then a 2nd time after the lock is released. Simplify
the code by releasing the lock earlier and unify the return code
evaluation.

Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Reviewed-by: Ursula Braun <ubraun@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
  • Loading branch information
Sebastian Ott authored and Martin Schwidefsky committed Aug 8, 2016
1 parent a48ed86 commit ddebf66
Showing 1 changed file with 3 additions and 8 deletions.
11 changes: 3 additions & 8 deletions drivers/s390/cio/qdio_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1375,13 +1375,10 @@ int qdio_establish(struct qdio_initialize *init_data)
ccw_device_set_options_mask(cdev, 0);

rc = ccw_device_start(cdev, &irq_ptr->ccw, QDIO_DOING_ESTABLISH, 0, 0);
spin_unlock_irq(get_ccwdev_lock(cdev));
if (rc) {
DBF_ERROR("%4x est IO ERR", irq_ptr->schid.sch_no);
DBF_ERROR("rc:%4x", rc);
}
spin_unlock_irq(get_ccwdev_lock(cdev));

if (rc) {
mutex_unlock(&irq_ptr->setup_mutex);
qdio_shutdown(cdev, QDIO_FLAG_CLEANUP_USING_CLEAR);
return rc;
Expand Down Expand Up @@ -1447,14 +1444,12 @@ int qdio_activate(struct ccw_device *cdev)

rc = ccw_device_start(cdev, &irq_ptr->ccw, QDIO_DOING_ACTIVATE,
0, DOIO_DENY_PREFETCH);
spin_unlock_irq(get_ccwdev_lock(cdev));
if (rc) {
DBF_ERROR("%4x act IO ERR", irq_ptr->schid.sch_no);
DBF_ERROR("rc:%4x", rc);
}
spin_unlock_irq(get_ccwdev_lock(cdev));

if (rc)
goto out;
}

if (is_thinint_irq(irq_ptr))
tiqdio_add_input_queues(irq_ptr);
Expand Down

0 comments on commit ddebf66

Please sign in to comment.