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
feat: simple read/write lock implementation
[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 7b83757e91b26740ac43426bbda421934a226750..ff8d46b5bb91a3a1ca8e32e9bdf28a7c26087592 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)
@@
-145,12
+145,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
+167,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;
}
@@
-233,7
+234,7
@@
__DEFINE_LXSYSCALL4(int,
// By our convention.
// XXX could we do better?
// By our convention.
// XXX could we do better?
- struct device* device = (struct device*)dev->data;
+ struct device* device = (struct device*)dev->
inode->
data;
if (!(dev->inode->itype & VFS_IFVOLDEV) || !device) {
errno = ENOTDEV;
if (!(dev->inode->itype & VFS_IFVOLDEV) || !device) {
errno = ENOTDEV;