|
|
|
---
|
|
|
|
libmultipath/devmapper.c | 10 ++++++----
|
|
|
|
libmultipath/structs.h | 1 +
|
|
|
|
multipathd/main.c | 5 +++--
|
|
|
|
3 files changed, 10 insertions(+), 6 deletions(-)
|
|
|
|
|
|
|
|
Index: multipath-tools-130222/libmultipath/devmapper.c
|
|
|
|
===================================================================
|
|
|
|
--- multipath-tools-130222.orig/libmultipath/devmapper.c
|
|
|
|
+++ multipath-tools-130222/libmultipath/devmapper.c
|
|
|
|
@@ -358,10 +358,12 @@ dm_addmap_create (struct multipath *mpp,
|
|
|
|
extern int
|
|
|
|
dm_addmap_reload (struct multipath *mpp, char *params) {
|
|
|
|
sysfs_set_max_sectors_kb(mpp, 1);
|
|
|
|
- if (dm_addmap(DM_DEVICE_RELOAD, TGT_MPATH, mpp, params, 0, ADDMAP_RW, SKIP_KPARTX_OFF))
|
|
|
|
- return 1;
|
|
|
|
- if (errno != EROFS)
|
|
|
|
- return 0;
|
|
|
|
+ if (!mpp->force_readonly) {
|
|
|
|
+ if (dm_addmap(DM_DEVICE_RELOAD, TGT_MPATH, mpp, params, 0, ADDMAP_RW, SKIP_KPARTX_OFF))
|
|
|
|
+ return 1;
|
|
|
|
+ if (errno != EROFS)
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
return dm_addmap(DM_DEVICE_RELOAD, TGT_MPATH, mpp, params, 0, ADDMAP_RO, SKIP_KPARTX_OFF);
|
|
|
|
}
|
|
|
|
|
|
|
|
Index: multipath-tools-130222/libmultipath/structs.h
|
|
|
|
===================================================================
|
|
|
|
--- multipath-tools-130222.orig/libmultipath/structs.h
|
|
|
|
+++ multipath-tools-130222/libmultipath/structs.h
|
|
|
|
@@ -259,6 +259,7 @@ struct multipath {
|
|
|
|
int force_udev_reload;
|
|
|
|
int skip_kpartx;
|
|
|
|
int max_sectors_kb;
|
|
|
|
+ int force_readonly;
|
|
|
|
unsigned int dev_loss;
|
|
|
|
uid_t uid;
|
|
|
|
gid_t gid;
|
|
|
|
Index: multipath-tools-130222/multipathd/main.c
|
|
|
|
===================================================================
|
|
|
|
--- multipath-tools-130222.orig/multipathd/main.c
|
|
|
|
+++ multipath-tools-130222/multipathd/main.c
|
|
|
|
@@ -831,9 +831,10 @@ uev_update_path (struct uevent *uev, str
|
|
|
|
pp->mpp->wait_for_udev = 2;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
-
|
|
|
|
+ if (ro == 1)
|
|
|
|
+ pp->mpp->force_readonly = 1;
|
|
|
|
retval = reload_map(vecs, pp->mpp, 0);
|
|
|
|
-
|
|
|
|
+ pp->mpp->force_readonly = 0;
|
|
|
|
condlog(2, "%s: map %s reloaded (retval %d)",
|
|
|
|
uev->kernel, pp->mpp->alias, retval);
|
|
|
|
}
|