From 1ed64a8674d3359822831d4ac9a016c04d3e8b14 Mon Sep 17 00:00:00 2001 From: Sergey Bugaev Date: Fri, 21 May 2021 13:00:51 +0300 Subject: fatfs: Return read-only memory objects when appropriate --- fatfs/pager.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'fatfs/pager.c') diff --git a/fatfs/pager.c b/fatfs/pager.c index c1da666f..d60c2eca 100644 --- a/fatfs/pager.c +++ b/fatfs/pager.c @@ -832,7 +832,7 @@ diskfs_get_filemap (struct node *node, vm_prot_t prot) pager = diskfs_node_disknode (node)->pager; if (pager) { - right = pager_get_port (pager); + ports_port_ref (pager); pager_get_upi (pager)->max_prot |= prot; } else @@ -854,15 +854,22 @@ diskfs_get_filemap (struct node *node, vm_prot_t prot) /* A weak reference for being part of the node. */ ports_port_ref_weak (pager); - - right = pager_get_port (pager); - ports_port_deref (pager); } pthread_spin_unlock (&node_to_page_lock); - mach_port_insert_right (mach_task_self (), right, right, - MACH_MSG_TYPE_MAKE_SEND); + if (prot & VM_PROT_WRITE) + right = ports_get_send_right (pager); + else + { + right = pager_get_ro_port (pager); + mach_port_mod_refs (mach_task_self (), right, + MACH_PORT_RIGHT_SEND, +1); + } + + ports_port_deref (pager); + + assert_backtrace (MACH_PORT_VALID (right)); return right; } -- cgit v1.2.3