v3 2026-11-06

跨 Live Update 保留 tmpfs 文件 · v3

扩展 Live Update 文件保留/取回,支持 tmpfs 文件迁移到用户指定挂载并传递用户参数。

原始补丁链接

子 Patch(10)

1/10
liveupdate: Pass user argument to file preserve and retrieve
扩展 preserve/retrieve FD ioctl,新增 handler 专用 64 位 arg,经 copy_struct_from_user 清零并保持旧 16 字节兼容,LIVEUPDATE_ARG 校验 size 头。
2/10
selftests: liveupdate: Add tests for preserve and retrieve user argument
在 libliveupdate 增加传参 helper,并新增 memfd 测试,验证非零参数返回 -EOPNOTSUPP、零参数及旧结构尺寸仍兼容。
3/10
liveupdate: Allow file handlers to mark retrieve failures as retryable
在 liveupdate_file_op_args 增加 retryable;handler 早期校验失败时置位,使 luo_retrieve_file 不永久记错,允许重试并由 finish 清理未消费 KHO 状态。
4/10
mm: Rename memfd_luo to shmem_luo
将 memfd_luo 及 Kconfig/文档重命名为 shmem_luo,因后续支持 tmpfs 文件;保留 memfd-v2 兼容串和序列化格式,无功能变化。
5/10
liveupdate: Don't WARN if tracking a retrieved file fails
xa_insert 插 luo_preserved_files 可因 -ENOMEM 失败,改为不触发 WARN_ON,保留已消费状态的 file 到 finish,避免用户触发 panic_on_warn。
6/10
mm/shmem_luo: Don't make early retrieve failures permanent
shmem_luo_retrieve 在恢复 folios 前失败时标记 retryable 并保留序列化状态,允许重试;修复该路径漏释放 folios 且 finish 跳过导致的泄漏。
7/10
mm/shmem_luo: Retrieve tmpfs files onto a tmpfs mount chosen by userspace
新增 liveupdate_shmem_retrieve_arg 指定目标 tmpfs 挂载,序列化记录 SHMEM_LUO_FLAG_TMPFS,恢复时按 O_TMPFILE 语义建文件并回填内容、位置和 seals。
8/10
mm/shmem_luo: Allow preserving tmpfs files that are still linked
允许保留仍链接的 tmpfs 文件,要求可写权限且以只读打开、拒绝 append-only;大小冻结后截断/fallocate/越界写返回 -EPERM,防止只读者破坏属主文件。
9/10
mm/shmem_luo: Allow retrieving tmpfs files with O_RDONLY
允许 retrieve arg 传 O_RDONLY:先建可写 O_TMPFILE,再用 dentry_open 重开只读并丢弃写 fd,避免持有写 fd 执行恢复二进制时 -ETXTBSY。
10/10
selftests/liveupdate: Add a test for preserving tmpfs files
新增 kexec 测试 luo_tmpfs,两阶段验证 tmpfs/memfd 保留与按参数恢复;覆盖内容、大小、位置、seals、空洞、创建语义及不可写文件。