summaryrefslogtreecommitdiff
path: root/debian/patches
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches')
-rw-r--r--debian/patches/flavio0001-Use-libihash-to-store-directory-entries-in-ftpfs.patch385
-rw-r--r--debian/patches/series1
2 files changed, 0 insertions, 386 deletions
diff --git a/debian/patches/flavio0001-Use-libihash-to-store-directory-entries-in-ftpfs.patch b/debian/patches/flavio0001-Use-libihash-to-store-directory-entries-in-ftpfs.patch
deleted file mode 100644
index d942ac2d..00000000
--- a/debian/patches/flavio0001-Use-libihash-to-store-directory-entries-in-ftpfs.patch
+++ /dev/null
@@ -1,385 +0,0 @@
-From 3e1d2756a0a373d91155d0e4e557f2e805f37e3b Mon Sep 17 00:00:00 2001
-From: Flavio Cruz <flaviocruz@gmail.com>
-Date: Sun, 7 Feb 2016 15:53:53 -0500
-Subject: [PATCH hurd] Use libihash to store directory entries in ftpfs.
-
-* ftpfs/ftpfs.h: Add dir_locp for each directory entry and replace the table with a libihash table.
-* ftpfs/dir.c: Modify the code to use libihash. Remove several functions such as rehash and insert.
----
- ftpfs/dir.c | 158 +++++++++++++++++-----------------------------------------
- ftpfs/ftpfs.h | 17 ++-----
- 2 files changed, 50 insertions(+), 125 deletions(-)
-
-diff --git a/ftpfs/dir.c b/ftpfs/dir.c
-index be20b3d..96424c2 100644
---- a/ftpfs/dir.c
-+++ b/ftpfs/dir.c
-@@ -30,70 +30,29 @@
- void
- free_entry (struct ftpfs_dir_entry *e)
- {
-- assert (! e->self_p); /* We should only free deleted nodes. */
-+ assert (e->deleted);
- free (e->name);
- if (e->symlink_target)
- free (e->symlink_target);
- free (e);
- }
--
--/* Put the directory entry E into the hash table HTABLE, of length HTABLE_LEN. */
--static void
--insert (struct ftpfs_dir_entry *e,
-- struct ftpfs_dir_entry **htable, size_t htable_len)
-+
-+/* Calculate NAME_PTR's hash value. */
-+static hurd_ihash_key_t
-+ihash_hash (const void *name_ptr)
- {
-- struct ftpfs_dir_entry **t = &htable[e->hv % htable_len];
-- if (*t)
-- (*t)->self_p = &e->next;
-- e->next = *t;
-- e->self_p = t;
-- *t = e;
-+ const char *name = (const char *) name_ptr;
-+ return (hurd_ihash_key_t) hurd_ihash_hash32 (name, strlen (name), 0);
- }
-
--/* Replace DIR's hashtable with a new one of length NEW_LEN, retaining all
-- existing entries. */
--static error_t
--rehash (struct ftpfs_dir *dir, size_t new_len)
-+/* Compare two names which are used as keys. */
-+static int
-+ihash_compare (const void *key1, const void *key2)
- {
-- int i;
-- size_t old_len = dir->htable_len;
-- struct ftpfs_dir_entry **old_htable = dir->htable;
-- struct ftpfs_dir_entry **new_htable =
-- malloc (new_len * sizeof (struct ftpfs_dir_entry *));
--
-- if (! new_htable)
-- return ENOMEM;
--
-- memset (new_htable, 0, new_len * sizeof(struct ftpfs_dir_entry *));
--
-- for (i = 0; i < old_len; i++)
-- while (old_htable[i])
-- {
-- struct ftpfs_dir_entry *e = old_htable[i];
--
-- /* Remove E from the old table (don't bother to fixup
-- e->next->self_p). */
-- old_htable[i] = e->next;
--
-- insert (e, new_htable, new_len);
-- }
--
-- free (old_htable);
-+ const char *name1 = (const char *) key1;
-+ const char *name2 = (const char *) key2;
-
-- dir->htable = new_htable;
-- dir->htable_len = new_len;
--
-- return 0;
--}
--
--/* Calculate NAME's hash value. */
--static size_t
--hash (const char *name)
--{
-- size_t hv = 0;
-- while (*name)
-- hv = ((hv << 5) + *name++) & 0xFFFFFF;
-- return hv;
-+ return strcmp (name1, name2) == 0;
- }
-
- /* Lookup NAME in DIR and return its entry. If there is no such entry, and
-@@ -103,23 +62,14 @@ hash (const char *name)
- struct ftpfs_dir_entry *
- lookup (struct ftpfs_dir *dir, const char *name, int add)
- {
-- size_t hv = hash (name);
-- struct ftpfs_dir_entry *h = dir->htable[hv % dir->htable_len], *e = h;
--
-- while (e && strcmp (name, e->name) != 0)
-- e = e->next;
-+ struct ftpfs_dir_entry *e =
-+ hurd_ihash_find (&dir->htable, (hurd_ihash_key_t) name);
-
- if (!e && add)
- {
-- if (dir->num_entries > dir->htable_len)
-- /* Grow the hash table. */
-- if (rehash (dir, (dir->htable_len + 1) * 2 - 1) != 0)
-- return 0;
--
- e = malloc (sizeof *e);
- if (e)
- {
-- e->hv = hv;
- e->name = strdup (name);
- e->node = 0;
- e->dir = dir;
-@@ -128,19 +78,17 @@ lookup (struct ftpfs_dir *dir, const char *name, int add)
- e->symlink_target = 0;
- e->noent = 0;
- e->valid = 0;
-+ e->deleted = 0;
- e->name_timestamp = e->stat_timestamp = 0;
- e->ordered_next = 0;
- e->ordered_self_p = 0;
-- e->next = 0;
-- e->self_p = 0;
-- insert (e, dir->htable, dir->htable_len);
-- dir->num_entries++;
-+ hurd_ihash_add (&dir->htable, (hurd_ihash_key_t) e->name, e);
- }
- }
-
- return e;
- }
--
-+
- /* Remove E from its position in the ordered_next chain. */
- static void
- ordered_unlink (struct ftpfs_dir_entry *e)
-@@ -148,59 +96,50 @@ ordered_unlink (struct ftpfs_dir_entry *e)
- if (e->ordered_self_p)
- *e->ordered_self_p = e->ordered_next;
- if (e->ordered_next)
-- e->ordered_next->self_p = e->ordered_self_p;
-+ e->ordered_next->ordered_self_p = e->ordered_self_p;
- }
-
- /* Delete E from its directory, freeing any resources it holds. */
- static void
- delete (struct ftpfs_dir_entry *e, struct ftpfs_dir *dir)
- {
-- dir->num_entries--;
--
-- /* Take out of the hash chain. */
-- if (e->self_p)
-- *e->self_p = e->next;
-- if (e->next)
-- e->next->self_p = e->self_p;
--
- /* This indicates a deleted entry. */
-- e->self_p = 0;
-- e->next = 0;
-+ e->deleted = 1;
-
- /* Take out of the directory ordered list. */
- ordered_unlink (e);
-
-+ hurd_ihash_locp_remove (&dir->htable, e->dir_locp);
-+
- /* If there's a node attached, we'll delete the entry whenever it goes
- away, otherwise, just delete it now. */
- if (! e->node)
- free_entry (e);
- }
--
-+
- /* Clear the valid bit in all DIR's htable. */
- static void
- mark (struct ftpfs_dir *dir)
- {
-- size_t len = dir->htable_len, i;
-- struct ftpfs_dir_entry **htable = dir->htable, *e;
--
-- for (i = 0; i < len; i++)
-- for (e = htable[i]; e; e = e->next)
-+ HURD_IHASH_ITERATE (&dir->htable, value)
-+ {
-+ struct ftpfs_dir_entry *e = (struct ftpfs_dir_entry *) value;
- e->valid = 0;
-+ }
- }
-
- /* Delete any entries in DIR which don't have their valid bit set. */
- static void
- sweep (struct ftpfs_dir *dir)
- {
-- size_t len = dir->htable_len, i;
-- struct ftpfs_dir_entry **htable = dir->htable, *e;
--
-- for (i = 0; i < len; i++)
-- for (e = htable[i]; e; e = e->next)
-+ HURD_IHASH_ITERATE (&dir->htable, value)
-+ {
-+ struct ftpfs_dir_entry *e = (struct ftpfs_dir_entry *) value;
- if (!e->valid && !e->noent)
-- delete (e, dir);
-+ delete (e, dir);
-+ }
- }
--
-+
- /* Update the directory entry for NAME to reflect ST and SYMLINK_TARGET.
- True is returned if successful, or false if there was a memory allocation
- error. TIMESTAMP is used to record the time of this update. */
-@@ -238,7 +177,7 @@ update_entry (struct ftpfs_dir_entry *e, const struct stat *st,
- e->stat.st_fsid = fs->fsid;
- e->stat.st_fstype = FSTYPE_FTP;
- }
--
-+
- /* Add the timestamp TIMESTAMP to the set used to detect bulk stats, and
- return true if there have been enough individual stats recently to call
- for just refetching the whole directory. */
-@@ -466,7 +405,7 @@ ftpfs_refresh_node (struct node *node)
-
- pthread_mutex_lock (&dir->node->lock);
-
-- if (! entry->self_p)
-+ if (entry->deleted)
- /* This is a deleted entry, just awaiting disposal; do so. */
- {
- nn->dir_entry = 0;
-@@ -556,7 +495,7 @@ ftpfs_refresh_node (struct node *node)
- return err;
- }
- }
--
-+
- /* Remove NODE from its entry (if the entry is still valid, it will remain
- without a node). NODE should be locked. */
- error_t
-@@ -572,7 +511,7 @@ ftpfs_detach_node (struct node *node)
-
- pthread_mutex_lock (&dir->node->lock);
-
-- if (entry->self_p)
-+ if (!entry->deleted)
- /* Just detach NODE from the still active entry. */
- entry->node = 0;
- else
-@@ -590,7 +529,7 @@ ftpfs_detach_node (struct node *node)
-
- return 0;
- }
--
-+
- /* State shared between ftpfs_dir_lookup and update_new_entry. */
- struct new_entry_state
- {
-@@ -777,7 +716,7 @@ ftpfs_dir_lookup (struct ftpfs_dir *dir, const char *name,
-
- return err;
- }
--
-+
- /* Lookup the null name in DIR, and return a node for it in NODE. Unlike
- ftpfs_dir_lookup, this won't attempt to validate the existence of the
- entry (to avoid opening a new connection if possible) -- that will happen
-@@ -825,7 +764,7 @@ ftpfs_dir_null_lookup (struct ftpfs_dir *dir, struct node **node)
-
- return err;
- }
--
-+
- /* Size of initial htable for a new directory. */
- #define INIT_HTABLE_LEN 5
-
-@@ -837,15 +776,10 @@ ftpfs_dir_create (struct ftpfs *fs, struct node *node, const char *rmt_path,
- struct ftpfs_dir **dir)
- {
- struct ftpfs_dir *new = malloc (sizeof (struct ftpfs_dir));
-- struct ftpfs_dir_entry **htable
-- = calloc (INIT_HTABLE_LEN, sizeof (struct ftpfs_dir_entry *));
-
-- if (!new || !htable)
-+ if (!new)
- {
-- if (new)
-- free (new);
-- if (htable)
-- free (htable);
-+ free (new);
- return ENOMEM;
- }
-
-@@ -854,10 +788,9 @@ ftpfs_dir_create (struct ftpfs *fs, struct node *node, const char *rmt_path,
- node->references++;
- pthread_spin_unlock (&netfs_node_refcnt_lock);
-
-- new->num_entries = 0;
-+ hurd_ihash_init (&new->htable, offsetof (struct ftpfs_dir_entry, dir_locp));
-+ hurd_ihash_set_gki (&new->htable, ihash_hash, ihash_compare);
- new->num_live_entries = 0;
-- new->htable_len = INIT_HTABLE_LEN;
-- new->htable = htable;
- new->ordered = 0;
- new->rmt_path = rmt_path;
- new->fs = fs;
-@@ -880,8 +813,7 @@ ftpfs_dir_free (struct ftpfs_dir *dir)
- mark (dir);
- sweep (dir);
-
-- if (dir->htable)
-- free (dir->htable);
-+ hurd_ihash_destroy (&dir->htable);
-
- netfs_nrele (dir->node);
-
-diff --git a/ftpfs/ftpfs.h b/ftpfs/ftpfs.h
-index 206726f..a067bfe 100644
---- a/ftpfs/ftpfs.h
-+++ b/ftpfs/ftpfs.h
-@@ -35,7 +35,6 @@ struct ftpfs_conn;
- struct ftpfs_dir_entry
- {
- char *name; /* Name of this entry */
-- size_t hv; /* Hash value of NAME (before mod'ing) */
-
- /* The active node referred to by this name (may be 0).
- NETFS_NODE_REFCNT_LOCK should be held while frobbing this. */
-@@ -48,11 +47,6 @@ struct ftpfs_dir_entry
- /* The directory to which this entry belongs. */
- struct ftpfs_dir *dir;
-
-- /* Link to next entry in hash bucket, and address of previous entry's (or
-- hash table's) pointer to this entry. If the SELF_P field is 0, then
-- this is a deleted entry, awaiting final disposal. */
-- struct ftpfs_dir_entry *next, **self_p;
--
- /* Next entry in `directory order', or 0 if none known. */
- struct ftpfs_dir_entry *ordered_next, **ordered_self_p;
-
-@@ -61,24 +55,23 @@ struct ftpfs_dir_entry
-
- hurd_ihash_locp_t inode_locp; /* Used for removing this entry */
-
-+ hurd_ihash_locp_t dir_locp; /* Position in the directory table. */
-+
- int noent : 1; /* A negative lookup result. */
- int valid : 1; /* Marker for GC'ing. */
-+ int deleted : 1; /* Indicates a deleted entry. */
- };
-
- /* A directory. */
- struct ftpfs_dir
- {
-- /* Number of entries in HTABLE. */
-- size_t num_entries;
-+ /* Hash table mapping names to children nodes. */
-+ struct hurd_ihash htable;
-
- /* The number of entries that have nodes attached. We keep an additional
- reference to our node if there are any, to prevent it from going away. */
- size_t num_live_entries;
-
-- /* Hash table of entries. */
-- struct ftpfs_dir_entry **htable;
-- size_t htable_len; /* # of elements in HTABLE (not bytes). */
--
- /* List of dir entries in `directory order', in a linked list using the
- ORDERED_NEXT and ORDERED_SELF_P fields in each entry. Not all entries
- in HTABLE need be in this list. */
---
-2.1.4
-
diff --git a/debian/patches/series b/debian/patches/series
index 5caa5598..1c79e1af 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -35,5 +35,4 @@ exec_filename0001-Add-a-new-exec_exec_file_name-RPC.patch
exec_filename0002-Add-a-file_exec_file_name-RPC.patch
exec_filename0003-Use-the-new-_hurd_exec_file_name-function.patch
exec_filename0004-This-patch-is-an-amendment-of-exec_filename_exec.pat.patch
-flavio0001-Use-libihash-to-store-directory-entries-in-ftpfs.patch
gpg0001-trans-add-transparent-GnuPG-translator.patch