[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