[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