Ejemplo n.º 1
0
int
krbd_resize(struct rbd_ctx *ctx, uint64_t size)
{
	int ret;

	assert(size % truncbdy == 0);

	/*
	 * When krbd detects a size change, it calls revalidate_disk(),
	 * which ends up calling invalidate_bdev(), which invalidates
	 * clean pages and does nothing about dirty pages beyond the
	 * new size.  The preceding cache flush makes sure those pages
	 * are invalidated, which is what we need on shrink:
	 *
	 *  write 0..1M
	 *  resize 0
	 *  resize 2M
	 *  write 1..2M
	 *
	 * results in "data data" rather than "0000 data".
	 */
	ret = __krbd_flush(ctx);
	if (ret < 0)
		return ret;

	return __librbd_resize(ctx, size);
}
Ejemplo n.º 2
0
Archivo: fsx.c Proyecto: CzBiX/ceph
int
krbd_resize(struct rbd_ctx *ctx, uint64_t size)
{
	int ret;

	assert(size % truncbdy == 0);

	/*
	 * This is essential: when krbd detects a size change, it calls
	 * revalidate_disk(), which ends up calling invalidate_bdev(),
	 * which invalidates only clean buffers.  The cache flush makes
	 * it invalidate everything, which is what we need if we are
	 * shrinking.
	 */
	ret = __krbd_flush(ctx);
	if (ret < 0)
		return ret;

	return __librbd_resize(ctx, size);
}
Ejemplo n.º 3
0
Archivo: fsx.c Proyecto: CzBiX/ceph
int
librbd_resize(struct rbd_ctx *ctx, uint64_t size)
{
	return __librbd_resize(ctx, size);
}