Lock depth checking allows panicy prints
[akaros.git] / kern / src / pagemap.c
index 09a44a0..84fab40 100644 (file)
@@ -48,6 +48,7 @@ int pm_insert_page(struct page_map *pm, unsigned long index, struct page *page)
        if (!error) {
                page_incref(page);
                page->pg_flags |= PG_LOCKED | PG_BUFFER;
+               page->pg_sem.nr_signals = 0;            /* ensure others will block */
                page->pg_mapping = pm;
                page->pg_index = index;
                pm->pm_num_pages++;
@@ -137,11 +138,10 @@ int pm_load_page(struct page_map *pm, unsigned long index, struct page **pp)
        }
        /* if we're here, the page is locked by us, and it needs to be read in */
        assert(page->pg_mapping == pm);
+       /* Readpage will block internally, returning when it is done */
        error = pm->pm_op->readpage(pm, page);
        assert(!error);
-       /* Try to sleep on the IO.  The page will be unlocked when the IO is done */
-       /* TODO: (BLK) this assumes we never slept til we got here */
-       lock_page(page);
+       /* Unlock, since we're done with the page and it is up to date */
        unlock_page(page);
        assert(page->pg_flags & PG_UPTODATE);
        return 0;