예제 #1
0
파일: rbd.c 프로젝트: nikunjad/qemu
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;
}
예제 #2
0
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;
}
예제 #3
0
파일: fsx.c 프로젝트: athanatos/ceph
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);
	}
}
예제 #4
0
파일: testlibrbd.c 프로젝트: tcloud/ceph
void test_delete_snap(rbd_image_t image, const char *name)
{
  assert(rbd_snap_remove(image, name) == 0);
}