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