(Drop qemu-devel from CC since this patch is specific to sheepdog.)

At Sat, 13 Apr 2013 19:27:20 +0800,
Liu Yuan wrote:
> 
> +static int local_discard(struct request *req)
> +{
> +     uint64_t oid = req->rq.obj.oid;
> +     uint32_t vid = oid_to_vid(oid), zero = 0;
> +     int ret, cp = get_vdi_copy_number(vid), idx = data_oid_to_idx(oid);
> +
> +     sd_dprintf("%"PRIx64, oid);
> +     ret = remove_object(oid, cp);
> +     if (ret != SD_RES_SUCCESS)
> +             return ret;
> +     return write_object(vid_to_vdi_oid(vid), (char *)&zero, sizeof(zero),
> +                         SD_INODE_HEADER_SIZE + sizeof(vid) * idx, 0, cp);
> +}

We should update the vdi object first before removing data objects.
Otherwise, if write_object() fails, sheep can return SD_RES_NO_OBJ to
VMs.

Thanks,

Kazutaka
-- 
sheepdog mailing list
[email protected]
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to