diff options
author | Neal H. Walfield <neal@gnu.org> | 2008-11-17 09:23:21 +0100 |
---|---|---|
committer | Neal H. Walfield <neal@gnu.org> | 2008-11-17 09:23:21 +0100 |
commit | 4fc3ac0262a197a4174cd3b2955f4480d662d959 (patch) | |
tree | c2b1abfe0cedfebaf54aa5c231cbfa70ee753fbb /viengoos/object.h | |
parent | 5178c6dfbd02cd2a0b4178a2e26451434fef958c (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.h | 11 |
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; } |