laying out the iso9660 structure definitions
[lunaix-os.git] / lunaix-os / kernel / fs / mount.c
index 486d6954152126b3ddad1e24fdd5a08c3bb00be7..c1e9784bef642dfc4302445bf2a1e0b172b0665a 100644 (file)
@@ -4,7 +4,7 @@
 #include <lunaix/process.h>
 #include <lunaix/types.h>
 
 #include <lunaix/process.h>
 #include <lunaix/types.h>
 
-static struct 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;
 }