[Sheepdog] [PATCH 2/2] sheep: avoid reading entire vdi object
MORITA Kazutaka
morita.kazutaka at lab.ntt.co.jp
Sat Feb 5 17:11:01 CET 2011
The size of a vdi object is large (4 MB), so we should read/write the
object carefully not to reduce the performance.
Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
---
sheep/vdi.c | 24 ++++++++++++------------
1 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/sheep/vdi.c b/sheep/vdi.c
index 1490968..cbc0fff 100644
--- a/sheep/vdi.c
+++ b/sheep/vdi.c
@@ -47,7 +47,7 @@ static int create_vdi_obj(uint32_t epoch, char *name, uint32_t new_vid, uint64_t
ret = read_object(entries, nr_nodes, epoch,
vid_to_vdi_oid(cur_vid), (char *)&cur,
- sizeof(cur), 0, copies);
+ SD_INODE_HEADER_SIZE, 0, copies);
if (ret < 0) {
vprintf(SDOG_ERR "failed\n");
return SD_RES_BASE_VDI_READ;
@@ -90,7 +90,7 @@ static int create_vdi_obj(uint32_t epoch, char *name, uint32_t new_vid, uint64_t
if (is_snapshot && cur_vid != base_vid) {
ret = write_object(entries, nr_nodes, epoch,
vid_to_vdi_oid(cur_vid), (char *)&cur,
- sizeof(cur), 0, copies, 0);
+ SD_INODE_HEADER_SIZE, 0, copies, 0);
if (ret < 0) {
vprintf(SDOG_ERR "failed\n");
return SD_RES_BASE_VDI_READ;
@@ -100,7 +100,7 @@ static int create_vdi_obj(uint32_t epoch, char *name, uint32_t new_vid, uint64_t
if (base_vid) {
ret = write_object(entries, nr_nodes, epoch,
vid_to_vdi_oid(base_vid), (char *)&base,
- sizeof(base), 0, copies, 0);
+ SD_INODE_HEADER_SIZE, 0, copies, 0);
if (ret < 0) {
vprintf(SDOG_ERR "failed\n");
return SD_RES_BASE_VDI_WRITE;
@@ -135,7 +135,7 @@ static int find_first_vdi(uint32_t epoch, unsigned long start, unsigned long end
for (i = start; i >= end; i--) {
ret = read_object(entries, nr_nodes, epoch,
vid_to_vdi_oid(i), (char *)&inode,
- sizeof(inode), 0, nr_reqs);
+ SD_INODE_HEADER_SIZE, 0, nr_reqs);
if (ret < 0)
return SD_RES_EIO;
@@ -313,16 +313,16 @@ int del_vdi(uint32_t epoch, char *data, int data_len, uint32_t *vid, uint32_t sn
nr_reqs = nr_nodes;
ret = read_object(entries, nr_nodes, epoch,
- vid_to_vdi_oid(*vid), (char *)&inode, sizeof(inode), 0,
- nr_reqs);
+ vid_to_vdi_oid(*vid), (char *)&inode,
+ SD_INODE_HEADER_SIZE, 0, nr_reqs);
if (ret < 0)
return SD_RES_EIO;
memset(inode.name, 0, sizeof(inode.name));
ret = write_object(entries, nr_nodes, epoch,
- vid_to_vdi_oid(*vid), (char *)&inode, sizeof(inode), 0,
- nr_reqs, 0);
+ vid_to_vdi_oid(*vid), (char *)&inode,
+ SD_INODE_HEADER_SIZE, 0, nr_reqs, 0);
if (ret < 0)
return SD_RES_EIO;
@@ -432,8 +432,8 @@ static int fill_vdi_list(struct deletion_work *dw,
again:
vid = ((uint32_t *)dw->buf)[done++];
ret = read_object(entries, nr_entries, dw->epoch,
- vid_to_vdi_oid(vid), (void *)&inode, sizeof(inode),
- 0, sys->nr_sobjs);
+ vid_to_vdi_oid(vid), (void *)&inode,
+ SD_INODE_HEADER_SIZE, 0, sys->nr_sobjs);
if (ret != sizeof(inode)) {
eprintf("cannot find vdi object\n");
@@ -464,8 +464,8 @@ static uint64_t get_vdi_root(struct sheepdog_node_list_entry *entries,
next:
ret = read_object(entries, nr_entries, epoch,
- vid_to_vdi_oid(vid),
- (void *)&inode, sizeof(inode), 0, sys->nr_sobjs);
+ vid_to_vdi_oid(vid), (void *)&inode,
+ SD_INODE_HEADER_SIZE, 0, sys->nr_sobjs);
if (ret != sizeof(inode)) {
eprintf("cannot find vdi object\n");
--
1.5.6.5
More information about the sheepdog
mailing list