16 pp = (struct path *)MALLOC(sizeof(struct path));
19 pp->sg_id.host_no = -1;
20 pp->sg_id.channel = -1;
21 pp->sg_id.scsi_id = -1;
28 free_path (struct path * pp)
33 if (pp->checker_context)
34 FREE(pp->checker_context);
43 free_pathvec (vector vec, int free_paths)
52 vector_foreach_slot(vec, pp, i)
59 alloc_pathgroup (void)
61 struct pathgroup * pgp;
63 pgp = (struct pathgroup *)MALLOC(sizeof(struct pathgroup));
68 pgp->paths = vector_alloc();
77 free_pathgroup (struct pathgroup * pgp, int free_paths)
82 free_pathvec(pgp->paths, free_paths);
87 free_pgvec (vector pgvec, int free_paths)
90 struct pathgroup * pgp;
95 vector_foreach_slot(pgvec, pgp, i)
96 free_pathgroup(pgp, free_paths);
102 alloc_multipath (void)
104 struct multipath * mpp;
106 mpp = (struct multipath *)MALLOC(sizeof(struct multipath));
115 free_multipath (struct multipath * mpp, int free_paths)
121 mpp->selector != conf->default_selector &&
122 (!mpp->mpe || (mpp->mpe && mpp->selector != mpp->mpe->selector)) &&
123 (!mpp->hwe || (mpp->hwe && mpp->selector != mpp->hwe->selector)))
127 (!mpp->mpe || (mpp->mpe && mpp->alias != mpp->mpe->alias)) &&
128 (mpp->wwid && mpp->alias != mpp->wwid))
132 mpp->features != conf->default_features &&
133 (!mpp->hwe || (mpp->hwe && mpp->features != mpp->hwe->features)))
136 if (mpp->hwhandler &&
137 mpp->hwhandler != conf->default_hwhandler &&
138 (!mpp->hwe || (mpp->hwe && mpp->hwhandler != mpp->hwe->hwhandler)))
139 FREE(mpp->hwhandler);
141 free_pathvec(mpp->paths, free_paths);
142 free_pgvec(mpp->pg, free_paths);
147 free_multipathvec (vector mpvec, int free_paths)
150 struct multipath * mpp;
155 vector_foreach_slot (mpvec, mpp, i)
156 free_multipath(mpp, free_paths);
162 store_path (vector pathvec, struct path * pp)
164 if (!vector_alloc_slot(pathvec))
167 vector_set_slot(pathvec, pp);
173 store_pathgroup (vector pgvec, struct pathgroup * pgp)
175 if (!vector_alloc_slot(pgvec))
178 vector_set_slot(pgvec, pgp);
184 find_mp_by_minor (vector mp, int minor)
187 struct multipath * mpp;
189 vector_foreach_slot (mp, mpp, i)
190 if (mpp->minor == minor)
197 find_mp_by_wwid (vector mp, char * wwid)
200 struct multipath * mpp;
202 vector_foreach_slot (mp, mpp, i)
203 if (!strncmp(mpp->wwid, wwid, WWID_SIZE))
210 find_mp (vector mp, char * alias)
214 struct multipath * mpp;
221 vector_foreach_slot (mp, mpp, i) {
222 if (strlen(mpp->alias) == len &&
223 !strncmp(mpp->alias, alias, len))
230 find_path_by_dev (vector pathvec, char * dev)
235 vector_foreach_slot (pathvec, pp, i)
236 if (!strcmp_chomp(pp->dev, dev))
239 condlog(3, "path %s not found in pathvec\n", dev);
244 find_path_by_devt (vector pathvec, char * dev_t)
249 vector_foreach_slot (pathvec, pp, i)
250 if (!strcmp_chomp(pp->dev_t, dev_t))
253 condlog(3, "path %s not found in pathvec\n", dev_t);