summaryrefslogtreecommitdiff
path: root/debian/patches
diff options
context:
space:
mode:
authorJustus Winter <4winter@informatik.uni-hamburg.de>2016-02-07 17:02:55 +0100
committerJustus Winter <4winter@informatik.uni-hamburg.de>2016-02-07 17:02:55 +0100
commitd304948783b731feaa73585070380976c9956540 (patch)
tree072ec05a6585f0fc7488a561ba9a95ce5769b226 /debian/patches
parent6b6cd9080b92e663129c9a356094ce7fc30942a3 (diff)
add patch series
Diffstat (limited to 'debian/patches')
-rw-r--r--debian/patches/flavio0001-Use-refcount_t-for-peropen-reference-counting-in-lib.patch167
-rw-r--r--debian/patches/flavio0002-Remove-libfshelp-trans.h-and-libfshelp-locks.h.patch148
-rw-r--r--debian/patches/series2
3 files changed, 317 insertions, 0 deletions
diff --git a/debian/patches/flavio0001-Use-refcount_t-for-peropen-reference-counting-in-lib.patch b/debian/patches/flavio0001-Use-refcount_t-for-peropen-reference-counting-in-lib.patch
new file mode 100644
index 00000000..f1842e7e
--- /dev/null
+++ b/debian/patches/flavio0001-Use-refcount_t-for-peropen-reference-counting-in-lib.patch
@@ -0,0 +1,167 @@
+From afea5285b0e40b68f97b47f0f0edc471b554fb34 Mon Sep 17 00:00:00 2001
+From: Flavio Cruz <flaviocruz@gmail.com>
+Date: Sun, 7 Feb 2016 01:33:00 -0500
+Subject: [PATCH hurd 1/2] Use refcount_t for peropen reference counting in
+ libnetfs.
+
+* libnetfs/netfs.h: Use refcount_t.
+* libnetfs/make-peropen.c: Initialize to 1 with refcount_init just like in libdiskfs.
+* libnetfs/make-protid.c: Don't increment the count here. Do it like libdiskfs.
+* libnetfs/io-duplicate.c: Add refcount_ref since netfs_make_protid no longer increments the refcount.
+* libnetfs/io-reauthenticate.c: Likewise.
+* libnetfs/io-restrict-auth.c: Likewise.
+* libnetfs/release-peropen.c: Dereference without locking.
+---
+ libnetfs/io-duplicate.c | 1 +
+ libnetfs/io-reauthenticate.c | 2 ++
+ libnetfs/io-restrict-auth.c | 2 ++
+ libnetfs/make-peropen.c | 2 +-
+ libnetfs/make-protid.c | 1 -
+ libnetfs/netfs.h | 2 +-
+ libnetfs/release-peropen.c | 38 ++++++++++++++++++--------------------
+ 7 files changed, 25 insertions(+), 23 deletions(-)
+
+diff --git a/libnetfs/io-duplicate.c b/libnetfs/io-duplicate.c
+index b2c3a3a..263f9e8 100644
+--- a/libnetfs/io-duplicate.c
++++ b/libnetfs/io-duplicate.c
+@@ -34,6 +34,7 @@ netfs_S_io_duplicate (struct protid *user,
+ if (err)
+ return err;
+
++ refcount_ref (&user->po->refcnt);
+ pthread_mutex_lock (&user->po->np->lock);
+ newpi = netfs_make_protid (user->po, clone);
+ *newport = ports_get_right (newpi);
+diff --git a/libnetfs/io-reauthenticate.c b/libnetfs/io-reauthenticate.c
+index 8ff4182..b2d4a44 100644
+--- a/libnetfs/io-reauthenticate.c
++++ b/libnetfs/io-reauthenticate.c
+@@ -34,12 +34,14 @@ netfs_S_io_reauthenticate (struct protid *user, mach_port_t rend_port)
+ /* This routine must carefully ignore EINTR because we
+ are a simpleroutine, so callers won't know to restart. */
+
++ refcount_ref (&user->po->refcnt);
+ pthread_mutex_lock (&user->po->np->lock);
+ do
+ newpi = netfs_make_protid (user->po, 0);
+ while (! newpi && errno == EINTR);
+ if (! newpi)
+ {
++ refcount_deref (&user->po->refcnt);
+ pthread_mutex_unlock (&user->po->np->lock);
+ return errno;
+ }
+diff --git a/libnetfs/io-restrict-auth.c b/libnetfs/io-restrict-auth.c
+index 0c3403d..79b7d09 100644
+--- a/libnetfs/io-restrict-auth.c
++++ b/libnetfs/io-restrict-auth.c
+@@ -43,6 +43,7 @@ netfs_S_io_restrict_auth (struct protid *user,
+ return err;
+
+ pthread_mutex_lock (&user->po->np->lock);
++ refcount_ref (&user->po->refcnt);
+ newpi = netfs_make_protid (user->po, new_user);
+ if (newpi)
+ {
+@@ -52,6 +53,7 @@ netfs_S_io_restrict_auth (struct protid *user,
+ }
+ else
+ {
++ refcount_deref (&user->po->refcnt);
+ pthread_mutex_unlock (&user->po->np->lock);
+ iohelp_free_iouser (new_user);
+ err = ENOMEM;
+diff --git a/libnetfs/make-peropen.c b/libnetfs/make-peropen.c
+index f7be58b..413e914 100644
+--- a/libnetfs/make-peropen.c
++++ b/libnetfs/make-peropen.c
+@@ -31,7 +31,7 @@ netfs_make_peropen (struct node *np, int flags, struct peropen *context)
+
+ po->filepointer = 0;
+ po->lock_status = LOCK_UN;
+- po->refcnt = 0;
++ refcount_init (&po->refcnt, 1);
+ po->openstat = flags;
+ po->np = np;
+ po->path = NULL;
+diff --git a/libnetfs/make-protid.c b/libnetfs/make-protid.c
+index bf18283..995ac1e 100644
+--- a/libnetfs/make-protid.c
++++ b/libnetfs/make-protid.c
+@@ -36,7 +36,6 @@ netfs_make_protid (struct peropen *po, struct iouser *cred)
+ if (errno)
+ return 0;
+
+- po->refcnt++;
+ pi->po = po;
+ pi->user = cred;
+ pi->shared_object = MACH_PORT_NULL;
+diff --git a/libnetfs/netfs.h b/libnetfs/netfs.h
+index fbe2c60..3f94ccd 100644
+--- a/libnetfs/netfs.h
++++ b/libnetfs/netfs.h
+@@ -51,7 +51,7 @@ struct peropen
+ {
+ loff_t filepointer;
+ int lock_status;
+- int refcnt;
++ refcount_t refcnt;
+ int openstat;
+
+ struct node *np;
+diff --git a/libnetfs/release-peropen.c b/libnetfs/release-peropen.c
+index c206b43..01af97d 100644
+--- a/libnetfs/release-peropen.c
++++ b/libnetfs/release-peropen.c
+@@ -24,29 +24,27 @@
+ void
+ netfs_release_peropen (struct peropen *po)
+ {
++ if (refcount_deref (&po->refcnt) > 0)
++ return;
++
+ pthread_mutex_lock (&po->np->lock);
+- if (--po->refcnt)
+- pthread_mutex_unlock (&po->np->lock);
+- else
+- {
+- if (po->root_parent)
+- mach_port_deallocate (mach_task_self (), po->root_parent);
++ if (po->root_parent)
++ mach_port_deallocate (mach_task_self (), po->root_parent);
+
+- if (po->shadow_root && po->shadow_root != po->np)
+- {
+- pthread_mutex_lock (&po->shadow_root->lock);
+- netfs_nput (po->shadow_root);
+- }
+- if (po->shadow_root_parent)
+- mach_port_deallocate (mach_task_self (), po->shadow_root_parent);
++ if (po->shadow_root && po->shadow_root != po->np)
++ {
++ pthread_mutex_lock (&po->shadow_root->lock);
++ netfs_nput (po->shadow_root);
++ }
++ if (po->shadow_root_parent)
++ mach_port_deallocate (mach_task_self (), po->shadow_root_parent);
+
+- if (po->lock_status != LOCK_UN)
+- fshelp_acquire_lock (&po->np->userlock, &po->lock_status,
+- &po->np->lock, LOCK_UN);
++ if (po->lock_status != LOCK_UN)
++ fshelp_acquire_lock (&po->np->userlock, &po->lock_status,
++ &po->np->lock, LOCK_UN);
+
+- netfs_nput (po->np);
++ netfs_nput (po->np);
+
+- free (po->path);
+- free (po);
+- }
++ free (po->path);
++ free (po);
+ }
+--
+2.1.4
+
diff --git a/debian/patches/flavio0002-Remove-libfshelp-trans.h-and-libfshelp-locks.h.patch b/debian/patches/flavio0002-Remove-libfshelp-trans.h-and-libfshelp-locks.h.patch
new file mode 100644
index 00000000..23dc9699
--- /dev/null
+++ b/debian/patches/flavio0002-Remove-libfshelp-trans.h-and-libfshelp-locks.h.patch
@@ -0,0 +1,148 @@
+From fb08495170d43a9382e508c9f65f884576c4aa7c Mon Sep 17 00:00:00 2001
+From: Flavio Cruz <flaviocruz@gmail.com>
+Date: Sun, 7 Feb 2016 02:04:34 -0500
+Subject: [PATCH hurd 2/2] Remove libfshelp/trans.h and libfshelp/locks.h.
+
+* libfshelp/locks.h: Remove.
+* libfshelp/trans.h: Remove. struct transboot is not used anywhere.
+* libfshelp/fetch-root.c: Adjust includes.
+* libfshelp/lock-acquire.c: Likewise.
+* libfshelp/lock-init.c: Likewise.
+---
+ libfshelp/fetch-root.c | 9 ++++++---
+ libfshelp/lock-acquire.c | 5 ++++-
+ libfshelp/lock-init.c | 4 +++-
+ libfshelp/locks.h | 28 ----------------------------
+ libfshelp/trans.h | 32 --------------------------------
+ 5 files changed, 13 insertions(+), 65 deletions(-)
+ delete mode 100644 libfshelp/locks.h
+ delete mode 100644 libfshelp/trans.h
+
+diff --git a/libfshelp/fetch-root.c b/libfshelp/fetch-root.c
+index 712c11f..1b6739e 100644
+--- a/libfshelp/fetch-root.c
++++ b/libfshelp/fetch-root.c
+@@ -18,11 +18,14 @@
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+-#include "trans.h"
+-#include <unistd.h>
+ #include <assert.h>
+-#include <string.h>
+ #include <hurd/fsys.h>
++#include <hurd/ports.h>
++#include <stdlib.h>
++#include <string.h>
++#include <unistd.h>
++
++#include "fshelp.h"
+
+ error_t
+ fshelp_fetch_root (struct transbox *box, void *cookie,
+diff --git a/libfshelp/lock-acquire.c b/libfshelp/lock-acquire.c
+index f68c30a..07df428 100644
+--- a/libfshelp/lock-acquire.c
++++ b/libfshelp/lock-acquire.c
+@@ -19,7 +19,10 @@
+
+ /* Written by Michael I. Bushnell. */
+
+-#include "locks.h"
++#include <assert.h>
++#include <sys/file.h>
++
++#include "fshelp.h"
+
+ #define EWOULDBLOCK EAGAIN /* XXX */
+
+diff --git a/libfshelp/lock-init.c b/libfshelp/lock-init.c
+index 21fb0d7..bb1f1f8 100644
+--- a/libfshelp/lock-init.c
++++ b/libfshelp/lock-init.c
+@@ -19,7 +19,9 @@
+
+ /* Written by Michael I. Bushnell. */
+
+-#include "locks.h"
++#include <sys/file.h>
++
++#include "fshelp.h"
+
+ /* Initialize a lock box. */
+ void
+diff --git a/libfshelp/locks.h b/libfshelp/locks.h
+deleted file mode 100644
+index a950f61..0000000
+--- a/libfshelp/locks.h
++++ /dev/null
+@@ -1,28 +0,0 @@
+-/*
+- Copyright (C) 1994 Free Software Foundation
+-
+-This file is part of the GNU Hurd.
+-
+-The GNU Hurd is free software; you can redistribute it and/or modify
+-it under the terms of the GNU General Public License as published by
+-the Free Software Foundation; either version 2, or (at your option)
+-any later version.
+-
+-The GNU Hurd is distributed in the hope that it will be useful,
+-but WITHOUT ANY WARRANTY; without even the implied warranty of
+-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-GNU General Public License for more details.
+-
+-You should have received a copy of the GNU General Public License
+-along with the GNU Hurd; see the file COPYING. If not, write to
+-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+-
+-/* Written by Michael I. Bushnell. */
+-
+-#include <mach.h>
+-#include <hurd.h>
+-#include <pthread.h>
+-#include <hurd/ports.h>
+-#include "fshelp.h"
+-#include <sys/file.h>
+-#include <assert.h>
+diff --git a/libfshelp/trans.h b/libfshelp/trans.h
+deleted file mode 100644
+index a9ea648..0000000
+--- a/libfshelp/trans.h
++++ /dev/null
+@@ -1,32 +0,0 @@
+-/*
+- Copyright (C) 1994 Free Software Foundation
+-
+- This program is free software; you can redistribute it and/or
+- modify it under the terms of the GNU General Public License as
+- published by the Free Software Foundation; either version 2, or (at
+- your option) any later version.
+-
+- This program is distributed in the hope that it will be useful, but
+- WITHOUT ANY WARRANTY; without even the implied warranty of
+- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+- General Public License for more details.
+-
+- You should have received a copy of the GNU General Public License
+- along with this program; if not, write to the Free Software
+- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+-
+-#include <mach.h>
+-#include <hurd.h>
+-#include <pthread.h>
+-#include <hurd/ports.h>
+-#include "fshelp.h"
+-
+-struct transboot
+-{
+- struct port_info pi;
+- file_t node;
+- struct trans_link *link;
+-};
+-
+-pthread_spinlock_t _fshelp_translistlock;
+-struct trans_link *_fshelp_translist;
+--
+2.1.4
+
diff --git a/debian/patches/series b/debian/patches/series
index ddbfc2a4..420351ef 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -39,3 +39,5 @@ translators-list0004-add-iteration.patch
nodeihash0001-xxx-fix-node-iteration.patch
fix-devnode0001-devnode-fix-falling-back-to-the-kernel-driver.patch
gpg0001-trans-add-transparent-GnuPG-translator.patch
+flavio0001-Use-refcount_t-for-peropen-reference-counting-in-lib.patch
+flavio0002-Remove-libfshelp-trans.h-and-libfshelp-locks.h.patch