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
laying out the iso9660 structure definitions
[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 486d6954152126b3ddad1e24fdd5a08c3bb00be7..c1e9784bef642dfc4302445bf2a1e0b172b0665a 100644
(file)
--- a/
lunaix-os/kernel/fs/mount.c
+++ b/
lunaix-os/kernel/fs/mount.c
@@
-4,7
+4,7
@@
#include <lunaix/process.h>
#include <lunaix/types.h>
#include <lunaix/process.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)
@@
-68,25
+68,17
@@
__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
}
int
@@
-145,12
+137,12
@@
vfs_mount_at(const char* fs_name,
}
struct v_mount* parent_mnt = mnt_point->mnt;
}
struct v_mount* parent_mnt = mnt_point->mnt;
- struct v_superblock
* sb = vfs_sb_alloc()
;
+ struct v_superblock
*sb = vfs_sb_alloc(), *old_sb = mnt_point->super_block
;
sb->dev = device;
sb->dev = device;
+ mnt_point->super_block = sb;
int errno = 0;
if (!(errno = fs->mount(sb, mnt_point))) {
int errno = 0;
if (!(errno = fs->mount(sb, mnt_point))) {
- mnt_point->super_block = sb;
sb->fs = fs;
sb->root = mnt_point;
sb->fs = fs;
sb->root = mnt_point;
@@
-167,6
+159,7
@@
vfs_mount_at(const char* fs_name,
return errno;
cleanup:
return errno;
cleanup:
+ mnt_point->super_block = old_sb;
vfs_sb_free(sb);
return errno;
}
vfs_sb_free(sb);
return errno;
}