On Mon, Jul 30, 2018 at 5:45 PM Eric Blake <eblake(a)redhat.com> wrote:
On 07/28/2018 06:42 AM, Nir Soffer wrote:
> Fix issues Eric found in the original patch:
>
https://www.redhat.com/archives/libguestfs/2018-July/msg00072.html
>
> - When handling ENODEV, the caller is expecting ENOTSUPP to trigger
> fallback.
> - ENODEV should be ignored in file_trim.
>
> Tested only on Fedora 28.
> ---
> plugins/file/file.c | 33 ++++++++++++++++++++++++---------
> 1 file changed, 24 insertions(+), 9 deletions(-)
>
> diff --git a/plugins/file/file.c b/plugins/file/file.c
> index a7c07fb..4210adb 100644
> --- a/plugins/file/file.c
> +++ b/plugins/file/file.c
> @@ -50,6 +50,21 @@
>
> static char *filename = NULL;
>
> +#if defined(FALLOC_FL_PUNCH_HOLE) || defined(FALLOC_FL_ZERO_RANGE)
> +static int
> +do_fallocate(int fd, int mode, off_t offset, off_t len)
> +{
Similar name to the normalizing wrapper that qemu uses, but enough
differences that I think you're safe here. (Be careful that you aren't
directly copying code from that project to this one, due to the
difference in licensing).
> + int r = -1;
> + r = fallocate (fd, mode, offset, len);
> + /* kernel 3.10 fails with ENODEV for block device. Kernel >= 4.9 fails
> + with EOPNOTSUPP in this case. Normlize errno to simplify callers.
*/
s/Normlize/Normalize/
> + if (r == -1 && errno == ENODEV) {
> + errno = EOPNOTSUPP;
> + }
Question - do we care about retrying on EINTR? That would also fit well
in this normalizing wrapper. But that can be a separate patch.
I agree.
With the typo fix, I'm okay with this patch fixing up the
immediate
issues. There's still the bigger question of whether we need to revisit
the logic anyways (using _just_ PUNCH_HOLE when we want to guarantee
zeroes and permit unmap, and _just_ ZERO_RANGE when we want to guarantee
zeroes without discarding) - but that was pre-existing and didn't
regress as a result of the immediate issue that this is trying to fix.
I'm not sure that we can use _just_ something because of the compatibility
issues with older kernel and block devices. I hope this is improved in
https://www.redhat.com/archives/libguestfs/2018-July/msg00084.html
I'll send v2 with the typo fix, we need to fix the regression in the
previous
patch first.
Nir