rbd merge-diff doesn't properly handle >2GB diffs
It is using lseek instead of lseek64 -- resulting in an overflow.
lseek(4, 4096, SEEK_CUR) = 2147504762 write(2, "rbd: failed to skip first diff d"..., 35rbd: failed to skip first diff data) = 35
#3 Updated by Josh Durgin over 3 years ago
- Subject changed from rbd merge-diff doesn't properly handle >2GB images to rbd merge-diff doesn't properly handle >2GB diffs
It only seeks to skip parts of the first diff that were overwritten, so a workaround would be to pass the first diff via stdin, i.e.
cat snap1.diff | rbd merge-diff - snap2.diff combined.diff
#8 Updated by Josh Durgin over 3 years ago
No other backports are needed for this - the same change should just be applied to src/rbd.cc in infernalis and hammer. If you like Jason or I can do it. This will be a common issue with rbd backports to infernalis and hammer since there's been a lot of refactoring recently.