summaryrefslogtreecommitdiff
path: root/debian/patches/pager-alloc0002-more.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/pager-alloc0002-more.patch')
-rw-r--r--debian/patches/pager-alloc0002-more.patch169
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
+