READA errors failing with EWOULDBLOCK/EAGAIN do not constitute a valid reason for failing the path; this lead to erratic errors on DM multipath devices. This error can be safely propagated upwards without failing the path. Acked-by: Kevin Corry <kevcorry@xxxxxxxxxx> Acked-by: Jens Axboe <axboe@xxxxxxx> Signed-off-by: Lars Marowsky-Bree <lmb@xxxxxxx> --- linux-2.6.12-rc6-mm1.orig/drivers/md/dm-mpath.c 2005-06-08 12:51:02.741055000 +0200 +++ linux-2.6.12-rc6-mm1/drivers/md/dm-mpath.c 2005-06-08 12:57:55.757828867 +0200 @@ -985,6 +985,9 @@ if (!error) return 0; /* I/O complete */ + if ((error == -EWOULDBLOCK) && bio_rw_ahead(bio)) + return error; + spin_lock(&m->lock); if (!m->nr_valid_paths) { if (!m->queue_if_no_path || m->suspended) { -- High Availability & Clustering SUSE Labs, Research and Development SUSE LINUX Products GmbH - A Novell Business -- Charles Darwin "Ignorance more frequently begets confidence than does knowledge"