summaryrefslogtreecommitdiff
path: root/viengoos/object.h
diff options
context:
space:
mode:
authorNeal H. Walfield <neal@gnu.org>2008-11-17 09:23:21 +0100
committerNeal H. Walfield <neal@gnu.org>2008-11-17 09:23:21 +0100
commit4fc3ac0262a197a4174cd3b2955f4480d662d959 (patch)
treec2b1abfe0cedfebaf54aa5c231cbfa70ee753fbb /viengoos/object.h
parent5178c6dfbd02cd2a0b4178a2e26451434fef958c (diff)
Keep a pointer to an object's folio in its descriptor.
2008-11-17 Neal H. Walfield <neal@gnu.org> * object.h (struct object_desc): Add field maybe_folio_desc. (objects_folio): Use it if valid. If not, update it.
Diffstat (limited to 'viengoos/object.h')
-rw-r--r--viengoos/object.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/viengoos/object.h b/viengoos/object.h
index 0b212ea..077bd7e 100644
--- a/viengoos/object.h
+++ b/viengoos/object.h
@@ -160,6 +160,10 @@ struct object_desc
be found by looking at the folio.) */
struct activity *activity;
+ /* The object's folio (perhaps). Must first check that the OID
+ matches. */
+ struct object_desc *maybe_folio_desc;
+
/* The following members are protected by LRU_LOCK. */
/* Every in-memory object lives in a hash hashed on its OID. */
@@ -502,10 +506,17 @@ objects_folio (struct activity *activity, struct object *object)
int page = objects_folio_offset (object);
oid_t foid = odesc->oid - page - 1;
+ if (odesc->maybe_folio_desc
+ && odesc->maybe_folio_desc->live
+ && odesc->maybe_folio_desc->oid == foid)
+ return (struct folio *) object_desc_to_object (odesc->maybe_folio_desc);
+
struct folio *folio = (struct folio *) object_find (activity, foid,
OBJECT_POLICY_VOID);
assert (folio);
+ odesc->maybe_folio_desc = object_to_object_desc ((struct object *) folio);
+
return folio;
}