At Fri, 22 Aug 2014 17:39:23 +0900, Hitoshi Mitake wrote: > > This patch does a little refactoring of generational reference > counting. It also fixes trivial problems of pseudo code in > doc/object-reclaim.txt. > > Signed-off-by: Hitoshi Mitake <mitake.hito...@lab.ntt.co.jp> > --- > doc/object-reclaim.txt | 6 +++++- > sheep/vdi.c | 21 ++++++++------------- > 2 files changed, 13 insertions(+), 14 deletions(-)
Applied. Thanks, Hitoshi > > diff --git a/doc/object-reclaim.txt b/doc/object-reclaim.txt > index 4cef5f5..d9c8fca 100644 > --- a/doc/object-reclaim.txt > +++ b/doc/object-reclaim.txt > @@ -43,6 +43,9 @@ Generational reference counting is performed as follows: > reference B is initialized as follows: > > for (i = 0; i < MAX_DATA_OBJS; i++) { > + if (!A.data_vdi_id[i]) > + continue; > + > B.gref[i].generation = A.gref[i].generation + 1; > B.gref[i].count = 0; > } > @@ -50,7 +53,8 @@ Generational reference counting is performed as follows: > In addition, A.gref.count's are incremented: > > for (i = 0; i < MAX_DATA_OBJS; i++) { > - A.gref[i].count++; > + if (A.data_vdi_id[i]) > + A.gref[i].count++; > } > > 3. When a object o is removed, a decrement message is sent to its > diff --git a/sheep/vdi.c b/sheep/vdi.c > index 05cae7b..0adbea0 100644 > --- a/sheep/vdi.c > +++ b/sheep/vdi.c > @@ -992,10 +992,8 @@ static int snapshot_vdi(const struct vdi_iocb *iocb, > uint32_t new_snapid, > base->snap_ctime = iocb->time; > > for (int i = 0; i < ARRAY_SIZE(base->gref); i++) { > - if (!base->data_vdi_id[i]) > - continue; > - > - base->gref[i].count++; > + if (base->data_vdi_id[i]) > + base->gref[i].count++; > } > > ret = sd_write_object(vid_to_vdi_oid(base_vid), (char *)base, > @@ -1007,13 +1005,8 @@ static int snapshot_vdi(const struct vdi_iocb *iocb, > uint32_t new_snapid, > } > > /* create a new vdi */ > - new = alloc_inode(iocb, new_snapid, new_vid, base->data_vdi_id, NULL); > - for (int i = 0; i < ARRAY_SIZE(base->gref); i++) { > - if (!base->data_vdi_id[i]) > - continue; > - > - new->gref[i].generation = base->gref[i].generation + 1; > - } > + new = alloc_inode(iocb, new_snapid, new_vid, base->data_vdi_id, > + base->gref); > ret = sd_write_object(vid_to_vdi_oid(new_vid), (char *)new, > sizeof(*new), 0, true); > if (ret != SD_RES_SUCCESS) > @@ -1073,8 +1066,10 @@ static int rebase_vdi(const struct vdi_iocb *iocb, > uint32_t new_snapid, > goto out; > } > > - for (int i = 0; i < ARRAY_SIZE(base->gref); i++) > - base->gref[i].count++; > + for (int i = 0; i < ARRAY_SIZE(base->gref); i++) { > + if (base->data_vdi_id[i]) > + base->gref[i].count++; > + } > /* update current working vdi */ > ret = sd_write_object(vid_to_vdi_oid(base_vid), (char *)base->gref, > sizeof(base->gref), > -- > 1.8.3.2 > -- sheepdog mailing list sheepdog@lists.wpkg.org http://lists.wpkg.org/mailman/listinfo/sheepdog