On Thu, Apr 17, 2025 at 10:49:55AM +0200, Kevin Wolf wrote:
> Am 14.04.2025 um 22:12 hat Stefan Hajnoczi geschrieben:
> > When guests send misaligned discard requests, the block layer breaks
> > them up into a misaligned head, an aligned main body, and a misaligned
> > tail.
> > 
> > The file-posix block driver on Linux returns -EINVAL on misaligned
> > discard requests. This causes bdrv_co_pdiscard() to fail and guests
> > configured with werror=stop will pause.
> > 
> > Add a special case for misaligned head/tail requests. Simply continue
> > when EINVAL is encountered so that the aligned main body of the request
> > can be completed and the guest is not paused. This is the best we can do
> > when guest discard limits do not match the host discard limits.
> > 
> > Fixes: https://issues.redhat.com/browse/RHEL-86032
> > Signed-off-by: Stefan Hajnoczi <stefa...@redhat.com>
> > Reviewed-by: Hanna Czenczek <hre...@redhat.com>
> 
> It would be good to also update the comment a bit further up:
> 
>     /* Discard is advisory, but some devices track and coalesce
>      * unaligned requests, so we must pass everything down rather than
>      * round here.  Still, most devices will just silently ignore
>      * unaligned requests (by returning -ENOTSUP), so we must fragment
>      * the request accordingly.  */
> 
> I'm not sure where the -ENOTSUP came from (Eric, do you remember?), but
> we should at least mention this -EINVAL case separately.

I don't remember if -ENOTSUP came from individual drivers, or from
actual hardware; but I agree that we are now at a point where there is
more than one errno value for obviously indicating that an unaligned
attempt was rejected as useless, and that we are best off ignoring
those errors.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.
Virtualization:  qemu.org | libguestfs.org


Reply via email to