[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