On 2023/9/15 14:27, Jingbo Xu wrote:
Since kernel commit 8b465fecc35a ("erofs: support flattened block device
for multi-blob images"), flatdev feature is introduced to support for
mounting multi-blobs container image as a single block device.
Introduce "-Eflatdev" option to generate images in flatdev mode.
Why need introducing such an option
mapped_blkaddr cannot be filled/fixed up all the time?
Currently this can only work with rebuild mode, where the device tag is
filled with the uuid of the corresponding source image.
...
+ if (cfg.c_flatdev && !rebuild_mode) {
+ erofs_err("--flatdev is supported only in rebuild mode
currently");
I don't think we need this, all multiple device mode can use this.
+ return -EINVAL;
+ }
+
if (cfg.c_compr_alg[0] && erofs_blksiz(&sbi) != getpagesize())
erofs_warn("Please note that subpage blocksize with compression
isn't yet supported in kernel. "
"This compressed image will only work with bs = ps = %u
bytes",
@@ -765,8 +774,15 @@ static void erofs_mkfs_default_options(void)
sbi.feature_compat = EROFS_FEATURE_COMPAT_SB_CHKSUM |
EROFS_FEATURE_COMPAT_MTIME;
- /* generate a default uuid first */
- erofs_uuid_generate(sbi.uuid);
+ /*
+ * Generate a default uuid first. In rebuild mode the uuid of the
+ * source image is used as the device slot's tag. The kernel will
+ * identify the tag as empty and fail the mount if its first byte is
+ * zero. Apply this constraint to uuid to work around it.
+ */
+ do {
+ erofs_uuid_generate(sbi.uuid);
+ } while (!sbi.uuid[0]);
why need a loop here?
}
Thanks,
Gao Xiang