fellow_cache: Trim the FCO also after embedding

parent 07c3753c
...@@ -2991,8 +2991,6 @@ fellow_cache_obj_trim(const struct fellow_cache *fc, ...@@ -2991,8 +2991,6 @@ fellow_cache_obj_trim(const struct fellow_cache *fc,
CHECK_OBJ_NOTNULL(fco, FELLOW_CACHE_OBJ_MAGIC); CHECK_OBJ_NOTNULL(fco, FELLOW_CACHE_OBJ_MAGIC);
// no trim if fdo is embedded - XXX cleaner way? // no trim if fdo is embedded - XXX cleaner way?
if (FCO_FCS(fco)->alloc.ptr == NULL)
return;
assert(FCO_FDO(fco) == FCO_FCS(fco)->alloc.ptr); assert(FCO_FDO(fco) == FCO_FCS(fco)->alloc.ptr);
fcsl = &fco->fcsl_embed; fcsl = &fco->fcsl_embed;
...@@ -5405,7 +5403,7 @@ struct objcore **ocp, uintptr_t priv2, unsigned crit) ...@@ -5405,7 +5403,7 @@ struct objcore **ocp, uintptr_t priv2, unsigned crit)
unsigned oref = 0; unsigned oref = 0;
const char *err; const char *err;
char *ptr; char *ptr;
size_t spc, sz; size_t spc, sz, nsz;
int r; int r;
CHECK_OBJ_NOTNULL(fc, FELLOW_CACHE_MAGIC); CHECK_OBJ_NOTNULL(fc, FELLOW_CACHE_MAGIC);
...@@ -5554,6 +5552,7 @@ struct objcore **ocp, uintptr_t priv2, unsigned crit) ...@@ -5554,6 +5552,7 @@ struct objcore **ocp, uintptr_t priv2, unsigned crit)
assert(sz <= fco->fco_mem.size); assert(sz <= fco->fco_mem.size);
ptr = (char *)fco + sz; ptr = (char *)fco + sz;
assert(PAOK(ptr)); assert(PAOK(ptr));
nsz = sz;
spc = fco->fco_mem.size - sz; spc = fco->fco_mem.size - sz;
...@@ -5565,10 +5564,13 @@ struct objcore **ocp, uintptr_t priv2, unsigned crit) ...@@ -5565,10 +5564,13 @@ struct objcore **ocp, uintptr_t priv2, unsigned crit)
fdo = fcs->u.fco_fdo = (void *)ptr; fdo = fcs->u.fco_fdo = (void *)ptr;
AN(buddy_return_ptr_extent(rets, &fcs->alloc)); AN(buddy_return_ptr_extent(rets, &fcs->alloc));
nsz += sz;
} }
else else
fdo = fellow_disk_obj_trim(fc, fcs); fdo = fellow_disk_obj_trim(fc, fcs);
buddy_trim1_ptr_extent(fc->membuddy, &fco->fco_mem, nsz);
fdsl = fellow_disk_obj_fdsl(fdo); fdsl = fellow_disk_obj_fdsl(fdo);
assert(PAOK(fdsl)); assert(PAOK(fdsl));
CHECK_OBJ_NOTNULL(fdsl, FELLOW_DISK_SEGLIST_MAGIC); CHECK_OBJ_NOTNULL(fdsl, FELLOW_DISK_SEGLIST_MAGIC);
...@@ -5609,7 +5611,6 @@ struct objcore **ocp, uintptr_t priv2, unsigned crit) ...@@ -5609,7 +5611,6 @@ struct objcore **ocp, uintptr_t priv2, unsigned crit)
if (dowry.bits) if (dowry.bits)
AN(buddy_return_ptr_page(rets, &dowry)); AN(buddy_return_ptr_page(rets, &dowry));
fellow_cache_obj_trim(fc, fco);
buddy_return(rets); buddy_return(rets);
return (FCR_OK(fco)); return (FCR_OK(fco));
err: err:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment