Lines Matching refs:mnt

54     struct dfs_mnt *mnt = rt_calloc(1, sizeof(struct dfs_mnt));  in dfs_mnt_create()  local
55 if (mnt) in dfs_mnt_create()
59 mnt->fullpath = rt_strdup(path); in dfs_mnt_create()
60 rt_list_init(&mnt->sibling); in dfs_mnt_create()
61 rt_list_init(&mnt->child); in dfs_mnt_create()
62 mnt->flags |= MNT_IS_ALLOCED; in dfs_mnt_create()
63 rt_atomic_store(&(mnt->ref_count), 1); in dfs_mnt_create()
70 return mnt; in dfs_mnt_create()
85 int dfs_mnt_insert(struct dfs_mnt* mnt, struct dfs_mnt* child) in dfs_mnt_insert() argument
89 if (mnt == RT_NULL) in dfs_mnt_insert()
92 mnt = dfs_mnt_lookup(child->fullpath); in dfs_mnt_insert()
93 if (mnt == RT_NULL || (strcmp(child->fullpath, "/") == 0)) in dfs_mnt_insert()
96 mnt = child; in dfs_mnt_insert()
97 mnt->flags |= MNT_IS_LOCKED; in dfs_mnt_insert()
107 _root_mnt = dfs_mnt_ref(mnt); in dfs_mnt_insert()
108 mnt->parent = dfs_mnt_ref(mnt); in dfs_mnt_insert()
109 mnt->flags |= MNT_IS_ADDLIST; in dfs_mnt_insert()
115 _root_mnt = dfs_mnt_ref(mnt); in dfs_mnt_insert()
120 if (mnt) in dfs_mnt_insert()
123 if (child != mnt) in dfs_mnt_insert()
126 rt_list_insert_before(&mnt->child, &child->sibling); in dfs_mnt_insert()
131 child->parent = dfs_mnt_ref(mnt); in dfs_mnt_insert()
150 int dfs_mnt_remove(struct dfs_mnt* mnt) in dfs_mnt_remove() argument
154 if (rt_list_isempty(&mnt->child)) in dfs_mnt_remove()
156 rt_list_remove(&mnt->sibling); in dfs_mnt_remove()
157 if (mnt->parent) in dfs_mnt_remove()
160 rt_atomic_sub(&(mnt->parent->ref_count), 1); in dfs_mnt_remove()
167 LOG_W("remove a mnt point:%s with child.", mnt->fullpath); in dfs_mnt_remove()
186 static struct dfs_mnt *_dfs_mnt_dev_lookup(struct dfs_mnt *mnt, rt_device_t dev_id) in _dfs_mnt_dev_lookup() argument
190 rt_list_for_each_entry(iter, &mnt->child, sibling) in _dfs_mnt_dev_lookup()
225 struct dfs_mnt *mnt = _root_mnt; in dfs_mnt_dev_lookup() local
228 if (mnt) in dfs_mnt_dev_lookup()
232 if (mnt->dev_id == dev_id) in dfs_mnt_dev_lookup()
235 return mnt; in dfs_mnt_dev_lookup()
238 ret = _dfs_mnt_dev_lookup(mnt, dev_id); in dfs_mnt_dev_lookup()
260 struct dfs_mnt *mnt = _root_mnt; in dfs_mnt_lookup() local
263 if (mnt) in dfs_mnt_lookup()
265 int mnt_len = rt_strlen(mnt->fullpath); in dfs_mnt_lookup()
268 if ((strncmp(mnt->fullpath, fullpath, mnt_len) == 0) && in dfs_mnt_lookup()
271 while (!rt_list_isempty(&mnt->child)) in dfs_mnt_lookup()
273 rt_list_for_each_entry(iter, &mnt->child, sibling) in dfs_mnt_lookup()
279 mnt = iter; in dfs_mnt_lookup()
284 if (mnt != iter) break; in dfs_mnt_lookup()
289 mnt = RT_NULL; in dfs_mnt_lookup()
293 if (mnt) in dfs_mnt_lookup()
295 LOG_D("mnt_lookup: %s path @ mount point %p", fullpath, mnt); in dfs_mnt_lookup()
296 DLOG(note, "mnt", "found mnt(%s)", mnt->fs_ops->name); in dfs_mnt_lookup()
300 return mnt; in dfs_mnt_lookup()
315 struct dfs_mnt* dfs_mnt_ref(struct dfs_mnt* mnt) in dfs_mnt_ref() argument
317 if (mnt) in dfs_mnt_ref()
319 rt_atomic_add(&(mnt->ref_count), 1); in dfs_mnt_ref()
320 … DLOG(note, "mnt", "mnt(%s),ref_count=%d", mnt->fs_ops->name, rt_atomic_load(&(mnt->ref_count))); in dfs_mnt_ref()
323 return mnt; in dfs_mnt_ref()
338 int dfs_mnt_unref(struct dfs_mnt *mnt) in dfs_mnt_unref() argument
343 if (mnt) in dfs_mnt_unref()
345 ref_count = rt_atomic_sub(&(mnt->ref_count), 1) - 1; in dfs_mnt_unref()
351 if (mnt->flags & MNT_IS_UMOUNT) in dfs_mnt_unref()
353 mnt->fs_ops->umount(mnt); in dfs_mnt_unref()
355 RT_OBJECT_HOOKLIST_CALL(dfs_mnt_umnt, (mnt)); in dfs_mnt_unref()
359 rt_free(mnt->fullpath); in dfs_mnt_unref()
360 mnt->fullpath = RT_NULL; in dfs_mnt_unref()
363 DLOG(msg, "mnt", "mnt", DLOG_MSG, "free mnt(%s)", mnt->fs_ops->name); in dfs_mnt_unref()
364 rt_free(mnt); in dfs_mnt_unref()
370 … DLOG(note, "mnt", "mnt(%s),ref_count=%d", mnt->fs_ops->name, rt_atomic_load(&(mnt->ref_count))); in dfs_mnt_unref()
390 int dfs_mnt_setflags(struct dfs_mnt *mnt, int flags) in dfs_mnt_setflags() argument
396 mnt->flags |= MNT_RDONLY; in dfs_mnt_setflags()
398 dfs_pcache_clean(mnt); in dfs_mnt_setflags()
418 int dfs_mnt_destroy(struct dfs_mnt* mnt) in dfs_mnt_destroy() argument
422 if (mnt) in dfs_mnt_destroy()
424 if (mnt->flags & MNT_IS_MOUNTED) in dfs_mnt_destroy()
426 mnt->flags &= ~MNT_IS_MOUNTED; in dfs_mnt_destroy()
427 mnt->flags |= MNT_IS_UMOUNT; in dfs_mnt_destroy()
429 if (mnt->flags & MNT_IS_ADDLIST) in dfs_mnt_destroy()
431 dfs_mnt_remove(mnt); in dfs_mnt_destroy()
435 dfs_mnt_unref(mnt); in dfs_mnt_destroy()
458 …ic struct dfs_mnt* _dfs_mnt_foreach(struct dfs_mnt *mnt, struct dfs_mnt* (*func)(struct dfs_mnt *m… in _dfs_mnt_foreach() argument
462 if (mnt) in _dfs_mnt_foreach()
464 ret = func(mnt, parameter); in _dfs_mnt_foreach()
467 if (!rt_list_isempty(&mnt->child)) in _dfs_mnt_foreach()
470 rt_list_for_each_entry(iter, &mnt->child, sibling) in _dfs_mnt_foreach()
502 static struct dfs_mnt* _mnt_cmp_devid(struct dfs_mnt *mnt, void *device) in _mnt_cmp_devid() argument
507 if (dev && mnt) in _mnt_cmp_devid()
509 if (mnt->dev_id == dev) in _mnt_cmp_devid()
511 ret = mnt; in _mnt_cmp_devid()
531 struct dfs_mnt* mnt; in dfs_mnt_get_mounted_path() local
534 mnt = _dfs_mnt_foreach(_root_mnt, _mnt_cmp_devid, device); in dfs_mnt_get_mounted_path()
537 if (mnt) path = mnt->fullpath; in dfs_mnt_get_mounted_path()
556 static struct dfs_mnt* _mnt_dump(struct dfs_mnt *mnt, void *parameter) in _mnt_dump() argument
558 if (mnt) in _mnt_dump()
560 if (mnt->dev_id) in _mnt_dump()
563mnt->fs_ops->name, mnt->dev_id->parent.name, mnt->fullpath, rt_atomic_load(&(mnt->ref_count))); in _mnt_dump()
568 mnt->fs_ops->name, mnt->fullpath, rt_atomic_load(&(mnt->ref_count))); in _mnt_dump()
591 static struct dfs_mnt* _mnt_cmp_path(struct dfs_mnt* mnt, void *parameter) in _mnt_cmp_path() argument
596 if (strncmp(mnt->fullpath, fullpath, rt_strlen(fullpath)) == 0) in _mnt_cmp_path()
598 ret = mnt; in _mnt_cmp_path()
620 rt_bool_t dfs_mnt_has_child_mnt(struct dfs_mnt *mnt, const char* fullpath) in dfs_mnt_has_child_mnt() argument
624 if (mnt && fullpath) in dfs_mnt_has_child_mnt()
629 m = _dfs_mnt_foreach(mnt, _mnt_cmp_path, (void*)fullpath); in dfs_mnt_has_child_mnt()
654 int dfs_mnt_list(struct dfs_mnt *mnt) in dfs_mnt_list() argument
656 if (!mnt) mnt = _root_mnt; in dfs_mnt_list()
660 _dfs_mnt_foreach(mnt, _mnt_dump, RT_NULL); in dfs_mnt_list()
677 int dfs_mnt_foreach(struct dfs_mnt* (*func)(struct dfs_mnt *mnt, void *parameter), void *parameter) in dfs_mnt_foreach() argument