Pass mpio into map_io() --- diff/drivers/md/dm-mpath.c 2004-10-29 15:38:04.000000000 +0100 +++ source/drivers/md/dm-mpath.c 2004-10-29 15:38:10.000000000 +0100 @@ -226,13 +226,13 @@ return path; } -static int map_io(struct multipath *m, struct bio *bio, struct path **chosen) +static int map_io(struct multipath *m, struct bio *bio, struct mpath_io *mpio) { - *chosen = get_current_path(m); - if (!*chosen) + mpio->path = get_current_path(m); + if (!mpio->path) return -EIO; - bio->bi_bdev = (*chosen)->dev->bdev; + bio->bi_bdev = mpio->path->dev->bdev; return 0; } @@ -537,7 +537,7 @@ dm_bio_record(&mpio->details, bio); bio->bi_rw |= (1 << BIO_RW_FAILFAST); - r = map_io(m, bio, &mpio->path); + r = map_io(m, bio, mpio); if (r) { mempool_free(mpio, m->mpio_pool); return r; @@ -700,7 +700,7 @@ /* remap */ dm_bio_restore(&mpio->details, bio); - r = map_io(m, bio, &mpio->path); + r = map_io(m, bio, mpio); if (r) /* no paths left */ return -EIO;