[master] 8cbf914a1 vai: generalize pointer / lease conversion
Nils Goroll
nils.goroll at uplex.de
Thu Jul 10 06:48:05 UTC 2025
commit 8cbf914a106e19bbec12f0fcd5c78348b2f52828
Author: Nils Goroll <nils.goroll at uplex.de>
Date: Thu Jul 10 08:46:09 2025 +0200
vai: generalize pointer / lease conversion
Likely every storage engine needs it
diff --git a/bin/varnishd/storage/storage.h b/bin/varnishd/storage/storage.h
index c4ff0af5d..b030f2c54 100644
--- a/bin/varnishd/storage/storage.h
+++ b/bin/varnishd/storage/storage.h
@@ -75,6 +75,29 @@ typedef void sml_free_f(struct storage *);
typedef ct stv_var_##nm(const struct stevedore *);
#include "tbl/vrt_stv_var.h"
+/* VAI helpers -------------------------------------------------------*/
+
+static inline uint64_t
+ptr2lease(const void *ptr)
+{
+ uint64_t r = (uintptr_t)ptr;
+
+ if (sizeof(void *) < 8) //lint !e506 !e774
+ r <<= 1;
+
+ return (r);
+}
+
+static inline void *
+lease2ptr(uint64_t l)
+{
+
+ if (sizeof(void *) < 8) //lint !e506 !e774
+ l >>= 1;
+
+ return ((void *)(uintptr_t)l);
+}
+
/*--------------------------------------------------------------------*/
struct stevedore {
diff --git a/bin/varnishd/storage/storage_simple.c b/bin/varnishd/storage/storage_simple.c
index f4a5ec67f..4ddab3590 100644
--- a/bin/varnishd/storage/storage_simple.c
+++ b/bin/varnishd/storage/storage_simple.c
@@ -332,33 +332,12 @@ struct sml_hdl {
struct storage *last; // to resume, held back by _return()
};
-static inline uint64_t
-st2lease(const struct storage *st)
-{
- uint64_t r = (uintptr_t)st;
-
- if (sizeof(void *) < 8) //lint !e506 !e774
- r <<= 1;
-
- return (r);
-}
-
-static inline struct storage *
-lease2st(uint64_t l)
-{
-
- if (sizeof(void *) < 8) //lint !e506 !e774
- l >>= 1;
-
- return ((void *)(uintptr_t)l);
-}
-
static inline void
sml_ai_viov_fill(struct viov *viov, struct storage *st)
{
viov->iov.iov_base = TRUST_ME(st->ptr);
viov->iov.iov_len = st->len;
- viov->lease = st2lease(st);
+ viov->lease = ptr2lease(st);
VAI_ASSERT_LEASE(viov->lease);
}
@@ -505,7 +484,7 @@ sml_ai_lease_boc(struct worker *wrk, vai_hdl vhdl, struct vscarab *scarab)
AN(viov);
viov->iov.iov_base = null_iov;
viov->iov.iov_len = 0;
- viov->lease = st2lease(hdl->last);
+ viov->lease = ptr2lease(hdl->last);
}
if (hdl->last != NULL)
hdl->last = NULL;
@@ -535,7 +514,7 @@ sml_ai_lease_boc(struct worker *wrk, vai_hdl vhdl, struct vscarab *scarab)
}
else {
CHECK_OBJ(next, STORAGE_MAGIC);
- viov->lease = st2lease(hdl->st);
+ viov->lease = ptr2lease(hdl->st);
}
#ifdef VAI_DBG
VSLb(wrk->vsl, SLT_Debug, "off %zu + l %zu == space st %p next st %p stvprv %p",
@@ -577,7 +556,7 @@ sml_ai_return_buffers(struct worker *wrk, vai_hdl vhdl, struct vscaret *scaret)
VSCARET_FOREACH(p, scaret) {
if (*p == VAI_LEASE_NORET)
continue;
- CAST_OBJ_NOTNULL(st, lease2st(*p), STORAGE_MAGIC);
+ CAST_OBJ_NOTNULL(st, lease2ptr(*p), STORAGE_MAGIC);
if ((st->flags & STORAGE_F_BUFFER) == 0)
continue;
sml_stv_free(hdl->stv, st);
@@ -607,14 +586,14 @@ sml_ai_return(struct worker *wrk, vai_hdl vhdl, struct vscaret *scaret)
VSCARET_FOREACH(p, scaret) {
if (*p == VAI_LEASE_NORET)
continue;
- CAST_OBJ_NOTNULL(st, lease2st(*p), STORAGE_MAGIC);
+ CAST_OBJ_NOTNULL(st, lease2ptr(*p), STORAGE_MAGIC);
VSCARET_ADD(todo, *p);
}
VSCARET_INIT(scaret, scaret->capacity);
Lck_Lock(&hdl->boc->mtx);
VSCARET_FOREACH(p, todo) {
- CAST_OBJ_NOTNULL(st, lease2st(*p), STORAGE_MAGIC);
+ CAST_OBJ_NOTNULL(st, lease2ptr(*p), STORAGE_MAGIC);
if ((st->flags & STORAGE_F_BUFFER) != 0)
continue;
VTAILQ_REMOVE(&hdl->obj->list, st, list);
@@ -624,7 +603,7 @@ sml_ai_return(struct worker *wrk, vai_hdl vhdl, struct vscaret *scaret)
Lck_Unlock(&hdl->boc->mtx);
VSCARET_FOREACH(p, todo) {
- CAST_OBJ_NOTNULL(st, lease2st(*p), STORAGE_MAGIC);
+ CAST_OBJ_NOTNULL(st, lease2ptr(*p), STORAGE_MAGIC);
#ifdef VAI_DBG
VSLb(wrk->vsl, SLT_Debug, "ret %p", st);
#endif
More information about the varnish-commit
mailing list