[sheepdog] [PATCH] sheep: remove delete_error from vdi deletion_work

levin li levin108 at gmail.com
Tue Jun 26 05:07:19 CEST 2012


From: levin li <xingke.lwp at taobao.com>

Since we've made gateway to retry when removing an object fail
during recovery, the most possible case that make remove_object
fail is that we meet an EIO, in which case even if we try to
delete again the error still exist, so delete_error is no longer
needed.

Signed-off-by: levin li <xingke.lwp at taobao.com>
---
 sheep/vdi.c |   20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/sheep/vdi.c b/sheep/vdi.c
index 8ce34ac..c717ba1 100644
--- a/sheep/vdi.c
+++ b/sheep/vdi.c
@@ -381,7 +381,6 @@ struct deletion_work {
 	uint32_t *buf;
 
 	struct vnode_info *vnodes;
-	int delete_error;
 };
 
 static LIST_HEAD(deletion_work_list);
@@ -453,30 +452,29 @@ static void delete_one(struct work *work)
 		goto out;
 
 	for (i = 0; i < MAX_DATA_OBJS; i++) {
+		uint64_t oid;
+
 		if (!inode->data_vdi_id[i])
 			continue;
 
+		oid = vid_to_data_oid(inode->data_vdi_id[i], i);
+
 		if (inode->data_vdi_id[i] != inode->vdi_id) {
 			dprintf("object %" PRIx64 " is base's data, would not be deleted.\n",
-					vid_to_data_oid(inode->data_vdi_id[i], i));
+				oid);
 			continue;
 		}
 
-		ret = remove_object(vid_to_data_oid(inode->data_vdi_id[i], i),
-				    nr_copies);
-
+		ret = remove_object(oid, nr_copies);
 		if (ret != SD_RES_SUCCESS)
-			dw->delete_error = 1;
-		else
-			inode->data_vdi_id[i] = 0;
+			eprintf("remove object %" PRIx64 " fail, %d\n", oid, ret);
 	}
 
-	if (!dw->delete_error && *(inode->name) == '\0')
+	if (*(inode->name) == '\0')
 		goto out;
 
 	inode->vdi_size = 0;
-	if (!dw->delete_error)
-		memset(inode->name, 0, sizeof(inode->name));
+	memset(inode->name, 0, sizeof(inode->name));
 
 	write_object(vid_to_vdi_oid(vdi_id), (void *)inode,
 		     sizeof(*inode), 0, 0, nr_copies, 0);
-- 
1.7.10




More information about the sheepdog mailing list