Syscall debugging helper
[akaros.git] / kern / src / ext2fs.c
index 94e8467..1a0b7bb 100644 (file)
@@ -462,7 +462,7 @@ void *ext2_get_ino_metablock(struct inode *inode, unsigned long ino_block)
  * the 2x and 3x walks are jacked up. */
 void ext2_print_ino_blocks(struct inode *inode)
 {
-       printk("Inode %08p, Size: %d, 512B 'blocks': %d\n-------------\n", inode,
+       printk("Inode %p, Size: %d, 512B 'blocks': %d\n-------------\n", inode,
               inode->i_size, inode->i_blocks);
        for (int i = 0; i < inode->i_blocks * (inode->i_sb->s_blocksize / 512); i++)
                printk("# %03d, Block %03d\n", i, ext2_find_inoblock(inode, i));
@@ -521,7 +521,7 @@ void ext2_check_sb(struct ext2_sb *e2sb, struct ext2_block_group *bg,
                sum_blks += le16_to_cpu(bg[i].bg_free_blocks_cnt);
                sum_inodes += le16_to_cpu(bg[i].bg_free_inodes_cnt);
                if (print) {
-                       printk("*** BG %d at %08p\n", i, &bg[i]);
+                       printk("*** BG %d at %p\n", i, &bg[i]);
                        printk("Block bitmap:%8d\n", le32_to_cpu(bg[i].bg_block_bitmap));
                        printk("Inode bitmap:%8d\n", le32_to_cpu(bg[i].bg_inode_bitmap));
                        printk("Inode table: %8d\n", le32_to_cpu(bg[i].bg_inode_table));
@@ -704,7 +704,7 @@ int ext2_readpage(struct page_map *pm, struct page *page)
        struct block_request *breq;
        void *eobh;
 
-       assert(page->pg_flags & PG_BUFFER);
+       atomic_or(&page->pg_flags, PG_BUFFER);
        retval = ext2_mappage(pm, page);
        if (retval)
                return retval;
@@ -731,7 +731,7 @@ int ext2_readpage(struct page_map *pm, struct page *page)
                } else {
                        memset(bh->bh_buffer, 0, pm->pm_host->i_sb->s_blocksize);
                        bh->bh_flags |= BH_DIRTY;
-                       bh->bh_page->pg_flags |= PG_DIRTY;
+                       atomic_or(&bh->bh_page->pg_flags, PG_DIRTY);
                }
        }
        retval = bdev_submit_request(bdev, breq);
@@ -748,12 +748,17 @@ int ext2_readpage(struct page_map *pm, struct page *page)
        if (eof_off)
                memset(eof_off + page2kva(page), 0, PGSIZE - eof_off);
        /* Now the page is up to date */
-       page->pg_flags |= PG_UPTODATE;
+       atomic_or(&page->pg_flags, PG_UPTODATE);
        /* Useful debugging.  Put one higher up if the page is not getting mapped */
        //print_pageinfo(page);
        return 0;
 }
 
+int ext2_writepage(struct page_map *pm, struct page *page)
+{
+       return -1;
+}
+
 /* Super Operations */
 
 /* Creates and initializes a new inode.  FS specific, yet inode-generic fields
@@ -1448,6 +1453,7 @@ int ext2_check_flags(int flags)
 /* Redeclaration and initialization of the FS ops structures */
 struct page_map_operations ext2_pm_op = {
        ext2_readpage,
+       ext2_writepage,
 };
 
 struct super_operations ext2_s_op = {