device-mapper-multipath/0020-RHBZ-554605-fix-manual-failover.patch
Benjamin Marzinski 814d7d2747 Refresh 0001-RH-queue-without-daemon.patch Refresh
0002-RH-path-checker.patch Modify
    0010-RH-multipath-rules-udev-changes.patch
Fix udev rules to use DM_SBIN_PATH when calling kpartx
install udev rules to /lib/udev/rules.d instead of /etc/udev/rules.d Modify
    0014-RH-add-hp_tur-checker.patch Add
    0003-for-upstream-default-configs.patch Add
    0016-RHBZ-554561-fix-init-error-msg.patch Add
    0017-RHBZ-554592-man-page-note.patch Add
    0018-RHBZ-554596-SUN-6540-config.patch Add
    0019-RHBZ-554598-fix-multipath-locking.patch Add
    0020-RHBZ-554605-fix-manual-failover.patch Add
    0021-RHBZ-548874-add-find-multipaths.patch
Added find_multipaths multipath.conf option
Added /sbin/mpathconf for simple editting of multipath.conf Add
    0022-RHBZ-557845-RHEL5-style-partitions.patch
Make kpartx deal with logical partitions like it did in RHEL5. Don't create
    a dm-device for the extended partition itself. Create the logical
    partitions on top of the dm-device for the whole disk.
2010-01-23 01:39:39 +00:00

53 lines
1.2 KiB
Diff

---
libmultipath/pgpolicies.c | 23 +++++++++++++++++++----
1 file changed, 19 insertions(+), 4 deletions(-)
Index: multipath-tools/libmultipath/pgpolicies.c
===================================================================
--- multipath-tools.orig/libmultipath/pgpolicies.c
+++ multipath-tools/libmultipath/pgpolicies.c
@@ -205,7 +205,8 @@ out:
extern int
one_path_per_group (struct multipath * mp)
{
- int i;
+ int i, j;
+ unsigned int prio;
struct path * pp;
struct pathgroup * pgp;
@@ -217,16 +218,30 @@ one_path_per_group (struct multipath * m
for (i = 0; i < VECTOR_SIZE(mp->paths); i++) {
pp = VECTOR_SLOT(mp->paths, i);
+ prio = pp->priority;
+
+ vector_foreach_slot(mp->pg, pgp, j) {
+ pp = VECTOR_SLOT(pgp->paths, 0);
+
+ if (prio > pp->priority)
+ break;
+ }
+
pgp = alloc_pathgroup();
if (!pgp)
goto out;
- if (store_pathgroup(mp->pg, pgp))
+ if (store_path(pgp->paths, VECTOR_SLOT(mp->paths, i)))
goto out;
- if (store_path(pgp->paths, pp))
- goto out;
+ if (j < VECTOR_SIZE(mp->pg)) {
+ if (!vector_insert_slot(mp->pg, j, pgp))
+ goto out;
+ } else {
+ if (store_pathgroup(mp->pg, pgp))
+ goto out;
+ }
}
free_pathvec(mp->paths, KEEP_PATHS);
mp->paths = NULL;