diff options
author | Simon Rettberg | 2019-08-29 14:49:18 +0200 |
---|---|---|
committer | Simon Rettberg | 2019-08-29 14:49:18 +0200 |
commit | 88695877f085af475a6ca8a01c2fbb08eb5b15da (patch) | |
tree | 7e196a12eca25c72802c255f42dac77af13cf484 /src/server/reference.h | |
parent | [SERVER] reference: Fix error msg usage (diff) | |
download | dnbd3-88695877f085af475a6ca8a01c2fbb08eb5b15da.tar.gz dnbd3-88695877f085af475a6ca8a01c2fbb08eb5b15da.tar.xz dnbd3-88695877f085af475a6ca8a01c2fbb08eb5b15da.zip |
[SERVER] Use weakref for cache maps
Gets rid of a bunch of locking, especially the hot path in net.c where
clients are requesting data. Many clients unsing the same incomplete
image previously created a bottleneck here.
Diffstat (limited to 'src/server/reference.h')
-rw-r--r-- | src/server/reference.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/server/reference.h b/src/server/reference.h index 8883eb1..2a80955 100644 --- a/src/server/reference.h +++ b/src/server/reference.h @@ -51,4 +51,9 @@ static inline void ref_put( ref *ref ) ref == NULL ? NULL : container_of(ref, dnbd3_uplink_t, reference); \ }) +#define ref_get_cachemap(image) ({ \ + ref* ref = ref_get( &(image)->ref_cacheMap ); \ + ref == NULL ? NULL : container_of(ref, dnbd3_cache_map_t, reference); \ +}) + #endif |