diff options
| author | Shell <[email protected]> | 2024-07-16 17:03:54 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-07-16 17:03:54 +0800 |
| commit | 1b581d0755450788b161f05486ecd97ee4f88ff3 (patch) | |
| tree | 82021b28bc45cf456f129abea5880c21412cca1f /components/dfs | |
| parent | d8d0af9143bc40c017aa7d9833b6a87e5d843968 (diff) | |
[dfs] Mark dirty on unmap on shared mapping only (#9195)
[dfs] feat: Mark dirty on unmap for shared mapping
This patch optimizes the pcache varea management by refining the
conditions under which pages are marked dirty, specifically targeting
the unmap operations in the dfs_pcache component. These changes were
necessary to enhance the efficiency of page cache management.
Changes:
- Adjusted include statements in `dfs_pcache.c` for better organization.
- Modified `dfs_aspace_unmap` function:
- Added a check to ensure `varea` is not privately locked before marking a page as dirty.
- Updated `dfs_aspace_page_unmap` function:
- Added a similar check for `varea` lock status before marking a page as dirty.
Signed-off-by: Shell <[email protected]>
Diffstat (limited to 'components/dfs')
| -rw-r--r-- | components/dfs/dfs_v2/src/dfs_pcache.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/components/dfs/dfs_v2/src/dfs_pcache.c b/components/dfs/dfs_v2/src/dfs_pcache.c index 350ad1f061..6868170b9c 100644 --- a/components/dfs/dfs_v2/src/dfs_pcache.c +++ b/components/dfs/dfs_v2/src/dfs_pcache.c @@ -13,10 +13,11 @@ #define DBG_LVL DBG_WARNING #include <rtdbg.h> -#include "dfs_pcache.h" -#include "dfs_dentry.h" -#include "dfs_mnt.h" -#include "mm_page.h" +#include <dfs_pcache.h> +#include <dfs_dentry.h> +#include <dfs_mnt.h> +#include <mm_page.h> +#include <mm_private.h> #include <mmu.h> #include <tlb.h> @@ -1380,7 +1381,8 @@ int dfs_aspace_unmap(struct dfs_file *file, struct rt_varea *varea) rt_varea_unmap_page(map_varea, vaddr); - if (varea->attr == MMU_MAP_U_RWCB && page->fpos < page->aspace->vnode->size) + if (!rt_varea_is_private_locked(varea) && + page->fpos < page->aspace->vnode->size) { dfs_page_dirty(page); } @@ -1425,7 +1427,7 @@ int dfs_aspace_page_unmap(struct dfs_file *file, struct rt_varea *varea, void *v if (map && varea->aspace == map->aspace && vaddr == map->vaddr) { - if (varea->attr == MMU_MAP_U_RWCB) + if (!rt_varea_is_private_locked(varea)) { dfs_page_dirty(page); } |
