changeset 302:bc2f3d24faa9

add fs_impl_private
author menikon
date Thu, 30 Jan 2020 17:14:45 +0900
parents 7ec574dfe64f
children 5217253368ad
files src/CMakeLists.txt src/gearsTools/lib/Gears/Context/Template/XV6.pm src/impl/fs_impl.cbc src/impl/fs_impl.h src/impl/fs_impl_private.cbc
diffstat 5 files changed, 62 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/CMakeLists.txt	Thu Jan 30 14:53:02 2020 +0900
+++ b/src/CMakeLists.txt	Thu Jan 30 17:14:45 2020 +0900
@@ -129,7 +129,7 @@
 	string.c arm.c asm.S bio.c buddy.c console.cbc exec.c file.cbc fs.c log.c main.c memide.c pipe.cbc proc.cbc spinlock.cbc 
 	start.c swtch.S syscall.cbc sysfile.cbc sysproc.c trap_asm.S trap.c vm.c device/picirq.c device/timer.c device/uart.c 
   SingleLinkedStack.cbc entry.S impl/vm_impl.cbc impl/vm_impl_private.cbc
-impl/fs_impl.cbc
+impl/fs_impl.cbc impl/fs_impl_private.cbc
 )
 
 # sys_read_impl.cbc
--- a/src/gearsTools/lib/Gears/Context/Template/XV6.pm	Thu Jan 30 14:53:02 2020 +0900
+++ b/src/gearsTools/lib/Gears/Context/Template/XV6.pm	Thu Jan 30 17:14:45 2020 +0900
@@ -166,6 +166,8 @@
 typedef uint32  pde_t;
 typedef struct stat stat;
 typedef struct superblock superblock;
+typedef struct buf buf;
+typedef struct dinode dinode;
 EOFEOF
     print $out $str;
 }
--- a/src/impl/fs_impl.cbc	Thu Jan 30 14:53:02 2020 +0900
+++ b/src/impl/fs_impl.cbc	Thu Jan 30 17:14:45 2020 +0900
@@ -1,7 +1,13 @@
-#include "../../context.h"
+#include "types.h"
 #include "defs.h"
+#include "param.h"
+#include "stat.h"
+#include "mmu.h"
+#include "proc.h"
+#include "spinlock.h"
+#include "buf.h"
 #include "fs.h"
-#include "buf.h"
+#include "file.h"
 #interface "fs.dg"
 
 // ----
@@ -22,6 +28,8 @@
     fs->readsb = C_readsbfs_impl;
     fs->iinit = C_iinitfs_impl;
     fs->ialloc = C_iallocfs_impl;
+    fs_impl->allocinode = C_allocinode;
+    fs_impl->allocinode_loop = C_allocinode_loop;
     fs->iupdate = C_iupdatefs_impl;
     fs->idup = C_idupfs_impl;
     fs->ilock = C_ilockfs_impl;
@@ -51,14 +59,20 @@
     goto next(...);
 }
 
+struct {
+    struct spinlock lock;
+    struct inode inode[NINODE];
+} icache;
+
 __code iinitfs_impl(struct fs_impl* fs, __code next(...)) {
 
+     initlock(&icache.lock, "icache");
+
     goto next(...);
 }
 
 __code iallocfs_impl(struct fs_impl* fs, uint dev, short type, __code next(...)) {
-
-    goto next(...);
+    goto allocinode(fs, dev, type, next(...));
 }
 
 __code iupdatefs_impl(struct fs_impl* fs, struct inode* ip, __code next(...)) {
--- a/src/impl/fs_impl.h	Thu Jan 30 14:53:02 2020 +0900
+++ b/src/impl/fs_impl.h	Thu Jan 30 17:14:45 2020 +0900
@@ -1,7 +1,13 @@
-typedef struct fs_impl<Impl, Isa> impl fs{
+typedef struct fs_impl<Type, Isa> impl fs{
     union Data* fs_impl;
-
+    struct superblock* sb;
+    uint dev;
+    short type;
+    struct buf* bp;
+    struct dinode* dip;
+    int inum;
 
-
-
+    __code allocinode(Type* fs_impl, uint dev, short type, __code next(...));
+    __code allocinode_loop(Type* fs_impl, int inum, uint dev, struct superblock* sb, struct buf* bp, struct dinode* dip, __code next(...));
+    __code next(...);
 } fs_impl;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/impl/fs_impl_private.cbc	Thu Jan 30 17:14:45 2020 +0900
@@ -0,0 +1,31 @@
+#include "types.h"
+#include "defs.h"
+#include "param.h"
+#include "stat.h"
+#include "mmu.h"
+#include "proc.h"
+#include "spinlock.h"
+#include "buf.h"
+#include "fs.h"
+#include "file.h"
+#interface "fs_impl.h"
+
+/*
+fs_impl* createfs_impl2();
+*/
+
+__code allocinode(struct fs_impl* fs_impl, uint dev, struct superblock* sb, __code next(...)){ //:skip
+
+    readsb(dev, sb);
+
+    goto allocinode_loop(fs_impl, inum, dev, sb, bp, dip, next(...));
+
+}
+
+typedef struct buf buf;
+typedef struct dinode dinode;
+__code allocinode_loop(struct fs_impl* fs_impl, int inum, uint dev, struct superblock* sb, struct buf* bp, struct dinode* dip, __code next(...)){ //:skip
+
+    goto next(...);
+
+}