[Sheepdog] [PATCH v5 5/8] sheep: add flush_vdi operation
MORITA Kazutaka
morita.kazutaka at lab.ntt.co.jp
Mon Mar 26 05:33:33 CEST 2012
At Mon, 26 Mar 2012 05:44:21 +0900,
MORITA Kazutaka wrote:
>
> At Sat, 24 Mar 2012 16:47:15 +0800,
> Liu Yuan wrote:
> >
> > From: Liu Yuan <tailai.ly at taobao.com>
> >
> > This is supposed to be initiated by Guest OS, but our collie
> > friend might also like it.
> >
> > Flush operation is operated on vdi basis, that is, when one guest
> > flush its own dirty data, other guests are not affected.
> >
> > - use forward_write_obj_req() to flush dirty objects
> >
> > Signed-off-by: Liu Yuan <tailai.ly at taobao.com>
> > ---
> > include/sheepdog_proto.h | 1 +
> > sheep/object_cache.c | 48 ++++++++++++++++++++++++++++++++++++++++++++-
> > sheep/ops.c | 23 ++++++++++++++++++++++
> > sheep/sheep_priv.h | 2 +
> > sheep/store.c | 7 +++++-
> > 5 files changed, 78 insertions(+), 3 deletions(-)
> >
> > diff --git a/include/sheepdog_proto.h b/include/sheepdog_proto.h
> > index 84f12f1..6138108 100644
> > --- a/include/sheepdog_proto.h
> > +++ b/include/sheepdog_proto.h
> > @@ -29,6 +29,7 @@
> > #define SD_OP_RELEASE_VDI 0x13
> > #define SD_OP_GET_VDI_INFO 0x14
> > #define SD_OP_READ_VDIS 0x15
> > +#define SD_OP_FLUSH_VDI 0x16
> >
> > #define SD_FLAG_CMD_WRITE 0x01
> > #define SD_FLAG_CMD_COW 0x02
> > diff --git a/sheep/object_cache.c b/sheep/object_cache.c
> > index 789a3ef..25b4cbc 100644
> > --- a/sheep/object_cache.c
> > +++ b/sheep/object_cache.c
> > @@ -370,10 +370,54 @@ static uint64_t idx_to_oid(uint32_t vid, uint32_t idx)
> > return vid_to_data_oid(vid, idx);
> > }
> >
> > -static int push_cache_object(int fd, uint64_t oid)
> > +static int push_cache_object(uint32_t vid, uint32_t idx)
> > {
> > + struct request fake_req;
> > + struct sd_obj_req *hdr = (struct sd_obj_req *)&fake_req.rq;
> > + void *buf;
> > + unsigned data_length;
> > + int ret = SD_RES_NO_MEM;
> > + uint64_t oid = idx_to_oid(vid, idx);
> > +
> > dprintf("%"PRIx64"\n", oid);
> > - return 0;
> > +
> > + memset(&fake_req, 0, sizeof(fake_req));
> > + if (is_vdi_obj(oid))
> > + data_length = sizeof(struct sheepdog_inode);
> > + else
> > + data_length = SD_DATA_OBJ_SIZE;
> > +
> > + buf = malloc(data_length);
Use valloc since sheep may run with '-D' option.
Thanks,
Kazutaka
More information about the sheepdog
mailing list