|
@@ -765,6 +765,9 @@ static int multipath_map(struct dm_target *ti, struct bio *bio,
|
|
struct mpath_io *mpio;
|
|
struct mpath_io *mpio;
|
|
struct multipath *m = (struct multipath *) ti->private;
|
|
struct multipath *m = (struct multipath *) ti->private;
|
|
|
|
|
|
|
|
+ if (bio_barrier(bio))
|
|
|
|
+ return -EOPNOTSUPP;
|
|
|
|
+
|
|
mpio = mempool_alloc(m->mpio_pool, GFP_NOIO);
|
|
mpio = mempool_alloc(m->mpio_pool, GFP_NOIO);
|
|
dm_bio_record(&mpio->details, bio);
|
|
dm_bio_record(&mpio->details, bio);
|
|
|
|
|
|
@@ -988,6 +991,9 @@ static int do_end_io(struct multipath *m, struct bio *bio,
|
|
if ((error == -EWOULDBLOCK) && bio_rw_ahead(bio))
|
|
if ((error == -EWOULDBLOCK) && bio_rw_ahead(bio))
|
|
return error;
|
|
return error;
|
|
|
|
|
|
|
|
+ if (error == -EOPNOTSUPP)
|
|
|
|
+ return error;
|
|
|
|
+
|
|
spin_lock(&m->lock);
|
|
spin_lock(&m->lock);
|
|
if (!m->nr_valid_paths) {
|
|
if (!m->nr_valid_paths) {
|
|
if (!m->queue_if_no_path || m->suspended) {
|
|
if (!m->queue_if_no_path || m->suspended) {
|