summaryrefslogtreecommitdiff
path: root/components/dfs
diff options
context:
space:
mode:
authorShell <[email protected]>2024-07-16 17:03:54 +0800
committerGitHub <[email protected]>2024-07-16 17:03:54 +0800
commit1b581d0755450788b161f05486ecd97ee4f88ff3 (patch)
tree82021b28bc45cf456f129abea5880c21412cca1f /components/dfs
parentd8d0af9143bc40c017aa7d9833b6a87e5d843968 (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.c14
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);
}