diff options
Diffstat (limited to 'debian/patches/pager-alloc0002-more.patch')
-rw-r--r-- | debian/patches/pager-alloc0002-more.patch | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/debian/patches/pager-alloc0002-more.patch b/debian/patches/pager-alloc0002-more.patch new file mode 100644 index 00000000..2427acf5 --- /dev/null +++ b/debian/patches/pager-alloc0002-more.patch @@ -0,0 +1,169 @@ +From 51782897a736fbbc271b1c924e653ec508310971 Mon Sep 17 00:00:00 2001 +From: Justus Winter <justus@gnupg.org> +Date: Sun, 24 Jul 2016 16:35:29 +0200 +Subject: [PATCH hurd 2/2] more + +--- + console/pager.c | 22 ++++++++-------------- + ext2fs/pager.c | 2 +- + fatfs/pager.c | 21 +++++++++------------ + isofs/pager.c | 18 +++++++++--------- + 4 files changed, 27 insertions(+), 36 deletions(-) + +diff --git a/console/pager.c b/console/pager.c +index 05074a7..d60935a 100644 +--- a/console/pager.c ++++ b/console/pager.c +@@ -49,12 +49,11 @@ static struct pager_requests *pager_requests; + void + pager_clear_user_data (struct user_pager_info *upi) + { +- int idx; ++ size_t idx; + + for (idx = 0; idx < upi->memobj_npages; idx++) + if (upi->memobj_pages[idx]) + vm_deallocate (mach_task_self (), upi->memobj_pages[idx], vm_page_size); +- free (upi); + } + + +@@ -148,21 +147,17 @@ user_pager_create (struct user_pager *user_pager, unsigned int npages, + error_t err; + struct user_pager_info *upi; + +- upi = calloc (1, sizeof (struct user_pager_info) +- + sizeof (vm_address_t) * npages); +- if (!upi) ++ /* XXX Are the values 1 and MEMORY_OBJECT_COPY_DELAY correct? */ ++ user_pager->pager = \ ++ pager_create_alloc (sizeof *upi + sizeof (vm_address_t) * npages, ++ pager_bucket, 1, MEMORY_OBJECT_COPY_DELAY, 0); ++ if (!user_pager->pager) + return errno; + ++ upi = pager_get_upi (user_pager->pager); + upi->memobj_npages = npages; ++ memset (upi->memobj_pages, 0, sizeof (vm_address_t) * npages); + +- /* XXX Are the values 1 and MEMORY_OBJECT_COPY_DELAY correct? */ +- user_pager->pager = pager_create (upi, pager_bucket, +- 1, MEMORY_OBJECT_COPY_DELAY, 0); +- if (!user_pager->pager) +- { +- free (upi); +- return errno; +- } + user_pager->memobj = pager_get_port (user_pager->pager); + ports_port_deref (user_pager->pager); + +@@ -182,7 +177,6 @@ user_pager_create (struct user_pager *user_pager, unsigned int npages, + VM_INHERIT_NONE); + if (err) + { +- /* UPI will be cleaned up by libpager. */ + mach_port_deallocate (mach_task_self (), user_pager->memobj); + return err; + } +diff --git a/ext2fs/pager.c b/ext2fs/pager.c +index 2ddce68..456b582 100644 +--- a/ext2fs/pager.c ++++ b/ext2fs/pager.c +@@ -1323,7 +1323,7 @@ diskfs_get_filemap (struct node *node, vm_prot_t prot) + return MACH_PORT_NULL; + } + +- upi = pager->upi; ++ upi = pager_get_upi (pager); + upi->type = FILE_DATA; + upi->node = node; + upi->max_prot = prot; +diff --git a/fatfs/pager.c b/fatfs/pager.c +index 84376bd..bef8dbe 100644 +--- a/fatfs/pager.c ++++ b/fatfs/pager.c +@@ -747,8 +747,6 @@ pager_clear_user_data (struct user_pager_info *upi) + + diskfs_nrele_light (upi->node); + } +- +- free (upi); + } + + /* This will be called when the ports library wants to drop weak +@@ -839,22 +837,21 @@ diskfs_get_filemap (struct node *node, vm_prot_t prot) + } + else + { +- struct user_pager_info *upi = +- malloc (sizeof (struct user_pager_info)); +- upi->type = FILE_DATA; +- upi->node = node; +- upi->max_prot = prot; +- diskfs_nref_light (node); ++ struct user_pager_info *upi; + node->dn->pager = +- pager_create (upi, file_pager_bucket, MAY_CACHE, +- MEMORY_OBJECT_COPY_DELAY, 0); +- if (node->dn->pager == 0) ++ pager_create_alloc (sizeof *upi, file_pager_bucket, MAY_CACHE, ++ MEMORY_OBJECT_COPY_DELAY, 0); ++ if (node->dn->pager == NULL) + { + diskfs_nrele_light (node); +- free (upi); + pthread_spin_unlock (&node_to_page_lock); + return MACH_PORT_NULL; + } ++ upi = pager_get_upi (node->dn->pager); ++ upi->type = FILE_DATA; ++ upi->node = node; ++ upi->max_prot = prot; ++ diskfs_nref_light (node); + + right = pager_get_port (node->dn->pager); + ports_port_deref (node->dn->pager); +diff --git a/isofs/pager.c b/isofs/pager.c +index b4be4e2..42cad8d 100644 +--- a/isofs/pager.c ++++ b/isofs/pager.c +@@ -128,7 +128,6 @@ pager_clear_user_data (struct user_pager_info *upi) + pthread_spin_unlock (&node2pagelock); + diskfs_nrele_light (upi->np); + } +- free (upi); + } + + void +@@ -176,19 +175,20 @@ diskfs_get_filemap (struct node *np, vm_prot_t prot) + do + if (!np->dn->fileinfo) + { +- upi = malloc (sizeof (struct user_pager_info)); +- upi->type = FILE_DATA; +- upi->np = np; +- diskfs_nref_light (np); +- upi->p = pager_create (upi, pager_bucket, 1, +- MEMORY_OBJECT_COPY_DELAY, 0); +- if (upi->p == 0) ++ struct pager *p; ++ p = pager_create_alloc (sizeof *upi, pager_bucket, 1, ++ MEMORY_OBJECT_COPY_DELAY, 0); ++ if (p == NULL) + { + diskfs_nrele_light (np); +- free (upi); + pthread_spin_unlock (&node2pagelock); + return MACH_PORT_NULL; + } ++ upi = pager_get_upi (p); ++ upi->type = FILE_DATA; ++ upi->np = np; ++ diskfs_nref_light (np); ++ upi->p = p; + np->dn->fileinfo = upi; + right = pager_get_port (np->dn->fileinfo->p); + ports_port_deref (np->dn->fileinfo->p); +-- +2.8.1 + |