3 #include <libdevmapper.h>
17 pp = (struct path *)MALLOC(sizeof(struct path));
20 pp->sg_id.host_no = -1;
21 pp->sg_id.channel = -1;
22 pp->sg_id.scsi_id = -1;
30 free_path (struct path * pp)
35 if (pp->checker_context)
36 free(pp->checker_context);
45 free_pathvec (vector vec, int free_paths)
54 vector_foreach_slot(vec, pp, i)
61 alloc_pathgroup (void)
63 struct pathgroup * pgp;
65 pgp = (struct pathgroup *)MALLOC(sizeof(struct pathgroup));
70 pgp->paths = vector_alloc();
79 free_pathgroup (struct pathgroup * pgp, int free_paths)
84 free_pathvec(pgp->paths, free_paths);
89 free_pgvec (vector pgvec, int free_paths)
92 struct pathgroup * pgp;
97 vector_foreach_slot(pgvec, pgp, i)
98 free_pathgroup(pgp, free_paths);
104 alloc_multipath (void)
106 struct multipath * mpp;
108 mpp = (struct multipath *)MALLOC(sizeof(struct multipath));
117 free_multipath (struct multipath * mpp, int free_paths)
123 mpp->selector != conf->selector &&
124 (!mpp->mpe || (mpp->mpe && mpp->selector != mpp->mpe->selector)) &&
125 (!mpp->hwe || (mpp->hwe && mpp->selector != mpp->hwe->selector)))
129 (!mpp->mpe || (mpp->mpe && mpp->alias != mpp->mpe->alias)) &&
130 (mpp->wwid && mpp->alias != mpp->wwid))
134 mpp->features != conf->features &&
135 (!mpp->hwe || (mpp->hwe && mpp->features != mpp->hwe->features)))
138 if (mpp->hwhandler &&
139 mpp->hwhandler != conf->default_hwhandler &&
140 (!mpp->hwe || (mpp->hwe && mpp->hwhandler != mpp->hwe->hwhandler)))
141 FREE(mpp->hwhandler);
146 free_pathvec(mpp->paths, free_paths);
147 free_pgvec(mpp->pg, free_paths);
152 drop_multipath (vector mpvec, char * wwid, int free_paths)
155 struct multipath * mpp;
160 vector_foreach_slot (mpvec, mpp, i) {
161 if (!strncmp(mpp->wwid, wwid, WWID_SIZE)) {
162 free_multipath(mpp, free_paths);
163 vector_del_slot(mpvec, i);
170 free_multipathvec (vector mpvec, int free_paths)
173 struct multipath * mpp;
178 vector_foreach_slot (mpvec, mpp, i)
179 free_multipath(mpp, free_paths);
185 store_path (vector pathvec, struct path * pp)
187 if (!vector_alloc_slot(pathvec))
190 vector_set_slot(pathvec, pp);
196 store_pathgroup (vector pgvec, struct pathgroup * pgp)
198 if (!vector_alloc_slot(pgvec))
201 vector_set_slot(pgvec, pgp);
207 find_mp_by_minor (vector mp, int minor)
210 struct multipath * mpp;
215 vector_foreach_slot (mp, mpp, i)
216 if (mpp->dmi->minor == minor)
223 find_mp_by_wwid (vector mp, char * wwid)
226 struct multipath * mpp;
228 vector_foreach_slot (mp, mpp, i)
229 if (!strncmp(mpp->wwid, wwid, WWID_SIZE))
236 find_mp_by_alias (vector mp, char * alias)
240 struct multipath * mpp;
247 vector_foreach_slot (mp, mpp, i) {
248 if (strlen(mpp->alias) == len &&
249 !strncmp(mpp->alias, alias, len))
256 find_path_by_dev (vector pathvec, char * dev)
261 vector_foreach_slot (pathvec, pp, i)
262 if (!strcmp_chomp(pp->dev, dev))
265 condlog(3, "path %s not found in pathvec\n", dev);
270 find_path_by_devt (vector pathvec, char * dev_t)
275 vector_foreach_slot (pathvec, pp, i)
276 if (!strcmp_chomp(pp->dev_t, dev_t))
279 condlog(3, "path %s not found in pathvec\n", dev_t);