retry: Avoid assertion during retried extents
If the plugin's .extents made progress before failing, retrying the
call with the original offset that differs from the offset expected by
extents will cause an assertion failure. We have to perform each
retry iteration with a fresh extents object, and copy it on success.
The sh plugin could trigger this with an extents callback that
produces valid data followed by garbage, as will be shown in the next
patch.
Fixes:
f0f0ec49
Signed-off-by: Eric Blake <eblake@redhat.com>