[sheepdog] [PATCH v2 05/11] sheep: decrement generational reference count on vdi deletion

Liu Yuan namei.unix at gmail.com
Wed Jul 3 09:38:39 CEST 2013


On Wed, Jun 19, 2013 at 02:14:25AM +0900, MORITA Kazutaka wrote:
> From: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
> 
> This removes old vdi deletion code, which reclaims objects only when
> all relevant snapshots are deleted, and uses a generational reference
> counting algorithm.
> 
> Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
> ---
>  sheep/vdi.c |  213 +++--------------------------------------------------------
>  1 file changed, 9 insertions(+), 204 deletions(-)
> 
> diff --git a/sheep/vdi.c b/sheep/vdi.c
> index 988145d..93ab536 100644
> --- a/sheep/vdi.c
> +++ b/sheep/vdi.c
> @@ -585,47 +585,11 @@ int read_vdis(char *data, int len, unsigned int *rsp_len)
>  }
>  
>  struct deletion_work {
> -	uint32_t done;
> -
>  	struct work work;
> -	struct list_head list;
>  	struct request *req;
> -
>  	uint32_t vid;
> -
> -	int count;
> -	uint32_t *buf;
>  };
>  
> -static LIST_HEAD(deletion_work_list);
> -
> -static int delete_inode(struct deletion_work *dw)
> -{
> -	struct sd_inode *inode = NULL;
> -	int ret = SD_RES_SUCCESS;
> -
> -	inode = xzalloc(sizeof(*inode));
> -	ret = read_object(vid_to_vdi_oid(dw->vid), (char *)inode,
> -			  SD_INODE_HEADER_SIZE, 0);
> -	if (ret != SD_RES_SUCCESS) {
> -		ret = SD_RES_EIO;
> -		goto out;
> -	}
> -
> -	memset(inode->name, 0, sizeof(inode->name));
> -
> -	ret = write_object(vid_to_vdi_oid(dw->vid), (char *)inode,
> -			   SD_INODE_HEADER_SIZE, 0, false);
> -	if (ret != 0) {
> -		ret = SD_RES_EIO;
> -		goto out;
> -	}
> -
> -out:
> -	free(inode);
> -	return ret;
> -}
> -
>  static int notify_vdi_deletion(uint32_t vdi_id)
>  {
>  	struct sd_req hdr;
> @@ -646,11 +610,11 @@ static int notify_vdi_deletion(uint32_t vdi_id)
>  static void delete_one(struct work *work)
>  {
>  	struct deletion_work *dw = container_of(work, struct deletion_work, work);
> -	uint32_t vdi_id = *(dw->buf + dw->count - dw->done - 1);
> +	uint32_t vdi_id = dw->vid;
>  	int ret, i, nr_deleted;
>  	struct sd_inode *inode = NULL;
>  
> -	sd_dprintf("%d %d, %16x", dw->done, dw->count, vdi_id);
> +	sd_eprintf("%16" PRIx32, vdi_id);

Why sd_eprintf instead of sd_dprintf ?

Thanks
Yuan



More information about the sheepdog mailing list