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: support ioctl() syscall for direct control to devices
[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..38258ee68d831a6a52114b4a3d42ae2819406545 100644
(file)
--- a/
lunaix-os/kernel/fs/mount.c
+++ b/
lunaix-os/kernel/fs/mount.c
@@
-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;