From 91ae51f3853a1fa17aed7193f4fb95096c4f68b5 Mon Sep 17 00:00:00 2001 From: Matheus Date: Thu, 20 Aug 2026 23:35:54 -0300 Subject: [PATCH] writeback: redirty page on error --- kernel-src/mm/writeback.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/kernel-src/mm/writeback.c b/kernel-src/mm/writeback.c index 4cd81f31..4155a0a9 100644 --- a/kernel-src/mm/writeback.c +++ b/kernel-src/mm/writeback.c @@ -113,7 +113,6 @@ int mm_cache_sync_vnode(vnode_t *vnode) { VOP_LOCK(vnode); - // TODO: remark as dirty on error int error = 0; if ((__atomic_load_n(&page->flags, __ATOMIC_RELAXED) & PAGE_FLAGS_TRUNCATED) == 0) error = VOP_PUTPAGE(vnode, page->offset, page); @@ -121,6 +120,8 @@ int mm_cache_sync_vnode(vnode_t *vnode) { VOP_UNLOCK(vnode); if (first_error == 0) first_error = error; + if (error) + __atomic_fetch_or(&page->flags, PAGE_FLAGS_DIRTY, __ATOMIC_RELEASE); int flags = __atomic_and_fetch(&page->flags, ~PAGE_FLAGS_SYNCING, __ATOMIC_ACQUIRE); if (flags & PAGE_FLAGS_DIRTY) { @@ -130,6 +131,11 @@ int mm_cache_sync_vnode(vnode_t *vnode) { } else { mm_release_page(mm_get_page_address(page)); } + + if (error) { + MUTEX_RELEASE(&vnode->writeback_mutex); + return first_error; + } } }