From 6ddcbbd59f0a04eee2b163930fc86d74dd2434ec Mon Sep 17 00:00:00 2001 From: Nathan Benavides-Luu Date: Mon, 1 Apr 2024 12:57:03 -0400 Subject: S5 Fixes (#6) * S5 Fixes * Remove #ifdef OLD * Fix comments for s5_get_disk_block * Add info for newp return parameter * Add stencil comment to s5_file_block_to_disk_block * Remove ifdefno --------- Co-authored-by: Ayma-n --- kernel/mm/mobj.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'kernel/mm/mobj.c') diff --git a/kernel/mm/mobj.c b/kernel/mm/mobj.c index 4b9c80f..02aced7 100644 --- a/kernel/mm/mobj.c +++ b/kernel/mm/mobj.c @@ -122,9 +122,6 @@ long mobj_get_pframe(mobj_t *o, uint64_t pagenum, long forwrite, * Create and initialize a pframe and add it to the mobj's mo_pframes list. * Upon successful return, the pframe's pf_mutex is locked. */ -#ifdef OLD -static void mobj_create_pframe(mobj_t *o, uint64_t pagenum, pframe_t **pfp) -#endif void mobj_create_pframe(mobj_t *o, uint64_t pagenum, uint64_t loc, pframe_t **pfp) { KASSERT(kmutex_owns_mutex(&o->mo_mutex)); -- cgit v1.2.3-70-g09d2 From e1e99d4adb0fcf86c9745c703b4e3ffb1261440b Mon Sep 17 00:00:00 2001 From: Nathan Benavides-Luu Date: Mon, 22 Apr 2024 20:27:07 -0400 Subject: add delete_pframe call to s5_free_block (#10) --- kernel/fs/s5fs/s5fs_subr.c | 3 +++ kernel/mm/mobj.c | 23 +++++++++++++++++++++++ 2 files changed, 26 insertions(+) (limited to 'kernel/mm/mobj.c') diff --git a/kernel/fs/s5fs/s5fs_subr.c b/kernel/fs/s5fs/s5fs_subr.c index 33b03c9..27b6a92 100644 --- a/kernel/fs/s5fs/s5fs_subr.c +++ b/kernel/fs/s5fs/s5fs_subr.c @@ -268,6 +268,9 @@ static void s5_free_block(s5fs_t *s5fs, blocknum_t blockno) else { s->s5s_free_blocks[s->s5s_nfree++] = blockno; + // only delete in this case b/c in first case we're still using that + // block as a "meta" block, just to store free block numbers + mobj_delete_pframe(&s5fs->s5f_mobj, blockno); } s5_unlock_super(s5fs); } diff --git a/kernel/mm/mobj.c b/kernel/mm/mobj.c index 02aced7..3a591f2 100644 --- a/kernel/mm/mobj.c +++ b/kernel/mm/mobj.c @@ -282,6 +282,29 @@ long mobj_free_pframe(mobj_t *o, pframe_t **pfp) return 0; } +void mobj_delete_pframe(mobj_t *o, size_t pagenum) +{ + pframe_t *pf; + list_iterate(&o->mo_pframes, p, pframe_t, pf_link) + { + if (p->pf_pagenum == pagenum) + pf = p; + } + + if (pf) + { + kmutex_lock(&pf->pf_mutex); + list_remove(&pf->pf_link); + + pf->pf_dirty = 0; + if (pf->pf_addr) + { + page_free(pf->pf_addr); + pf->pf_addr = NULL; + } + pframe_free(&pf); + } +} /* * Simply flush the memory object */ -- cgit v1.2.3-70-g09d2 From 56a09ab11e4759222354737087060d7bdb768450 Mon Sep 17 00:00:00 2001 From: Nathan Benavides-Luu Date: Mon, 22 Apr 2024 20:45:07 -0400 Subject: initialize pf in mobj_delete_pframe to NULL (#11) --- kernel/mm/mobj.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'kernel/mm/mobj.c') diff --git a/kernel/mm/mobj.c b/kernel/mm/mobj.c index 3a591f2..83addd5 100644 --- a/kernel/mm/mobj.c +++ b/kernel/mm/mobj.c @@ -284,7 +284,7 @@ long mobj_free_pframe(mobj_t *o, pframe_t **pfp) void mobj_delete_pframe(mobj_t *o, size_t pagenum) { - pframe_t *pf; + pframe_t *pf = NULL; list_iterate(&o->mo_pframes, p, pframe_t, pf_link) { if (p->pf_pagenum == pagenum) -- cgit v1.2.3-70-g09d2