file-posix does not need to basically duplicate our fallback truncate implementation; and sheepdog can fall back to it for "shrinking" files.
Signed-off-by: Max Reitz <[email protected]> --- block/file-posix.c | 21 +-------------------- block/sheepdog.c | 2 +- 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/block/file-posix.c b/block/file-posix.c index ab05b51a66..bcddfc7fbe 100644 --- a/block/file-posix.c +++ b/block/file-posix.c @@ -2031,23 +2031,7 @@ static int coroutine_fn raw_co_truncate(BlockDriverState *bs, int64_t offset, return raw_regular_truncate(bs, s->fd, offset, prealloc, errp); } - if (prealloc != PREALLOC_MODE_OFF) { - error_setg(errp, "Preallocation mode '%s' unsupported for this " - "non-regular file", PreallocMode_str(prealloc)); - return -ENOTSUP; - } - - if (S_ISCHR(st.st_mode) || S_ISBLK(st.st_mode)) { - if (offset > raw_getlength(bs)) { - error_setg(errp, "Cannot grow device files"); - return -EINVAL; - } - } else { - error_setg(errp, "Resizing this file is not supported"); - return -ENOTSUP; - } - - return 0; + return -ENOTSUP; } #ifdef __OpenBSD__ @@ -3413,7 +3397,6 @@ static BlockDriver bdrv_host_device = { .bdrv_io_unplug = raw_aio_unplug, .bdrv_attach_aio_context = raw_aio_attach_aio_context, - .bdrv_co_truncate = raw_co_truncate, .bdrv_getlength = raw_getlength, .bdrv_get_info = raw_get_info, .bdrv_get_allocated_file_size @@ -3537,7 +3520,6 @@ static BlockDriver bdrv_host_cdrom = { .bdrv_io_unplug = raw_aio_unplug, .bdrv_attach_aio_context = raw_aio_attach_aio_context, - .bdrv_co_truncate = raw_co_truncate, .bdrv_getlength = raw_getlength, .has_variable_length = true, .bdrv_get_allocated_file_size @@ -3669,7 +3651,6 @@ static BlockDriver bdrv_host_cdrom = { .bdrv_io_unplug = raw_aio_unplug, .bdrv_attach_aio_context = raw_aio_attach_aio_context, - .bdrv_co_truncate = raw_co_truncate, .bdrv_getlength = raw_getlength, .has_variable_length = true, .bdrv_get_allocated_file_size diff --git a/block/sheepdog.c b/block/sheepdog.c index 6f402e5d4d..4af4961cb7 100644 --- a/block/sheepdog.c +++ b/block/sheepdog.c @@ -2301,7 +2301,7 @@ static int coroutine_fn sd_co_truncate(BlockDriverState *bs, int64_t offset, max_vdi_size = (UINT64_C(1) << s->inode.block_size_shift) * MAX_DATA_OBJS; if (offset < old_size) { error_setg(errp, "shrinking is not supported"); - return -EINVAL; + return -ENOTSUP; } else if (offset > max_vdi_size) { error_setg(errp, "too big image size"); return -EINVAL; -- 2.21.0
