[sheepdog] [PATCH v3 1/2] sheep/http: don't call oalloc_free() when onode is inlined
Robin Dong
robin.k.dong at gmail.com
Fri Feb 21 06:26:31 CET 2014
From: Robin Dong <sanbai at taobao.com>
The inlined-onode does not contain any extent, so we don't need to free any space.
And, if we call oalloc_free(), it will pass wrong arguments ( onode->o_extent[0].start
and onode->o_extent[0].count) to oalloc_free().
Signed-off-by: Robin Dong <sanbai at taobao.com>
---
sheep/http/kv.c | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/sheep/http/kv.c b/sheep/http/kv.c
index 0c54340..f7dd40f 100644
--- a/sheep/http/kv.c
+++ b/sheep/http/kv.c
@@ -829,14 +829,17 @@ out:
static int onode_free_data(struct kv_onode *onode)
{
uint32_t data_vid = onode->data_vid;
- int ret;
+ int ret = SD_RES_SUCCESS;
- sys->cdrv->lock(data_vid);
- ret = oalloc_free(data_vid, onode->o_extent[0].start,
- onode->o_extent[0].count);
- sys->cdrv->unlock(data_vid);
- if (ret != SD_RES_SUCCESS)
- sd_err("failed to free %s", onode->name);
+ /* it don't need to free data for inlined onode */
+ if (onode->inlined != 1) {
+ sys->cdrv->lock(data_vid);
+ ret = oalloc_free(data_vid, onode->o_extent[0].start,
+ onode->o_extent[0].count);
+ sys->cdrv->unlock(data_vid);
+ if (ret != SD_RES_SUCCESS)
+ sd_err("failed to free %s", onode->name);
+ }
return ret;
}
--
1.7.12.4
More information about the sheepdog
mailing list