Commit 99b03b3
committed
agent: retry mount on ENOMEM
There is a race between firecracker-containerd replacing the stub drive
with the actual drive and mounting this drive. When the disk is replaced
the kernel will schedule asynchronous work in virtblk_config_changed. In
the meantime firecracker-containerd can proceed and already send a mount
command to the agent running in the guest. This mount operation will,
however, fail because the guest kernel still sees the stub drive with
only 512 bytes in size. The resulting error code is a ENOMEM in this
case. This commit therefore adds this as an retryable error code to
accommodate for this situation.
The issue can be reproduced when an artificial msleep(1000) is added in
virtblk_config_changed_work. This produced the following error:
error="failed to get stub drive for task \"test\": failed to mount
drive inside vm: failed to mount newly patched drive: rpc error: code
= Unknown desc = non-retryable failure mounting drive from
\"/dev/vdb\" to \"/container/test/rootfs\": cannot allocate memory"
Signed-off-by: Maximilian Heyne <[email protected]>1 parent 73f17ac commit 99b03b3
2 files changed
+7
-2
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
18 | 18 | | |
19 | 19 | | |
20 | 20 | | |
21 | | - | |
| 21 | + | |
22 | 22 | | |
23 | 23 | | |
24 | | - | |
| 24 | + | |
25 | 25 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
37 | 37 | | |
38 | 38 | | |
39 | 39 | | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
40 | 45 | | |
41 | 46 | | |
42 | 47 | | |
| |||
0 commit comments