X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/642855f81fd03b9fd6540ac99c665b57b4b38cc8..2236410f4582ab45ae8c384dd6eeeef5d10aab15:/lunaix-os/kernel/fs/mount.c diff --git a/lunaix-os/kernel/fs/mount.c b/lunaix-os/kernel/fs/mount.c index 12e1d4b..084a400 100644 --- a/lunaix-os/kernel/fs/mount.c +++ b/lunaix-os/kernel/fs/mount.c @@ -137,7 +137,7 @@ vfs_mount_at(const char* fs_name, return ENOTBLK; } - if (mnt_point->inode && !(mnt_point->inode->itype & VFS_IFDIR)) { + if (mnt_point->inode && (mnt_point->inode->itype & F_MFILE)) { return ENOTDIR; } @@ -170,7 +170,7 @@ vfs_mount_at(const char* fs_name, goto cleanup; } - kprintf("mount: dev=%s, fs=%s, mode=%d\n", dev_name, fs_name, options); + kprintf("mount: dev=%s, fs=%s, mode=%d", dev_name, fs_name, options); mnt_point->mnt->flags = options; } else { @@ -180,11 +180,11 @@ vfs_mount_at(const char* fs_name, return errno; cleanup: - kprintf(KERROR "mount: dev=%s, fs=%s, mode=%d, err=%d\n", - dev_name, - fs_name, - options, - errno); + ERROR("mount: dev=%s, fs=%s, mode=%d, err=%d", + dev_name, + fs_name, + options, + errno); mnt_point->super_block = old_sb; vfs_sb_free(sb); return errno; @@ -234,12 +234,11 @@ __DEFINE_LXSYSCALL4(int, int, options) { - struct v_dnode *dev, *mnt; + struct v_dnode *dev = NULL, *mnt = NULL; int errno = 0; - if ((errno = vfs_walk(__current->cwd, source, &dev, NULL, 0))) { - goto done; - } + // It is fine if source is not exist, as some mounting don't require it + vfs_walk(__current->cwd, source, &dev, NULL, 0); if ((errno = vfs_walk(__current->cwd, target, &mnt, NULL, 0))) { goto done; @@ -252,11 +251,14 @@ __DEFINE_LXSYSCALL4(int, // By our convention. // XXX could we do better? - struct device* device = (struct device*)dev->inode->data; + struct device* device = NULL; - if (!(dev->inode->itype & VFS_IFVOLDEV) || !device) { - errno = ENOTDEV; - goto done; + if (dev) { + if (!(dev->inode->itype & VFS_IFVOLDEV)) { + errno = ENOTDEV; + goto done; + } + device = (struct device*)dev->inode->data; } errno = vfs_mount_at(fstype, device, mnt, options);