parlib: Expand our printf hacks
[akaros.git] / kern / src / kfs.c
index 2bee781..eef0470 100644 (file)
@@ -47,11 +47,13 @@ struct kmem_cache *kfs_i_kcache;
 
 static void kfs_init(void)
 {
-       kfs_i_kcache = kmem_cache_create("kfs_ino_info", sizeof(struct kfs_i_info),
-                                        __alignof__(struct kfs_i_info), 0, 0, 0);
+       kfs_i_kcache = kmem_cache_create("kfs_ino_info",
+                                        sizeof(struct kfs_i_info),
+                                        __alignof__(struct kfs_i_info), 0,
+                                        NULL, 0, 0, NULL);
 }
 
-/* Creates the SB (normally would read in from disc and create).  Passes it's
+/* Creates the SB (normally would read in from disc and create).  Passes its
  * ref out to whoever consumes this.  Returns 0 on failure.
  * TODO: consider pulling out more of the FS-independent stuff, if possible.
  * There are only two things, but the pain in the ass is that you'd need to read
@@ -116,6 +118,12 @@ int kfs_readpage(struct page_map *pm, struct page *page)
        struct kfs_i_info *k_i_info = (struct kfs_i_info*)
                                      pm->pm_host->i_fs_info;
        uintptr_t begin = (size_t)k_i_info->filestart + pg_idx_byte;
+
+       /* Pretend that we blocked while filing this page.  This catches a lot of
+        * bugs.  It does slightly slow down the kernel, but it's only when filling
+        * the page cache, and considering we are using a RAMFS, you shouldn't
+        * measure things that actually rely on KFS's performance. */
+       kthread_usleep(1);
        /* If we're beyond the initial start point, we just need a zero page.  This
         * is for a hole or for extending a file (even though it won't be saved).
         * Otherwise, we want the data from KFS, being careful to not copy from
@@ -527,7 +535,7 @@ int kfs_d_release(struct dentry *dentry)
        return -1;
 }
 
-/* Called when the dentry loses it's inode (becomes "negative") */
+/* Called when the dentry loses its inode (becomes "negative") */
 void kfs_d_iput(struct dentry *dentry, struct inode *inode)
 { // default, call i_put to release the inode object
 }
@@ -803,7 +811,7 @@ struct file_operations kfs_f_op_sym = {
 static int __add_kfs_entry(struct dentry *parent, char *path,
                            struct cpio_bin_hdr *c_bhdr)
 {
-       char *first_slash = strchr(path, '/');  
+       char *first_slash = strchr(path, '/');
        char dir[MAX_FILENAME_SZ + 1];  /* room for the \0 */
        size_t dirname_sz;                              /* not counting the \0 */
        struct dentry *dentry = 0;