summaryrefslogtreecommitdiff
path: root/debian/patches/0003-ext2fs-use-a-hard-reference-for-file-pagers.patch
blob: c24ea2cae2ec9904831aec76be4b812c38c5cf98 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
From 4a47f4e02439d19d39534203fba7217a809d220f Mon Sep 17 00:00:00 2001
From: Justus Winter <4winter@informatik.uni-hamburg.de>
Date: Sat, 31 May 2014 08:44:59 +0200
Subject: [PATCH 3/8] ext2fs: use a hard reference for file pagers

When a file pager is created, a reference is added to the associated
struct node.  Previously, a weak reference was used.

A weak refeference requires that we might give it up on request.
There is no such mechanism here. Instead, we give it up when the pager
is destroyed.

* ext2fs/pager.c (pager_clear_user_data): Use a hard reference instead.
(diskfs_get_filemap): Likewise.
---
 ext2fs/pager.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/ext2fs/pager.c b/ext2fs/pager.c
index ce5bc6d..e00857a 100644
--- a/ext2fs/pager.c
+++ b/ext2fs/pager.c
@@ -811,7 +811,7 @@ pager_clear_user_data (struct user_pager_info *upi)
 	upi->node->dn->pager = 0;
       pthread_spin_unlock (&node_to_page_lock);
 
-      diskfs_nrele_light (upi->node);
+      diskfs_nrele (upi->node);
     }
 
   free (upi);
@@ -1278,13 +1278,13 @@ diskfs_get_filemap (struct node *node, vm_prot_t prot)
 	  upi->type = FILE_DATA;
 	  upi->node = node;
 	  upi->max_prot = prot;
-	  diskfs_nref_light (node);
+	  diskfs_nref (node);
 	  node->dn->pager =
 	    pager_create (upi, file_pager_bucket, MAY_CACHE,
 			  MEMORY_OBJECT_COPY_DELAY, 0);
 	  if (node->dn->pager == 0)
 	    {
-	      diskfs_nrele_light (node);
+	      diskfs_nrele (node);
 	      free (upi);
 	      pthread_spin_unlock (&node_to_page_lock);
 	      return MACH_PORT_NULL;
-- 
2.0.0.rc2