14 return (struct path *)MALLOC(sizeof(struct path));
18 free_path (struct path * pp)
23 if (pp->checker_context)
24 FREE(pp->checker_context);
33 free_pathvec (vector vec, int free_paths)
42 vector_foreach_slot(vec, pp, i)
49 alloc_pathgroup (void)
51 struct pathgroup * pgp;
53 pgp = (struct pathgroup *)MALLOC(sizeof(struct pathgroup));
58 pgp->paths = vector_alloc();
67 free_pathgroup (struct pathgroup * pgp, int free_paths)
72 free_pathvec(pgp->paths, free_paths);
77 free_pgvec (vector pgvec, int free_paths)
80 struct pathgroup * pgp;
85 vector_foreach_slot(pgvec, pgp, i)
86 free_pathgroup(pgp, free_paths);
92 alloc_multipath (void)
94 return (struct multipath *)MALLOC(sizeof(struct multipath));
98 free_multipath (struct multipath * mpp, int free_paths)
104 mpp->selector != conf->default_selector &&
105 (!mpp->mpe || (mpp->mpe && mpp->selector != mpp->mpe->selector)) &&
106 (!mpp->hwe || (mpp->hwe && mpp->selector != mpp->hwe->selector)))
110 (!mpp->mpe || (mpp->mpe && mpp->alias != mpp->mpe->alias)) &&
111 (mpp->wwid && mpp->alias != mpp->wwid))
115 mpp->features != conf->default_features &&
116 (!mpp->hwe || (mpp->hwe && mpp->features != mpp->hwe->features)))
119 if (mpp->hwhandler &&
120 mpp->hwhandler != conf->default_hwhandler &&
121 (!mpp->hwe || (mpp->hwe && mpp->hwhandler != mpp->hwe->hwhandler)))
122 FREE(mpp->hwhandler);
124 free_pathvec(mpp->paths, free_paths);
125 free_pgvec(mpp->pg, free_paths);
130 free_multipathvec (vector mpvec, int free_paths)
133 struct multipath * mpp;
138 vector_foreach_slot (mpvec, mpp, i)
139 free_multipath(mpp, free_paths);
145 store_path (vector pathvec, struct path * pp)
147 if (!vector_alloc_slot(pathvec))
150 vector_set_slot(pathvec, pp);
156 store_pathgroup (vector pgvec, struct pathgroup * pgp)
158 if (!vector_alloc_slot(pgvec))
161 vector_set_slot(pgvec, pgp);
167 find_mp (vector mp, char * alias)
171 struct multipath * mpp;
178 vector_foreach_slot (mp, mpp, i) {
179 if (strlen(mpp->alias) == len &&
180 !strncmp(mpp->alias, alias, len))
187 find_path_by_dev (vector pathvec, char * dev)
192 vector_foreach_slot (pathvec, pp, i)
193 if (!strcmp_chomp(pp->dev, dev))
196 condlog(3, "path %s not found in pathvec\n", dev);
201 find_path_by_devt (vector pathvec, char * dev_t)
206 vector_foreach_slot (pathvec, pp, i)
207 if (!strcmp_chomp(pp->dev_t, dev_t))
210 condlog(3, "path %s not found in pathvec\n", dev_t);