checkpoint-restore / criu

Checkpoint/Restore tool
criu.org
Other
2.76k stars 559 forks source link

pagemap-cache: handle short reads #2411

Closed rst0git closed 1 month ago

rst0git commented 1 month ago

It is possible for pread() to return fewer number of bytes than requested. In such case, we need to repeat the read operation with appropriate offset.

Fixes: https://github.com/checkpoint-restore/criu/issues/2365

avagin commented 1 month ago
======================== Run zdtm/static/maps02 in uns =========================
Start test
./maps02 --pidfile=maps02.pid --outfile=maps02.out
Run criu dump
Run criu restore
=[log]=> dump/zdtm/static/maps02/117/1/restore.log
------------------------ grep Error ------------------------
b'(00.015045)      1: net: Try to restore a link 10:1:lo'
b'(00.015052)      1: net: Restoring link lo type 1'
b'(00.017672)      1: net: \tRunning ip addr restore'
b"ERROR: ld.so: object '/home/avagin/git/criu/test/ld-preload/libinterceptor.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored."
b'Error: ipv4: Address already assigned.'
b'Error: ipv6: address already assigned.'
------------------------ ERROR OVER ------------------------
Send the 15 signal to  145
Wait for zdtm/static/maps02(145) to die for 0.100000
Removing dump/zdtm/static/maps02/117
========================= Test zdtm/static/maps02 PASS =========================

Is this error expected?

avagin commented 1 month ago

Overall, it looks good to me. Thanks.

rst0git commented 1 month ago
======================== Run zdtm/static/maps02 in uns =========================
...
b'(00.017672)      1: net: \tRunning ip addr restore'
b"ERROR: ld.so: object '/home/avagin/git/criu/test/ld-preload/libinterceptor.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored."

Is this error expected?

I was able to replicate this error on Ubuntu but not in Fedora.

It looks like the reason for the error is because the repository is under /home/avagin and the test is running with uns flavor, i.e., ip addr restore is running in the restored user namespace and unable to access the library path. However, I believe that we can ignore this as we are testing only the code path in CRIU and there is no need to set LD_PRELOAD for the ip tool.