xboHodx
xboHodx
- 新增fadvise64系统调用实现 - 添加页面缓存范围写回和驱逐功能 - 改进预读机制,支持随机访问模式 - 扩展文件访问模式标志管理
fdget检查文件是否是O_PATH打开的,fdget_raw不检查 linu源码如下 ```c /* * Lightweight file lookup - no refcnt increment if fd table isn't shared. * * You can use this instead of fget if you satisfy all...
**描述错误** 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 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 →...