Home | History | Annotate | Download | only in amd

Lines Matching refs:mf

64 dup_mntfs(mntfs *mf)
66 if (mf->mf_refc == 0) {
67 if (mf->mf_cid)
68 untimeout(mf->mf_cid);
69 mf->mf_cid = 0;
71 mf->mf_refc++;
73 return mf;
78 init_mntfs(mntfs *mf, am_ops *ops, am_opts *mo, char *mp, char *info, char *auto_opts, char *mopts, char *remopts)
80 mf->mf_ops = ops;
81 mf->mf_fsflags = ops->nfs_fs_flags;
82 mf->mf_fo = 0;
84 mf->mf_fo = copy_opts(mo);
86 mf->mf_mount = xstrdup(mp);
87 mf->mf_info = xstrdup(info);
88 mf->mf_auto = xstrdup(auto_opts);
89 mf->mf_mopts = xstrdup(mopts);
90 mf->mf_remopts = xstrdup(remopts);
91 mf->mf_loopdev = NULL;
92 mf->mf_refc = 1;
93 mf->mf_flags = 0;
94 mf->mf_error = -1;
95 mf->mf_cid = 0;
96 mf->mf_private = NULL;
97 mf->mf_prfree = NULL;
100 mf->mf_server = (*ops->ffserver) (mf);
102 mf->mf_server = NULL;
109 mntfs *mf = ALLOC(struct mntfs);
111 init_mntfs(mf, ops, mo, mp, info, auto_opts, mopts, remopts);
112 ins_que(&mf->mf_q, &mfhead);
115 return mf;
123 mntfs *mf;
127 ITER(mf, mntfs, &mfhead) {
135 if (STREQ(mf->mf_mount, mp) &&
136 ((mf->mf_flags & MFF_MOUNTED && !(mf->mf_fsflags & FS_DIRECT))
137 || (STREQ(mf->mf_info, info) && mf->mf_ops == ops))) {
146 if (mf->mf_ops != &amfs_error_ops)
148 return dup_mntfs(mf);
151 dlog("mf->mf_flags = %#x", mf->mf_flags);
153 if ((mf->mf_flags & MFF_RESTART) && amd_state < Finishing) {
157 dlog("Restarting filesystem %s", mf->mf_mount);
165 if (mf->mf_ops == &amfs_toplvl_ops) {
166 mf->mf_ops = ops;
167 mf->mf_info = strealloc(mf->mf_info, info);
168 ops->mounted(mf); /* XXX: not right, but will do for now */
171 return mf;
174 if (!(mf->mf_flags & (MFF_MOUNTED | MFF_MOUNTING | MFF_UNMOUNTING))) {
176 mf->mf_flags &= ~MFF_ERROR;
177 mf->mf_error = -1;
178 mf->mf_auto = strealloc(mf->mf_auto, auto_opts);
179 mf->mf_mopts = strealloc(mf->mf_mopts, mopts);
180 mf->mf_remopts = strealloc(mf->mf_remopts, remopts);
181 mf->mf_info = strealloc(mf->mf_info, info);
183 if (mf->mf_private && mf->mf_prfree) {
184 mf->mf_prfree(mf->mf_private);
185 mf->mf_private = NULL;
188 fs = ops->ffserver ? (*ops->ffserver) (mf) : (fserver *) NULL;
189 if (mf->mf_server)
190 free_srvr(mf->mf_server);
191 mf->mf_server = fs;
193 return dup_mntfs(mf);
194 } /* end of "if (STREQ(mf-> ..." */
205 mntfs *mf = locate_mntfs(ops, mo, mp, info, auto_opts, mopts, remopts);
206 if (mf)
207 return mf;
231 uninit_mntfs(mntfs *mf)
233 if (mf->mf_fo) {
234 free_opts(mf->mf_fo);
235 XFREE(mf->mf_fo);
237 XFREE(mf->mf_auto);
238 XFREE(mf->mf_mopts);
239 XFREE(mf->mf_remopts);
240 XFREE(mf->mf_info);
241 if (mf->mf_private && mf->mf_prfree)
242 (*mf->mf_prfree) (mf->mf_private);
244 XFREE(mf->mf_mount);
249 if (mf->mf_server)
250 free_srvr(mf->mf_server);
255 if (mf->mf_cid) {
256 untimeout(mf->mf_cid);
257 mf->mf_cid = 0;
265 mntfs *mf = v;
267 rem_que(&mf->mf_q);
272 uninit_mntfs(mf);
273 XFREE(mf);
292 mntfs *mf;
294 mf = AM_FIRST(mntfs, &mfhead);
295 while (mf != HEAD(mntfs, &mfhead)) {
296 mntfs *mf2 = mf;
297 mf = NEXT(mntfs, mf);
324 mntfs *mf = (mntfs *) arg;
327 mf->mf_mount, mf->mf_ops->fs_type, mf->mf_refc, mf->mf_flags);
334 if (mf->mf_refc <= 0) {
336 mf->mf_mount, mf->mf_refc, mf->mf_flags);
341 if (mf->mf_refc == 1 && mf->mf_flags & MFF_RSTKEEP) {
343 mf->mf_mount, mf->mf_refc, mf->mf_flags);
347 if (--mf->mf_refc == 0) {
348 if (mf->mf_flags & MFF_MOUNTED) {
350 mf->mf_flags &= ~MFF_MOUNTED;
355 quoted = strchr(mf->mf_info, ' ') != 0; /* cheap */
358 mf->mf_info,
360 mf->mf_error ? "discard" : "unmount",
361 mf->mf_ops->fs_type, mf->mf_mount);
364 if (mf->mf_fsflags & FS_DISCARD) {
365 dlog("Immediately discarding mntfs for %s", mf->mf_mount);
366 discard_mntfs(mf);
370 if (mf->mf_flags & MFF_RESTART) {
371 dlog("Discarding remount hook for %s", mf->mf_mount);
374 mf->mf_mount, mf->mf_ops->fs_type);
376 if (mf->mf_flags & (MFF_MOUNTED | MFF_MOUNTING | MFF_UNMOUNTING))
377 dlog("mntfs reference for %s still active", mf->mf_mount);
378 mf->mf_cid = timeout(ALLOWED_MOUNT_TIME, discard_mntfs, (voidp) mf);
385 realloc_mntfs(mntfs *mf, am_ops *ops, am_opts *mo, char *mp, char *info, char *auto_opts, char *mopts, char *remopts)
389 if (mf->mf_refc == 1 &&
390 mf->mf_flags & MFF_RESTART &&
391 STREQ(mf->mf_mount, mp)) {
396 return mf;
403 if (mf->mf_ops != &amfs_error_ops &&
404 (mf->mf_flags & MFF_MOUNTED) &&
405 !FSRV_ISDOWN(mf->mf_server)) {
406 return mf;
410 free_mntfs(mf);