From: levin li <xingke.lwp at taobao.com> Since remove/read/remove_object don't use nr_copies and epoch any more, so vnode_info/epoch/copies can be removed. Signed-off-by: levin li <xingke.lwp at taobao.com> --- sheep/object_cache.c | 7 +-- sheep/ops.c | 16 +++--- sheep/sheep_priv.h | 32 +++++------ sheep/store.c | 14 ++--- sheep/vdi.c | 153 ++++++++++++++++---------------------------------- 5 files changed, 77 insertions(+), 145 deletions(-) diff --git a/sheep/object_cache.c b/sheep/object_cache.c index 9942198..df6b16f 100644 --- a/sheep/object_cache.c +++ b/sheep/object_cache.c @@ -788,8 +788,7 @@ int object_cache_handle_request(struct request *req) } int object_cache_write(uint64_t oid, char *data, unsigned int datalen, - uint64_t offset, uint16_t flags, int copies, - int create) + uint64_t offset, uint16_t flags, int create) { int ret; struct request *req; @@ -812,7 +811,6 @@ int object_cache_write(uint64_t oid, char *data, unsigned int datalen, req->rq.obj.oid = oid; req->rq.obj.offset = offset; - req->rq.obj.copies = copies; req->data = data; req->op = get_sd_op(req->rq.opcode); @@ -824,7 +822,7 @@ int object_cache_write(uint64_t oid, char *data, unsigned int datalen, } int object_cache_read(uint64_t oid, char *data, unsigned int datalen, - uint64_t offset, int copies) + uint64_t offset) { int ret; struct request *req; @@ -843,7 +841,6 @@ int object_cache_read(uint64_t oid, char *data, unsigned int datalen, req->rq.obj.oid = oid; req->rq.obj.offset = offset; - req->rq.obj.copies = copies; req->data = data; req->op = get_sd_op(req->rq.opcode); diff --git a/sheep/ops.c b/sheep/ops.c index 55978f4..f055da2 100644 --- a/sheep/ops.c +++ b/sheep/ops.c @@ -112,9 +112,9 @@ static int cluster_new_vdi(struct request *req) uint32_t vid = 0, nr_copies = sys->nr_copies; int ret; - ret = add_vdi(req->vnodes, hdr->epoch, req->data, hdr->data_length, + ret = add_vdi(req->data, hdr->data_length, hdr->vdi.vdi_size, &vid, hdr->vdi.base_vdi_id, - hdr->vdi.copies, hdr->vdi.snapid, &nr_copies); + hdr->vdi.snapid, &nr_copies); rsp->vdi.vdi_id = vid; rsp->vdi.copies = nr_copies; @@ -141,7 +141,7 @@ static int cluster_del_vdi(struct request *req) uint32_t vid = 0, nr_copies = sys->nr_copies; int ret; - ret = del_vdi(req->vnodes, hdr->epoch, req->data, hdr->data_length, + ret = del_vdi(req->data, hdr->data_length, &vid, hdr->vdi.snapid, &nr_copies); if (sys->enable_write_cache && ret == SD_RES_SUCCESS) @@ -171,7 +171,7 @@ static int cluster_get_vdi_info(struct request *req) else return SD_RES_INVALID_PARMS; - ret = lookup_vdi(req->vnodes, hdr->epoch, req->data, tag, &vid, + ret = lookup_vdi(req->data, tag, &vid, hdr->vdi.snapid, &nr_copies, NULL); if (ret != SD_RES_SUCCESS) return ret; @@ -271,8 +271,8 @@ static int cluster_get_vdi_attr(struct request *req) struct sheepdog_vdi_attr *vattr; vattr = req->data; - ret = lookup_vdi(req->vnodes, hdr->epoch, vattr->name, vattr->tag, - &vid, hdr->vdi.snapid, &nr_copies, &created_time); + ret = lookup_vdi(vattr->name, vattr->tag, &vid, + hdr->vdi.snapid, &nr_copies, &created_time); if (ret != SD_RES_SUCCESS) return ret; @@ -280,8 +280,8 @@ static int cluster_get_vdi_attr(struct request *req) so we use the hash value of the VDI name as the VDI id */ vid = fnv_64a_buf(vattr->name, strlen(vattr->name), FNV1A_64_INIT); vid &= SD_NR_VDIS - 1; - ret = get_vdi_attr(req->vnodes, hdr->epoch, req->data, hdr->data_length, - vid, &attrid, nr_copies, created_time, + ret = get_vdi_attr(req->data, hdr->data_length, + vid, &attrid, created_time, hdr->flags & SD_FLAG_CMD_CREAT, hdr->flags & SD_FLAG_CMD_EXCL, hdr->flags & SD_FLAG_CMD_DEL); diff --git a/sheep/sheep_priv.h b/sheep/sheep_priv.h index bd44073..d10d8e2 100644 --- a/sheep/sheep_priv.h +++ b/sheep/sheep_priv.h @@ -208,24 +208,19 @@ int create_listen_port(int port, void *data); int init_store(const char *dir, int enable_write_cache); int init_base_path(const char *dir); -int add_vdi(struct vnode_info *vnode_info, uint32_t epoch, char *data, - int data_len, uint64_t size, uint32_t *new_vid, - uint32_t base_vid, uint32_t copies, int is_snapshot, - unsigned int *nr_copies); +int add_vdi(char *data, int data_len, uint64_t size, uint32_t *new_vid, + uint32_t base_vid, int is_snapshot, unsigned int *nr_copies); -int del_vdi(struct vnode_info *vnode_info, uint32_t epoch, char *data, - int data_len, uint32_t *vid, uint32_t snapid, - unsigned int *nr_copies); +int del_vdi(char *data, int data_len, uint32_t *vid, uint32_t snapid, + unsigned int *nr_copies); -int lookup_vdi(struct vnode_info *vnode_info, uint32_t epoch, char *name, - char *tag, uint32_t *vid, uint32_t snapid, - unsigned int *nr_copies, uint64_t *ctime); +int lookup_vdi(char *name, char *tag, uint32_t *vid, uint32_t snapid, + unsigned int *nr_copies, uint64_t *ctime); int read_vdis(char *data, int len, unsigned int *rsp_len); -int get_vdi_attr(struct vnode_info *vnode_info, uint32_t epoch, - struct sheepdog_vdi_attr *vattr, int data_len, uint32_t vid, - uint32_t *attrid, int copies, uint64_t ctime, int write, +int get_vdi_attr(struct sheepdog_vdi_attr *vattr, int data_len, uint32_t vid, + uint32_t *attrid, uint64_t ctime, int write, int excl, int delete); int local_get_node_list(const struct sd_req *req, struct sd_rsp *rsp, @@ -288,10 +283,10 @@ int is_recovery_init(void); int node_in_recovery(void); int write_object(uint64_t oid, char *data, unsigned int datalen, - uint64_t offset, uint16_t flags, int nr, int create); + uint64_t offset, uint16_t flags, int create); int read_object(uint64_t oid, char *data, unsigned int datalen, - uint64_t offset, int nr); -int remove_object(uint64_t oid, int nr); + uint64_t offset); +int remove_object(uint64_t oid); int exec_local_req(struct sd_req *rq, void *data, int data_length); void local_req_init(void); @@ -395,10 +390,9 @@ int object_is_cached(uint64_t oid); int object_cache_handle_request(struct request *req); int object_cache_write(uint64_t oid, char *data, unsigned int datalen, - uint64_t offset, uint16_t flags, int copies, - int create); + uint64_t offset, uint16_t flags, int create); int object_cache_read(uint64_t oid, char *data, unsigned int datalen, - uint64_t offset, int copies); + uint64_t offset); int object_cache_flush_vdi(struct request *req); int object_cache_flush_and_del(struct request *req); void object_cache_delete(uint32_t vid); diff --git a/sheep/store.c b/sheep/store.c index 95e4269..ce56e34 100644 --- a/sheep/store.c +++ b/sheep/store.c @@ -514,14 +514,14 @@ int init_store(const char *d, int enable_write_cache) * Write data to both local object cache (if enabled) and backends */ int write_object(uint64_t oid, char *data, unsigned int datalen, - uint64_t offset, uint16_t flags, int nr_copies, int create) + uint64_t offset, uint16_t flags, int create) { struct sd_req hdr; int ret; if (sys->enable_write_cache && object_is_cached(oid)) { ret = object_cache_write(oid, data, datalen, offset, - flags, nr_copies, create); + flags, create); if (ret != 0) { eprintf("write cache failed %"PRIx64" %"PRIx32"\n", oid, ret); @@ -535,7 +535,6 @@ int write_object(uint64_t oid, char *data, unsigned int datalen, hdr.obj.oid = oid; hdr.obj.offset = offset; - hdr.obj.copies = nr_copies; ret = exec_local_req(&hdr, data, datalen); if (ret != SD_RES_SUCCESS) @@ -549,14 +548,13 @@ int write_object(uint64_t oid, char *data, unsigned int datalen, * try read backends */ int read_object(uint64_t oid, char *data, unsigned int datalen, - uint64_t offset, int nr_copies) + uint64_t offset) { struct sd_req hdr; int ret; if (sys->enable_write_cache && object_is_cached(oid)) { - ret = object_cache_read(oid, data, datalen, offset, - nr_copies); + ret = object_cache_read(oid, data, datalen, offset); if (ret != SD_RES_SUCCESS) { eprintf("try forward read %"PRIx64" %"PRIx32"\n", oid, ret); @@ -570,7 +568,6 @@ forward_read: hdr.opcode = SD_OP_READ_OBJ; hdr.obj.oid = oid; hdr.obj.offset = offset; - hdr.obj.copies = nr_copies; ret = exec_local_req(&hdr, data, datalen); if (ret != SD_RES_SUCCESS) @@ -579,7 +576,7 @@ forward_read: return ret; } -int remove_object(uint64_t oid, int nr) +int remove_object(uint64_t oid) { struct sd_req hdr; int ret; @@ -587,7 +584,6 @@ int remove_object(uint64_t oid, int nr) memset(&hdr, 0, sizeof(hdr)); hdr.opcode = SD_OP_REMOVE_OBJ; hdr.obj.oid = oid; - hdr.obj.copies = nr; ret = exec_local_req(&hdr, NULL, 0); if (ret != SD_RES_SUCCESS) diff --git a/sheep/vdi.c b/sheep/vdi.c index db046c4..4a0d165 100644 --- a/sheep/vdi.c +++ b/sheep/vdi.c @@ -17,17 +17,15 @@ /* TODO: should be performed atomically */ -static int create_vdi_obj(struct vnode_info *vnode_info, uint32_t epoch, - char *name, uint32_t new_vid, uint64_t size, uint32_t base_vid, - uint32_t cur_vid, uint32_t copies, uint32_t snapid, - int is_snapshot) +static int create_vdi_obj(char *name, uint32_t new_vid, uint64_t size, + uint32_t base_vid, uint32_t cur_vid, uint32_t snapid, + int is_snapshot) { /* we are not called concurrently */ struct sheepdog_inode *new = NULL, *base = NULL, *cur = NULL; struct timeval tv; int ret = SD_RES_NO_MEM; unsigned long block_size = SD_DATA_OBJ_SIZE; - int nr_copies; new = zalloc(sizeof(*new)); if (!new) { @@ -51,13 +49,9 @@ static int create_vdi_obj(struct vnode_info *vnode_info, uint32_t epoch, } } - nr_copies = get_nr_copies(vnode_info); - if (nr_copies > copies) - nr_copies = copies; - if (base_vid) { ret = read_object(vid_to_vdi_oid(base_vid), (char *)base, - sizeof(*base), 0, nr_copies); + sizeof(*base), 0); if (ret != SD_RES_SUCCESS) { ret = SD_RES_BASE_VDI_READ; goto out; @@ -72,7 +66,7 @@ static int create_vdi_obj(struct vnode_info *vnode_info, uint32_t epoch, name, cur_vid, base_vid); ret = read_object(vid_to_vdi_oid(cur_vid), (char *)cur, - SD_INODE_HEADER_SIZE, 0, nr_copies); + SD_INODE_HEADER_SIZE, 0); if (ret != SD_RES_SUCCESS) { vprintf(SDOG_ERR, "failed\n"); ret = SD_RES_BASE_VDI_READ; @@ -89,7 +83,7 @@ static int create_vdi_obj(struct vnode_info *vnode_info, uint32_t epoch, new->ctime = (uint64_t) tv.tv_sec << 32 | tv.tv_usec * 1000; new->vdi_size = size; new->copy_policy = 0; - new->nr_copies = copies; + new->nr_copies = sys->nr_copies; new->block_size_shift = find_next_bit(&block_size, BITS_PER_LONG, 0); new->snap_id = snapid; @@ -114,7 +108,7 @@ static int create_vdi_obj(struct vnode_info *vnode_info, uint32_t epoch, if (is_snapshot && cur_vid != base_vid) { ret = write_object(vid_to_vdi_oid(cur_vid), (char *)cur, - SD_INODE_HEADER_SIZE, 0, 0, nr_copies, 0); + SD_INODE_HEADER_SIZE, 0, 0, 0); if (ret != 0) { vprintf(SDOG_ERR, "failed\n"); ret = SD_RES_BASE_VDI_READ; @@ -124,7 +118,7 @@ static int create_vdi_obj(struct vnode_info *vnode_info, uint32_t epoch, if (base_vid) { ret = write_object(vid_to_vdi_oid(base_vid), (char *)base, - SD_INODE_HEADER_SIZE, 0, 0, nr_copies, 0); + SD_INODE_HEADER_SIZE, 0, 0, 0); if (ret != 0) { vprintf(SDOG_ERR, "failed\n"); ret = SD_RES_BASE_VDI_WRITE; @@ -133,7 +127,7 @@ static int create_vdi_obj(struct vnode_info *vnode_info, uint32_t epoch, } ret = write_object(vid_to_vdi_oid(new_vid), (char *)new, sizeof(*new), - 0, 0, nr_copies, 1); + 0, 0, 1); if (ret != 0) ret = SD_RES_VDI_WRITE; @@ -144,15 +138,13 @@ out: return ret; } -static int find_first_vdi(struct vnode_info *vnode_info, uint32_t epoch, - unsigned long start, unsigned long end, char *name, char *tag, - uint32_t snapid, uint32_t *vid, unsigned long *deleted_nr, - uint32_t *next_snap, unsigned int *inode_nr_copies, - uint64_t *ctime) +static int find_first_vdi(unsigned long start, unsigned long end, char *name, + char *tag, uint32_t snapid, uint32_t *vid, + unsigned long *deleted_nr, uint32_t *next_snap, + unsigned int *inode_nr_copies, uint64_t *ctime) { struct sheepdog_inode *inode = NULL; unsigned long i; - int nr_copies; int ret = SD_RES_NO_MEM; int vdi_found = 0; @@ -162,11 +154,9 @@ static int find_first_vdi(struct vnode_info *vnode_info, uint32_t epoch, goto out; } - nr_copies = get_nr_copies(vnode_info); - for (i = start; i >= end; i--) { ret = read_object(vid_to_vdi_oid(i), (char *)inode, - SD_INODE_HEADER_SIZE, 0, nr_copies); + SD_INODE_HEADER_SIZE, 0); if (ret != SD_RES_SUCCESS) { ret = SD_RES_EIO; goto out_free_inode; @@ -206,8 +196,7 @@ out: return ret; } -static int do_lookup_vdi(struct vnode_info *vnode_info, uint32_t epoch, - char *name, int namelen, uint32_t *vid, char *tag, +static int do_lookup_vdi(char *name, int namelen, uint32_t *vid, char *tag, uint32_t snapid, uint32_t *next_snapid, unsigned long *right_nr, unsigned long *deleted_nr, unsigned int *nr_copies, uint64_t *ctime) @@ -227,7 +216,7 @@ static int do_lookup_vdi(struct vnode_info *vnode_info, uint32_t epoch, } else if (nr < SD_NR_VDIS) { right_side: /* look up on the right side of the hash point */ - ret = find_first_vdi(vnode_info, epoch, nr - 1, start_nr, name, + ret = find_first_vdi(nr - 1, start_nr, name, tag, snapid, vid, deleted_nr, next_snapid, nr_copies, ctime); return ret; @@ -239,7 +228,7 @@ static int do_lookup_vdi(struct vnode_info *vnode_info, uint32_t epoch, return SD_RES_FULL_VDI; else if (nr) { /* look up on the left side of the hash point */ - ret = find_first_vdi(vnode_info, epoch, nr - 1, 0, name, + ret = find_first_vdi(nr - 1, 0, name, tag, snapid, vid, deleted_nr, next_snapid, nr_copies, ctime); if (ret == SD_RES_NO_VDI) @@ -253,21 +242,19 @@ static int do_lookup_vdi(struct vnode_info *vnode_info, uint32_t epoch, } } -int lookup_vdi(struct vnode_info *vnode_info, uint32_t epoch, char *name, - char *tag, uint32_t *vid, uint32_t snapid, - unsigned int *nr_copies, uint64_t *ctime) +int lookup_vdi(char *name, char *tag, uint32_t *vid, uint32_t snapid, + unsigned int *nr_copies, uint64_t *ctime) { uint32_t dummy0; unsigned long dummy1, dummy2; - return do_lookup_vdi(vnode_info, epoch, name, strlen(name), vid, tag, + return do_lookup_vdi(name, strlen(name), vid, tag, snapid, &dummy0, &dummy1, &dummy2, nr_copies, ctime); } -int add_vdi(struct vnode_info *vnode_info, uint32_t epoch, char *data, - int data_len, uint64_t size, uint32_t *new_vid, uint32_t base_vid, - uint32_t copies, int is_snapshot, unsigned int *nr_copies) +int add_vdi(char *data, int data_len, uint64_t size, uint32_t *new_vid, + uint32_t base_vid, int is_snapshot, unsigned int *nr_copies) { uint32_t cur_vid = 0; uint32_t next_snapid; @@ -280,7 +267,7 @@ int add_vdi(struct vnode_info *vnode_info, uint32_t epoch, char *data, name = data; - ret = do_lookup_vdi(vnode_info, epoch, name, strlen(name), &cur_vid, + ret = do_lookup_vdi(name, strlen(name), &cur_vid, NULL, 0, &next_snapid, &right_nr, &deleted_nr, nr_copies, NULL); @@ -314,24 +301,14 @@ int add_vdi(struct vnode_info *vnode_info, uint32_t epoch, char *data, is_snapshot ? "snapshot" : "vdi", name, size, *new_vid, base_vid, cur_vid); - if (!copies) { - vprintf(SDOG_WARNING, - "using default replication level of %d copies\n", - sys->nr_copies); - copies = sys->nr_copies; - } - - return create_vdi_obj(vnode_info, epoch, name, *new_vid, size, - base_vid, cur_vid, copies, next_snapid, - is_snapshot); + return create_vdi_obj(name, *new_vid, size, base_vid, + cur_vid, next_snapid, is_snapshot); } -static int start_deletion(struct vnode_info *vnode_info, uint32_t vid, - uint32_t epoch); +static int start_deletion(uint32_t vid); -int del_vdi(struct vnode_info *vnode_info, uint32_t epoch, char *data, - int data_len, uint32_t *vid, uint32_t snapid, - unsigned int *nr_copies) +int del_vdi(char *data, int data_len, uint32_t *vid, uint32_t snapid, + unsigned int *nr_copies) { char *name = data, *tag; uint32_t dummy0; @@ -347,12 +324,13 @@ int del_vdi(struct vnode_info *vnode_info, uint32_t epoch, char *data, goto out; } - ret = do_lookup_vdi(vnode_info, epoch, name, strlen(name), vid, tag, - snapid, &dummy0, &dummy1, &dummy2, nr_copies, NULL); + ret = do_lookup_vdi(name, strlen(name), vid, tag, + snapid, &dummy0, &dummy1, &dummy2, + nr_copies, NULL); if (ret != SD_RES_SUCCESS) goto out; - ret = start_deletion(vnode_info, *vid, epoch); + ret = start_deletion(*vid); out: return ret; } @@ -370,7 +348,6 @@ int read_vdis(char *data, int len, unsigned int *rsp_len) struct deletion_work { uint32_t done; - uint32_t epoch; struct work work; struct list_head dw_siblings; @@ -379,8 +356,6 @@ struct deletion_work { int count; uint32_t *buf; - - struct vnode_info *vnodes; }; static LIST_HEAD(deletion_work_list); @@ -389,7 +364,6 @@ static int delete_inode(struct deletion_work *dw) { struct sheepdog_inode *inode = NULL; int ret = SD_RES_SUCCESS; - int nr_copies; inode = zalloc(sizeof(*inode)); if (!inode) { @@ -397,10 +371,8 @@ static int delete_inode(struct deletion_work *dw) goto out; } - nr_copies = get_nr_copies(dw->vnodes); - ret = read_object(vid_to_vdi_oid(dw->vid), (char *)inode, - SD_INODE_HEADER_SIZE, 0, nr_copies); + SD_INODE_HEADER_SIZE, 0); if (ret != SD_RES_SUCCESS) { ret = SD_RES_EIO; goto out; @@ -409,7 +381,7 @@ static int delete_inode(struct deletion_work *dw) memset(inode->name, 0, sizeof(inode->name)); ret = write_object(vid_to_vdi_oid(dw->vid), (char *)inode, - SD_INODE_HEADER_SIZE, 0, 0, nr_copies, 0); + SD_INODE_HEADER_SIZE, 0, 0, 0); if (ret != 0) { ret = SD_RES_EIO; goto out; @@ -427,7 +399,6 @@ static void delete_one(struct work *work) uint32_t vdi_id = *(dw->buf + dw->count - dw->done - 1); int ret, i; struct sheepdog_inode *inode = NULL; - int nr_copies; eprintf("%d %d, %16x\n", dw->done, dw->count, vdi_id); @@ -437,11 +408,8 @@ static void delete_one(struct work *work) goto out; } - nr_copies = get_nr_copies(dw->vnodes); - ret = read_object(vid_to_vdi_oid(vdi_id), - (void *)inode, sizeof(*inode), - 0, nr_copies); + (void *)inode, sizeof(*inode), 0); if (ret != SD_RES_SUCCESS) { eprintf("cannot find VDI object\n"); @@ -465,7 +433,7 @@ static void delete_one(struct work *work) continue; } - ret = remove_object(oid, nr_copies); + ret = remove_object(oid); if (ret != SD_RES_SUCCESS) eprintf("remove object %" PRIx64 " fail, %d\n", oid, ret); @@ -478,7 +446,7 @@ static void delete_one(struct work *work) memset(inode->name, 0, sizeof(inode->name)); write_object(vid_to_vdi_oid(vdi_id), (void *)inode, - sizeof(*inode), 0, 0, nr_copies, 0); + sizeof(*inode), 0, 0, 0); out: free(inode); } @@ -495,7 +463,6 @@ static void delete_one_done(struct work *work) list_del(&dw->dw_siblings); - put_vnode_info(dw->vnodes); free(dw->buf); free(dw); @@ -513,9 +480,6 @@ static int fill_vdi_list(struct deletion_work *dw, uint32_t root_vid) struct sheepdog_inode *inode = NULL; int done = dw->count; uint32_t vid; - int nr_copies; - - nr_copies = get_nr_copies(dw->vnodes); inode = malloc(SD_INODE_HEADER_SIZE); if (!inode) { @@ -527,7 +491,7 @@ static int fill_vdi_list(struct deletion_work *dw, uint32_t root_vid) again: vid = dw->buf[done++]; ret = read_object(vid_to_vdi_oid(vid), (char *)inode, - SD_INODE_HEADER_SIZE, 0, nr_copies); + SD_INODE_HEADER_SIZE, 0); if (ret != SD_RES_SUCCESS) { eprintf("cannot find VDI object\n"); @@ -554,12 +518,10 @@ out: return 1; } -static uint64_t get_vdi_root(struct vnode_info *vnode_info, uint32_t epoch, - uint32_t vid, int *cloned) +static uint64_t get_vdi_root(uint32_t vid, int *cloned) { int ret; struct sheepdog_inode *inode = NULL; - int nr_copies = get_nr_copies(vnode_info); *cloned = 0; @@ -571,7 +533,7 @@ static uint64_t get_vdi_root(struct vnode_info *vnode_info, uint32_t epoch, } next: ret = read_object(vid_to_vdi_oid(vid), (char *)inode, - SD_INODE_HEADER_SIZE, 0, nr_copies); + SD_INODE_HEADER_SIZE, 0); if (vid == inode->vdi_id && inode->snap_id == 1 && inode->parent_vdi_id != 0 @@ -599,8 +561,7 @@ out: return vid; } -static int start_deletion(struct vnode_info *vnode_info, uint32_t vid, - uint32_t epoch) +static int start_deletion(uint32_t vid) { struct deletion_work *dw = NULL; int ret = SD_RES_NO_MEM, cloned; @@ -617,14 +578,11 @@ static int start_deletion(struct vnode_info *vnode_info, uint32_t vid, dw->count = 0; dw->vid = vid; - dw->epoch = epoch; dw->work.fn = delete_one; dw->work.done = delete_one_done; - dw->vnodes = vnode_info; - - root_vid = get_vdi_root(dw->vnodes, dw->epoch, dw->vid, &cloned); + root_vid = get_vdi_root(dw->vid, &cloned); if (!root_vid) { ret = SD_RES_EIO; goto err; @@ -651,12 +609,6 @@ static int start_deletion(struct vnode_info *vnode_info, uint32_t vid, if (dw->count == 0) goto out; - /* - * Only grab the vnode_info reference once we know that we can't fail in - * this helper thread. - */ - grab_vnode_info(dw->vnodes); - if (!list_empty(&deletion_work_list)) { list_add_tail(&dw->dw_siblings, &deletion_work_list); goto out; @@ -674,23 +626,17 @@ err: return ret; } -int get_vdi_attr(struct vnode_info *vnode_info, uint32_t epoch, - struct sheepdog_vdi_attr *vattr, int data_len, - uint32_t vid, uint32_t *attrid, int copies, uint64_t ctime, +int get_vdi_attr(struct sheepdog_vdi_attr *vattr, int data_len, + uint32_t vid, uint32_t *attrid, uint64_t ctime, int wr, int excl, int delete) { struct sheepdog_vdi_attr tmp_attr; uint64_t oid, hval; uint32_t end; - int nr_copies; int ret; vattr->ctime = ctime; - nr_copies = get_nr_copies(vnode_info); - if (nr_copies > copies) - nr_copies = copies; - /* we cannot include value_len for calculating the hash value */ hval = fnv_64a_buf(vattr->name, sizeof(vattr->name), FNV1A_64_INIT); hval = fnv_64a_buf(vattr->tag, sizeof(vattr->tag), hval); @@ -702,11 +648,11 @@ int get_vdi_attr(struct vnode_info *vnode_info, uint32_t epoch, while (*attrid != end) { oid = vid_to_attr_oid(vid, *attrid); ret = read_object(oid, (char *)&tmp_attr, - sizeof(tmp_attr), 0, nr_copies); + sizeof(tmp_attr), 0); if (ret == SD_RES_NO_OBJ && wr) { - ret = write_object(oid, (char *)vattr, data_len, 0, 0, - nr_copies, 1); + ret = write_object(oid, (char *)vattr, + data_len, 0, 0, 1); if (ret) ret = SD_RES_EIO; else @@ -727,15 +673,14 @@ int get_vdi_attr(struct vnode_info *vnode_info, uint32_t epoch, else if (delete) { ret = write_object(oid, (char *)"", 1, offsetof(struct sheepdog_vdi_attr, name), - 0, nr_copies, 0); + 0, 0); if (ret) ret = SD_RES_EIO; else ret = SD_RES_SUCCESS; } else if (wr) { ret = write_object(oid, (char *)vattr, - SD_ATTR_OBJ_SIZE, 0, 0, - nr_copies, 0); + SD_ATTR_OBJ_SIZE, 0, 0, 0); if (ret) ret = SD_RES_EIO; -- 1.7.10 |