about summary refs log tree commit homepage
path: root/cmogstored.h
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2014-05-29 07:11:04 +0000
committerEric Wong <e@80x24.org>2014-05-29 07:14:02 +0000
commit19a0fde65d8905f31e4ffaea531da4cefb02c29e (patch)
treeb43868b362b696e801454def49492ecb4607257e /cmogstored.h
parent565f1d67f7ce95f1a34bbcd9c3d90c1bb058bf9c (diff)
downloadcmogstored-19a0fde65d8905f31e4ffaea531da4cefb02c29e.tar.gz
There are no apparent benefits at the moment, but theoretically
it can reduce the amount of allocations we do and improve locality.
Diffstat (limited to 'cmogstored.h')
-rw-r--r--cmogstored.h22
1 files changed, 18 insertions, 4 deletions
diff --git a/cmogstored.h b/cmogstored.h
index 1381f4f..3e03fce 100644
--- a/cmogstored.h
+++ b/cmogstored.h
@@ -72,6 +72,21 @@
 #include "mnt.h"
 #include "packaddr.h"
 
+/* khash */
+#define kcalloc(N,Z) xcalloc(N,Z)
+#define kmalloc(Z) xmalloc(Z)
+#define krealloc(P,Z) xrealloc(P,Z)
+#define kfree(P) free(P)
+#include "klib/khash.h"
+
+/* TODO: send to klib upstream if it's good */
+#define mog_kh_foreach_key(h, kvar, code) do { khint_t __i;                \
+        for (__i = kh_begin(h); __i != kh_end(h); ++__i) {                \
+                if (!kh_exist(h,__i)) continue;                                \
+                (kvar) = kh_key(h,__i);                                        \
+                code;                                                        \
+        } } while (0)
+
 #define MOG_WR_ERROR ((void *)-1)
 #define MOG_IOSTAT (MAP_FAILED)
 #define MOG_FD_MAX (INT_MAX-1)
@@ -152,6 +167,7 @@ struct mog_mgmt {
 
 struct mog_queue;
 struct mog_svc;
+__KHASH_TYPE(by_mog_devid, struct mog_dev *, char);
 struct mog_svc {
         int docroot_fd;
         const char *docroot;
@@ -164,7 +180,7 @@ struct mog_svc {
         /* private */
         DIR *dir;
         pthread_mutex_t by_mog_devid_lock;
-        Hash_table *by_mog_devid;
+        khash_t(by_mog_devid) *by_mog_devid;
         Hash_table *by_st_dev;
         pthread_mutex_t devstats_lock;
         struct mog_queue *queue;
@@ -376,9 +392,7 @@ bool mog_svc_atfork_child(void *svc_ptr, void *parent);
 /* dev.c */
 struct mog_dev *mog_dev_for(struct mog_svc *, uint32_t mog_devid, bool update);
 int mog_dev_mkusage(const struct mog_dev *, struct mog_svc *);
-size_t mog_dev_hash(const void *, size_t tablesize);
-bool mog_dev_cmp(const void *a, const void *b);
-void mog_dev_free(void *devptr);
+void mog_dev_free(struct mog_dev *);
 bool mog_dev_user_rescale_i(void *devp, void *svcp);
 bool mog_dev_requeue_prepare(void *devp, void *ign);