Tidy do_end_io. --- diff/drivers/md/dm-mpath.c 2005-01-12 19:16:51.000000000 +0000 +++ source/drivers/md/dm-mpath.c 2005-01-12 19:17:02.000000000 +0000 @@ -917,40 +917,39 @@ struct hw_handler *hwh = &m->hw_handler; unsigned err_flags = MP_FAIL_PATH; /* Default behavior */ - if (error) { - spin_lock(&m->lock); - if (!m->nr_valid_paths) { - spin_unlock(&m->lock); - return -EIO; - } - spin_unlock(&m->lock); + if (!error) + return 0; /* I/O complete */ - if (hwh->type && hwh->type->err) - err_flags = hwh->type->err(hwh, bio); - - if (err_flags & MP_FAIL_PATH) - fail_path(mpio->pgpath); - - if (err_flags & MP_BYPASS_PG) - bypass_pg(m, mpio->pgpath->pg, 1); - - if (err_flags & MP_ERROR_IO) - return -EIO; - - dm_bio_restore(&mpio->details, bio); - - /* queue for the daemon to resubmit or fail */ - spin_lock(&m->lock); - bio_list_add(&m->queued_ios, bio); - m->queue_size++; - if (!m->queue_io) - schedule_work(&m->process_queued_ios); + spin_lock(&m->lock); + if (!m->nr_valid_paths) { spin_unlock(&m->lock); - - return 1; /* io not complete */ + return -EIO; } + spin_unlock(&m->lock); - return 0; + if (hwh->type && hwh->type->err) + err_flags = hwh->type->err(hwh, bio); + + if (err_flags & MP_FAIL_PATH) + fail_path(mpio->pgpath); + + if (err_flags & MP_BYPASS_PG) + bypass_pg(m, mpio->pgpath->pg, 1); + + if (err_flags & MP_ERROR_IO) + return -EIO; + + dm_bio_restore(&mpio->details, bio); + + /* queue for the daemon to resubmit or fail */ + spin_lock(&m->lock); + bio_list_add(&m->queued_ios, bio); + m->queue_size++; + if (!m->queue_io) + schedule_work(&m->process_queued_ios); + spin_unlock(&m->lock); + + return 1; /* io not complete */ } static int multipath_end_io(struct dm_target *ti, struct bio *bio,