git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' into iso-9660
[lunaix-os.git]
/
lunaix-os
/
kernel
/
fs
/
mount.c
diff --git
a/lunaix-os/kernel/fs/mount.c
b/lunaix-os/kernel/fs/mount.c
index 38258ee68d831a6a52114b4a3d42ae2819406545..ca8023805fc19435d1b6c61294721e007abf3356 100644
(file)
--- a/
lunaix-os/kernel/fs/mount.c
+++ b/
lunaix-os/kernel/fs/mount.c
@@
-2,9
+2,10
@@
#include <lunaix/fs.h>
#include <lunaix/mm/valloc.h>
#include <lunaix/process.h>
#include <lunaix/fs.h>
#include <lunaix/mm/valloc.h>
#include <lunaix/process.h>
+#include <lunaix/spike.h>
#include <lunaix/types.h>
#include <lunaix/types.h>
-st
atic st
ruct llist_header all_mnts = { .next = &all_mnts, .prev = &all_mnts };
+struct llist_header all_mnts = { .next = &all_mnts, .prev = &all_mnts };
struct v_mount*
vfs_create_mount(struct v_mount* parent, struct v_dnode* mnt_point)
struct v_mount*
vfs_create_mount(struct v_mount* parent, struct v_dnode* mnt_point)
@@
-18,12
+19,12
@@
vfs_create_mount(struct v_mount* parent, struct v_dnode* mnt_point)
llist_append(&all_mnts, &mnt->list);
mutex_init(&mnt->lock);
llist_append(&all_mnts, &mnt->list);
mutex_init(&mnt->lock);
- mnt_mkbusy(parent);
mnt->parent = parent;
mnt->mnt_point = mnt_point;
mnt->super_block = mnt_point->super_block;
if (parent) {
mnt->parent = parent;
mnt->mnt_point = mnt_point;
mnt->super_block = mnt_point->super_block;
if (parent) {
+ mnt_mkbusy(parent);
mutex_lock(&mnt->parent->lock);
llist_append(&parent->submnts, &mnt->sibmnts);
mutex_unlock(&mnt->parent->lock);
mutex_lock(&mnt->parent->lock);
llist_append(&parent->submnts, &mnt->sibmnts);
mutex_unlock(&mnt->parent->lock);
@@
-68,30
+69,23
@@
__vfs_do_unmount(struct v_mount* mnt)
void
mnt_mkbusy(struct v_mount* mnt)
{
void
mnt_mkbusy(struct v_mount* mnt)
{
- while (mnt) {
- mutex_lock(&mnt->lock);
- mnt->busy_counter++;
- mutex_unlock(&mnt->lock);
-
- mnt = mnt->parent;
- }
+ mutex_lock(&mnt->lock);
+ mnt->busy_counter++;
+ mutex_unlock(&mnt->lock);
}
void
mnt_chillax(struct v_mount* mnt)
{
}
void
mnt_chillax(struct v_mount* mnt)
{
- while (mnt) {
- mutex_lock(&mnt->lock);
- mnt->busy_counter--;
- mutex_unlock(&mnt->lock);
-
- mnt = mnt->parent;
- }
+ mutex_lock(&mnt->lock);
+ mnt->busy_counter--;
+ mutex_unlock(&mnt->lock);
}
int
vfs_mount_root(const char* fs_name, struct device* device)
{
}
int
vfs_mount_root(const char* fs_name, struct device* device)
{
+ extern struct v_dnode* vfs_sysroot;
int errno = 0;
if (vfs_sysroot->mnt && (errno = vfs_unmount_at(vfs_sysroot))) {
return errno;
int errno = 0;
if (vfs_sysroot->mnt && (errno = vfs_unmount_at(vfs_sysroot))) {
return errno;