At Mon, 3 Feb 2014 17:46:08 +0900, MORITA Kazutaka wrote: > > We cannot access dw after we call delete_vdis_done() because it may be > already freed. > > Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp> > --- > sheep/vdi.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) Looks good to me. Thanks a lot for this fix. Reviewed-by: Hitoshi Mitake <mitake.hitoshi at lab.ntt.co.jp> Thanks, Hitoshi > > diff --git a/sheep/vdi.c b/sheep/vdi.c > index 3414b05..080bc82 100644 > --- a/sheep/vdi.c > +++ b/sheep/vdi.c > @@ -1031,7 +1031,7 @@ static uint64_t get_vdi_root(uint32_t vid, bool *cloned) > static int start_deletion(struct request *req, uint32_t vid) > { > struct deletion_work *dw = NULL; > - int ret = SD_RES_SUCCESS; > + int ret = SD_RES_SUCCESS, finish_fd; > bool cloned; > uint32_t root_vid; > > @@ -1039,7 +1039,7 @@ static int start_deletion(struct request *req, uint32_t vid) > dw->delete_vid_array = xzalloc(SD_INODE_SIZE - SD_INODE_HEADER_SIZE); > dw->delete_vid_count = 0; > dw->target_vid = vid; > - dw->finish_fd = eventfd(0, 0); > + finish_fd = dw->finish_fd = eventfd(0, 0); > if (dw->finish_fd < 0) { > sd_err("cannot create an eventfd for notifying finish of" > " deletion info: %m"); > @@ -1088,8 +1088,8 @@ static int start_deletion(struct request *req, uint32_t vid) > * the event fd is written by delete_one_vdi_done(), when all vdis of > * deletion_work are deleted > */ > - eventfd_xread(dw->finish_fd); > - close(dw->finish_fd); > + eventfd_xread(finish_fd); > + close(finish_fd); > > return ret; > out: > -- > 1.7.10.4 > > -- > sheepdog mailing list > sheepdog at lists.wpkg.org > http://lists.wpkg.org/mailman/listinfo/sheepdog |