[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