[experimental-ims] c92ad59 Utilize the oc->priv2 variable to store the pointer to the allocating stevedore for the default case (malloc and file)

Martin Blix Grydeland martin at varnish-software.com
Thu Dec 18 10:27:41 CET 2014


commit c92ad59cde5dfd32487eb6466b07c4817e5efad1
Author: Martin Blix Grydeland <martin at varnish-software.com>
Date:   Mon Mar 12 16:11:01 2012 +0100

    Utilize the oc->priv2 variable to store the pointer to the allocating
    stevedore for the default case (malloc and file)
    
    Change the type of oc->priv2 from unsigned to uintptr_t (due to
    padding this does not increase the size of objcore).
    
    Change the default_oc_getlru to find the stevedore through the
    oc->priv2 instead of having to go through (and page-in) the object.

diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 6aceab0..8f2381c 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -371,7 +371,7 @@ struct objcore {
 	int			refcnt;
 	struct objcore_methods	*methods;
 	void			*priv;
-	unsigned		priv2;
+	uintptr_t		priv2;
 	struct objhead		*objhead;
 	struct busyobj		*busyobj;
 	double			timer_when;
diff --git a/bin/varnishd/storage/stevedore.c b/bin/varnishd/storage/stevedore.c
index 3c62d8d..9f013d2 100644
--- a/bin/varnishd/storage/stevedore.c
+++ b/bin/varnishd/storage/stevedore.c
@@ -85,10 +85,10 @@ default_oc_freeobj(struct objcore *oc)
 static struct lru *
 default_oc_getlru(const struct objcore *oc)
 {
-	struct object *o;
+	struct stevedore *stv;
 
-	CAST_OBJ_NOTNULL(o, oc->priv, OBJECT_MAGIC);
-	return (o->objstore->stevedore->lru);
+	CAST_OBJ_NOTNULL(stv, (void *)oc->priv2, STEVEDORE_MAGIC);
+	return (stv->lru);
 }
 
 static struct objcore_methods default_oc_methods = {
@@ -227,12 +227,13 @@ struct stv_objsecrets {
  */
 
 struct object *
-STV_MkObject(struct busyobj *bo, struct objcore **ocp, void *ptr, unsigned ltot,
-    const struct stv_objsecrets *soc)
+STV_MkObject(struct stevedore *stv, struct busyobj *bo, struct objcore **ocp,
+    void *ptr, unsigned ltot, const struct stv_objsecrets *soc)
 {
 	struct object *o;
 	unsigned l;
 
+	CHECK_OBJ_NOTNULL(stv, STEVEDORE_MAGIC);
 	CHECK_OBJ_NOTNULL(bo, BUSYOBJ_MAGIC);
 	CHECK_OBJ_NOTNULL(soc, STV_OBJ_SECRETES_MAGIC);
 	AN(ocp);
@@ -270,6 +271,7 @@ STV_MkObject(struct busyobj *bo, struct objcore **ocp, void *ptr, unsigned ltot,
 
 		o->objcore->methods = &default_oc_methods;
 		o->objcore->priv = o;
+		o->objcore->priv2 = (uintptr_t)stv;
 	}
 	return (o);
 }
@@ -297,7 +299,7 @@ stv_default_allocobj(struct stevedore *stv, struct busyobj *bo,
 		return (NULL);
 	}
 	ltot = st->len = st->space;
-	o = STV_MkObject(bo, ocp, st->ptr, ltot, soc);
+	o = STV_MkObject(stv, bo, ocp, st->ptr, ltot, soc);
 	CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
 	o->objstore = st;
 	return (o);
diff --git a/bin/varnishd/storage/storage.h b/bin/varnishd/storage/storage.h
index 80839a6..6994314 100644
--- a/bin/varnishd/storage/storage.h
+++ b/bin/varnishd/storage/storage.h
@@ -92,8 +92,9 @@ extern struct stevedore *stv_transient;
 int STV_GetFile(const char *fn, int *fdp, const char **fnp, const char *ctx);
 uintmax_t STV_FileSize(int fd, const char *size, unsigned *granularity,
     const char *ctx);
-struct object *STV_MkObject(struct busyobj *bo, struct objcore **ocp,
-    void *ptr, unsigned ltot, const struct stv_objsecrets *soc);
+struct object *STV_MkObject(struct stevedore *stv, struct busyobj *bo,
+    struct objcore **ocp, void *ptr, unsigned ltot,
+    const struct stv_objsecrets *soc);
 
 struct lru *LRU_Alloc(void);
 void LRU_Free(struct lru *lru);
diff --git a/bin/varnishd/storage/storage_persistent.c b/bin/varnishd/storage/storage_persistent.c
index 58c6f29..35845f0 100644
--- a/bin/varnishd/storage/storage_persistent.c
+++ b/bin/varnishd/storage/storage_persistent.c
@@ -485,7 +485,7 @@ smp_allocobj(struct stevedore *stv, struct busyobj *bo, struct objcore **ocp,
 	assert(st->space >= ltot);
 	ltot = st->len = st->space;
 
-	o = STV_MkObject(bo, ocp, st->ptr, ltot, soc);
+	o = STV_MkObject(stv, bo, ocp, st->ptr, ltot, soc);
 	CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
 	o->objstore = st;
 



More information about the varnish-commit mailing list