diff options
author | Eric Wong <e@80x24.org> | 2014-05-29 07:11:04 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2014-05-29 07:14:02 +0000 |
commit | 19a0fde65d8905f31e4ffaea531da4cefb02c29e (patch) | |
tree | b43868b362b696e801454def49492ecb4607257e /cmogstored.h | |
parent | 565f1d67f7ce95f1a34bbcd9c3d90c1bb058bf9c (diff) | |
download | cmogstored-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.h | 22 |
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); |