]> git.ipfire.org Git - ipfire-3.x.git/blob - multipath-tools/patches/0083-RHBZ-1080055-orphan-paths-on-reload.patch
krb5: Update to 1.14.4
[ipfire-3.x.git] / multipath-tools / patches / 0083-RHBZ-1080055-orphan-paths-on-reload.patch
1 ---
2 libmultipath/structs_vec.c | 31 +++++++++++++++++++++++++++----
3 multipathd/main.c | 4 ++++
4 2 files changed, 31 insertions(+), 4 deletions(-)
5
6 Index: multipath-tools-130222/libmultipath/structs_vec.c
7 ===================================================================
8 --- multipath-tools-130222.orig/libmultipath/structs_vec.c
9 +++ multipath-tools-130222/libmultipath/structs_vec.c
10 @@ -280,12 +280,38 @@ update_multipath_status (struct multipat
11 return 0;
12 }
13
14 +void sync_paths(struct multipath *mpp, vector pathvec)
15 +{
16 + struct path *pp;
17 + struct pathgroup *pgp;
18 + int found, i, j;
19 +
20 + vector_foreach_slot (mpp->paths, pp, i) {
21 + found = 0;
22 + vector_foreach_slot(mpp->pg, pgp, j) {
23 + if (find_slot(pgp->paths, (void *)pp) != -1) {
24 + found = 1;
25 + break;
26 + }
27 + }
28 + if (!found) {
29 + condlog(3, "%s dropped path %s", mpp->alias, pp->dev);
30 + vector_del_slot(mpp->paths, i--);
31 + orphan_path(pp);
32 + }
33 + }
34 + update_mpp_paths(mpp, pathvec);
35 + vector_foreach_slot (mpp->paths, pp, i)
36 + pp->mpp = mpp;
37 +}
38 +
39 extern int
40 update_multipath_strings (struct multipath *mpp, vector pathvec)
41 {
42 if (!mpp)
43 return 1;
44
45 + update_mpp_paths(mpp, pathvec);
46 condlog(4, "%s: %s", mpp->alias, __FUNCTION__);
47
48 free_multipath_attributes(mpp);
49 @@ -294,6 +320,7 @@ update_multipath_strings (struct multipa
50
51 if (update_multipath_table(mpp, pathvec))
52 return 1;
53 + sync_paths(mpp, pathvec);
54
55 if (update_multipath_status(mpp))
56 return 1;
57 @@ -494,13 +521,9 @@ int update_multipath (struct vectors *ve
58 return 2;
59 }
60
61 - free_pgvec(mpp->pg, KEEP_PATHS);
62 - mpp->pg = NULL;
63 -
64 if (__setup_multipath(vecs, mpp, reset))
65 return 1; /* mpp freed in setup_multipath */
66
67 - adopt_paths(vecs->pathvec, mpp, 0);
68 /*
69 * compare checkers states with DM states
70 */
71 Index: multipath-tools-130222/multipathd/main.c
72 ===================================================================
73 --- multipath-tools-130222.orig/multipathd/main.c
74 +++ multipath-tools-130222/multipathd/main.c
75 @@ -1152,6 +1152,10 @@ check_path (struct vectors * vecs, struc
76 pp->dev);
77 pp->dmstate = PSTATE_UNDEF;
78 }
79 + /* if update_multipath_strings orphaned the path, quit early */
80 + if (!pp->mpp)
81 + return;
82 +
83 pp->chkrstate = newstate;
84 if (newstate != pp->state) {
85 int oldstate = pp->state;