static int qemu_rbd_snap_remove(BlockDriverState *bs, const char *snapshot_id, const char *snapshot_name, Error **errp) { BDRVRBDState *s = bs->opaque; int r; if (!snapshot_name) { error_setg(errp, "rbd need a valid snapshot name"); return -EINVAL; } /* If snapshot_id is specified, it must be equal to name, see qemu_rbd_snap_list() */ if (snapshot_id && strcmp(snapshot_id, snapshot_name)) { error_setg(errp, "rbd do not support snapshot id, it should be NULL or " "equal to snapshot name"); return -EINVAL; } r = rbd_snap_remove(s->image, snapshot_name); if (r < 0) { error_setg_errno(errp, -r, "Failed to remove the snapshot"); } return r; }
static int qemu_rbd_snap_remove(BlockDriverState *bs, const char *snapshot_name) { BDRVRBDState *s = bs->opaque; int r; r = rbd_snap_remove(s->image, snapshot_name); return r; }
void check_clones() { char filename[1024]; char imagename[1024]; int ret, fd; rbd_image_t cur_image; struct stat file_info; while (num_clones > 0) { prt("checking clone #%d\n", num_clones); --num_clones; clone_imagename(imagename, sizeof(imagename), num_clones); if ((ret = rbd_open(ioctx, imagename, &cur_image, NULL)) < 0) { simple_err("check_clones: rbd open", ret); exit(167); } clone_filename(filename, sizeof(filename), num_clones + 1); if ((fd = open(filename, O_RDONLY)) < 0) { simple_err("check_clones: open", -errno); exit(168); } prt("checking image %s against file %s\n", imagename, filename); if ((ret = fstat(fd, &file_info)) < 0) { simple_err("check_clones: fstat", -errno); exit(169); } if ((ret = pread(fd, good_buf, file_info.st_size, 0)) < 0) { simple_err("check_clones: pread", -errno); exit(170); } if ((ret = rbd_read(cur_image, 0, file_info.st_size, temp_buf)) < 0) { simple_err("check_clones: rbd_read", ret); exit(171); } close(fd); check_buffers(0, file_info.st_size); unlink(filename); /* remove the snapshot if it exists, ignore the error from the last clone. */ rbd_snap_unprotect(cur_image, "snap"); rbd_snap_remove(cur_image, "snap"); rbd_close(cur_image); rbd_remove(ioctx, imagename); } }
void test_delete_snap(rbd_image_t image, const char *name) { assert(rbd_snap_remove(image, name) == 0); }