DragonOS icon indicating copy to clipboard operation
DragonOS copied to clipboard

缺少对于PG_UPTODATE标志的处理

Open xboHodx opened this issue 1 month ago • 0 comments

描述错误 PG_UPTODATE描述page的数据是否是新的、正确的、能立即使用的,应该在页面创建并且写入数据完成后等情况下设置标志,在数据失效、io错误等情况之后擦除标志。 DragonOS目前没有关于这个标志的处理逻辑。 在kernel/src/filesystem/page_cache.rs的create_pages函数最后面add_page之后加上 page.write_irqsave().add_flags(PageFlags::PG_UPTODATE);,之后在一些情况下就会panic

链接: https://github.com/DragonOS-Community/DragonOS/pull/1391#issuecomment-3565534078

重现步骤 在kernel/src/filesystem/page_cache.rs的create_pages函数的 self.add_page(page_index, &page); 之后加上 page.write_irqsave().add_flags(PageFlags::PG_UPTODATE); 然后执行gvisor的bad_test这个测试就会panic Image bad_test在执行test之前就panic了。

当前情况 在检测到缺页时会先走这个路径 do_read_fault → do_fault_around → fs.map_pages → filemap_map_pages 然后if page_guard.flags().contains(PageFlags::PG_UPTODATE)分支全部进不去,因为PG_UPTODATE从来没有设置过,然后就会走 do_read_fault → fs.fault → filemap_fault 把页面映射进进程空间

xboHodx avatar Nov 22 '25 06:11 xboHodx