Milan Broz <[email protected]>: > Hi, That patch doesn't fix the problem. I will send more details within some days, hopefully today.
Also, I just found that for reliable reproduction you need to do "swapoff /dev/mapper/swap; cat /dev/mapper/swap > /dev/null" after resume (assuming you were able to resume, of course). So here is updated script for reproduction in Qemu: https://zerobin.net/?0aa379bae218cf92#DDVFMvfi6S3ydCQLSrL+us1lHjXQJIZasW55JI7gEfU= This script is very easy to use! Try 1-2 times to reproduce. Here is result of that script: https://zerobin.net/?3d9447900052f9ce#ng0htJDAdSsvqVunL+BnoLHXszM6ardt9R3wkbO9L28= This results are on 43e9ad0c55a3, which is current master, without Mikulas Patocka's patch, but with this Mario's patch: https://lore.kernel.org/linux-pm/[email protected]/ . Mario's patch is needed, otherwise we get WARNING when we try to hibernate. Again: these logs are without Mikulas Patocka's patch. I will send results of testing his patch later, hopefully today. But don't expect much. As I said, his patch doesn't work. "log-def-1" is output of first Qemu invocation (i. e. first boot) with default integritysetup options. "log-def-2" is second Qemu invocation (i. e. when we try to resume). log-bit-{1,2} is same thing, but with "--integrity-bitmap-mode" added to "integritysetup format" and "integritysetup open". log-no-{1,2} is same, but with "--integrity-no-journal". log-nodm-{1,2} is same, but without dm-integrity at all, i. e. we create swap directly on partition. As you can see in logs, hibernate with dm-integrity never works perfectly. We either unable to resume, either we are able to resume, but then get integrity errors when we do "cat /dev/mapper/swap > /dev/null". Swap directly on partition works. Again: you may need 1-2 attempts to reproduce using this script. Also: the bug is reproducible even if we do "echo test_resume > /sys/power/disk". > Are you sure you used --integrity-no-journal both in activation before > hibernation and also in resume? If not, please try it. I'm totally sure. (You can see script above and "set -x" output in logs.) > You can verify it with "integritysetup status <device>" - it should say > "journal: not active". I just checked. It indeed says so. > And if it does not work, could you try to use -integrity-recovery-mode the > same > way (both before hibernation and later in resume)? This will effectively > ignore checksums So I should pass it to both "integritysetup open" invocations, but not to "integritysetup format" invocation. Right? Okay, I did so. I. e. I did this: integritysetup format --batch-mode --integrity xxhash64 /dev/sda # when formatting integritysetup open --integrity-recovery-mode --integrity xxhash64 /dev/sda swap # before hibernate integritysetup open --integrity-recovery-mode --integrity xxhash64 /dev/sda early-swap # when resuming And something completely unexpected happened! "swapon" failed immediately after "mkswap"!!! I. e. "swapon" was unable to read swap signature right after "mkswap". Here is log: https://zerobin.net/?ebe34fc9ce94be45#6DWKSXvgUDKIrF4299th0ylhQNEcdqeeBfxzSJjROpA= This seems like another dm-integrity bug. > You can verify it with "integritysetup status <device>" - it should say > "mode: read/write recovery". Yes, it says so in logs above. > You can also try to decrease journal commit time with --journal-commit-time > option, I just put "--journal-commit-time 1" to format and both opens. I got the same result I get with default options: i. e. blkid returns "swap" instead of "swsuspend", when I try to resume. Here are logs: https://zerobin.net/?c5f8320eb89b1cfb#drrxRgnGk817oEDUA8idhn+WEQgocWjtbsAYuEHF5rI= . > Redundancy? You mean data integrity protection? There is no redundancy, only > additional authentication tag > (detecting integrity error but not correcting it). Yes, I meant integrity protection. -- Askar Safin
