path->fail_count needs to be initialized to non-zero, or a failed path will never actually be failed. Set to 1 for now, but this number can be increased if we don't want to fail the path on the very first I/O error. --- diff/drivers/md/dm-mpath.c 2004-01-13 15:03:58.000000000 -0600 +++ source/drivers/md/dm-mpath.c 2004-01-13 15:08:30.000000000 -0600 @@ -17,6 +17,8 @@ #include <linux/time.h> #include <asm/atomic.h> +#define MPATH_FAIL_COUNT 1 + /* Path properties */ struct path { struct list_head list; @@ -67,7 +69,7 @@ if (path) { memset(path, 0, sizeof(*path)); - atomic_set(&path->fail_count, 0); + atomic_set(&path->fail_count, MPATH_FAIL_COUNT); atomic_set(&path->fail_total, 0); init_MUTEX_LOCKED(&path->test_lock); /* resume will unlock */