From: Hannes Reinecke Subject: Disable partitions scan for multipathed devices References: bnc#402922,bnc#514767 Patch-mainline: not yet, When multipath devices are being used as disks for VM Guests any partition scanning / setup should be done within the VM Guest, not from host. So we need to switch off partitions scanning via kpartx there. For this I've implemented a new feature 'no_partitions' which just serves as a notifier to kpartx to _not_ create partitions on these devices. Patch ported to SLES11. [Update jeffm: Upstream commit 518257b13276 switched to using a flags field for multipath state, so we can use that now.] Signed-off-by: Hannes Reinecke --- drivers/md/dm-mpath.c | 8 ++++++++ 1 file changed, 8 insertions(+) --- a/drivers/md/dm-mpath.c +++ b/drivers/md/dm-mpath.c @@ -126,6 +126,7 @@ static void activate_path(struct work_st #define MPATHF_PG_INIT_DISABLED 4 /* pg_init is not currently allowed */ #define MPATHF_PG_INIT_REQUIRED 5 /* pg_init needs calling? */ #define MPATHF_PG_INIT_DELAY_RETRY 6 /* Delay pg_init retry? */ +#define MPATHF_NO_PARTITIONS 31 /* Don't scan partition table */ /*----------------------------------------------- * Allocation routines @@ -859,6 +860,10 @@ static int parse_features(struct dm_arg_ continue; } + if (!strcasecmp(arg_name, "no_partitions")) { + set_bit(MPATHF_NO_PARTITIONS, &m->flags); + continue; + } if (!strcasecmp(arg_name, "pg_init_retries") && (argc >= 1)) { r = dm_read_arg(_args + 1, as, &m->pg_init_retries, &ti->error); @@ -1454,13 +1459,16 @@ static void multipath_status(struct dm_t DMEMIT("%u ", test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags) + (m->pg_init_retries > 0) * 2 + (m->pg_init_delay_msecs != DM_PG_INIT_DELAY_DEFAULT) * 2 + + test_bit(MPATHF_NO_PARTITIONS, &m->flags) + test_bit(MPATHF_RETAIN_ATTACHED_HW_HANDLER, &m->flags) + (m->queue_mode != DM_TYPE_REQUEST_BASED) * 2); if (test_bit(MPATHF_QUEUE_IF_NO_PATH, &m->flags)) DMEMIT("queue_if_no_path "); if (m->pg_init_retries) DMEMIT("pg_init_retries %u ", m->pg_init_retries); + if (test_bit(MPATHF_NO_PARTITIONS, &m->flags)) + DMEMIT("no_partitions "); if (m->pg_init_delay_msecs != DM_PG_INIT_DELAY_DEFAULT) DMEMIT("pg_init_delay_msecs %u ", m->pg_init_delay_msecs); if (test_bit(MPATHF_RETAIN_ATTACHED_HW_HANDLER, &m->flags))