When paths return an ALUA state transition, do not fail those paths. The expectation is that the transition is short lived until the new ALUA state is entered. There might not be other paths in an online state to serve the request which can lead to an unexpected I/O error on the multipath device. Signed-off-by: Brian Bunker <brian@xxxxxxxxxxxxxxx> Acked-by: Krishna Kant <krishna.kant@xxxxxxxxxxxxxxx> Acked-by: Seamus Connor <sconnor@xxxxxxxxxxxxxxx> -- diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c index bced42f082b0..28948cc481f9 100644 --- a/drivers/md/dm-mpath.c +++ b/drivers/md/dm-mpath.c @@ -1652,12 +1652,12 @@ static int multipath_end_io(struct dm_target *ti, struct request *clone, if (error && blk_path_error(error)) { struct multipath *m = ti->private; - if (error == BLK_STS_RESOURCE) + if (error == BLK_STS_RESOURCE || error == BLK_STS_AGAIN) r = DM_ENDIO_DELAY_REQUEUE; else r = DM_ENDIO_REQUEUE; - if (pgpath) + if (pgpath && (error != BLK_STS_AGAIN)) fail_path(pgpath); if (!atomic_read(&m->nr_valid_paths) && -- Thanks, Brian Brian Bunker PURE Storage, Inc. brian@xxxxxxxxxxxxxxx