u64 c_mkfs_segment_size;
u32 c_mt_workers;
#endif
- u32 c_pclusterblks_max, c_pclusterblks_def, c_pclusterblks_packed;
+ u32 c_mkfs_pclustersize_max;
+ u32 c_mkfs_pclustersize_def;
+ u32 c_mkfs_pclustersize_packed;
u32 c_max_decompressed_extent_bytes;
u64 c_unix_timestamp;
u32 c_uid, c_gid;
static unsigned int z_erofs_get_max_pclustersize(struct erofs_inode *inode)
{
- unsigned int pclusterblks;
-
- if (erofs_is_packed_inode(inode))
- pclusterblks = cfg.c_pclusterblks_packed;
+ if (erofs_is_packed_inode(inode)) {
+ return cfg.c_mkfs_pclustersize_packed;
#ifndef NDEBUG
- else if (cfg.c_random_pclusterblks)
- pclusterblks = 1 + rand() % cfg.c_pclusterblks_max;
+ } else if (cfg.c_random_pclusterblks) {
+ unsigned int pclusterblks =
+ cfg.c_mkfs_pclustersize_max >> inode->sbi->blkszbits;
+
+ return (1 + rand() % pclusterblks) << inode->sbi->blkszbits;
#endif
- else if (cfg.c_compress_hints_file) {
+ } else if (cfg.c_compress_hints_file) {
z_erofs_apply_compress_hints(inode);
DBG_BUGON(!inode->z_physical_clusterblks);
- pclusterblks = inode->z_physical_clusterblks;
- } else {
- pclusterblks = cfg.c_pclusterblks_def;
+ return inode->z_physical_clusterblks << inode->sbi->blkszbits;
}
- return pclusterblks * erofs_blksiz(inode->sbi);
+ return cfg.c_mkfs_pclustersize_def;
}
static int z_erofs_fill_inline_data(struct erofs_inode *inode, void *data,
.lz4 = {
.max_distance =
cpu_to_le16(sbi->lz4_max_distance),
- .max_pclusterblks = cfg.c_pclusterblks_max,
+ .max_pclusterblks =
+ cfg.c_mkfs_pclustersize_max >> sbi->blkszbits,
}
};
* if big pcluster is enabled, an extra CBLKCNT lcluster index needs
* to be loaded in order to get those compressed block counts.
*/
- if (cfg.c_pclusterblks_max > 1) {
- if (cfg.c_pclusterblks_max >
- Z_EROFS_PCLUSTER_MAX_SIZE / erofs_blksiz(sbi)) {
- erofs_err("unsupported clusterblks %u (too large)",
- cfg.c_pclusterblks_max);
+ if (cfg.c_mkfs_pclustersize_max > erofs_blksiz(sbi)) {
+ if (cfg.c_mkfs_pclustersize_max > Z_EROFS_PCLUSTER_MAX_SIZE) {
+ erofs_err("unsupported pclustersize %u (too large)",
+ cfg.c_mkfs_pclustersize_max);
return -EINVAL;
}
erofs_sb_set_big_pcluster(sbi);
}
- if (cfg.c_pclusterblks_packed > cfg.c_pclusterblks_max) {
- erofs_err("invalid physical cluster size for the packed file");
+ if (cfg.c_mkfs_pclustersize_packed > cfg.c_mkfs_pclustersize_max) {
+ erofs_err("invalid pclustersize for the packed file %u",
+ cfg.c_mkfs_pclustersize_packed);
return -EINVAL;
}
return true;
s = erofs_fspath(inode->i_srcpath);
- pclusterblks = cfg.c_pclusterblks_def;
+ pclusterblks = cfg.c_mkfs_pclustersize_def >> inode->sbi->blkszbits;
algorithmtype = 0;
list_for_each_entry(r, &compress_hints_head, list) {
if (pclustersize % erofs_blksiz(sbi)) {
erofs_warn("invalid physical clustersize %u, "
"use default pclusterblks %u",
- pclustersize, cfg.c_pclusterblks_def);
+ pclustersize, cfg.c_mkfs_pclustersize_def);
continue;
}
erofs_insert_compress_hints(pattern,
max_pclustersize = pclustersize;
}
- if (cfg.c_pclusterblks_max * erofs_blksiz(sbi) < max_pclustersize) {
- cfg.c_pclusterblks_max = max_pclustersize / erofs_blksiz(sbi);
- erofs_warn("update max pclusterblks to %u", cfg.c_pclusterblks_max);
+ if (cfg.c_mkfs_pclustersize_max < max_pclustersize) {
+ cfg.c_mkfs_pclustersize_max = max_pclustersize;
+ erofs_warn("update max pclustersize to %u",
+ cfg.c_mkfs_pclustersize_max);
}
out:
fclose(f);
cfg.c_unix_timestamp = -1;
cfg.c_uid = -1;
cfg.c_gid = -1;
- cfg.c_pclusterblks_max = 1;
- cfg.c_pclusterblks_def = 1;
cfg.c_max_decompressed_extent_bytes = -1;
erofs_stdout_tty = isatty(STDOUT_FILENO);
}
pclustersize_max);
return -EINVAL;
}
- cfg.c_pclusterblks_max = pclustersize_max >> sbi.blkszbits;
- cfg.c_pclusterblks_def = cfg.c_pclusterblks_max;
+ cfg.c_mkfs_pclustersize_max = pclustersize_max;
+ cfg.c_mkfs_pclustersize_def = cfg.c_mkfs_pclustersize_max;
}
if (cfg.c_chunkbits && cfg.c_chunkbits < sbi.blkszbits) {
erofs_err("chunksize %u must be larger than block size",
}
if (pclustersize_packed) {
- if (pclustersize_max < erofs_blksiz(&sbi) ||
- pclustersize_max % erofs_blksiz(&sbi)) {
+ if (pclustersize_packed < erofs_blksiz(&sbi) ||
+ pclustersize_packed % erofs_blksiz(&sbi)) {
erofs_err("invalid pcluster size for the packed file %u",
pclustersize_packed);
return -EINVAL;
}
- cfg.c_pclusterblks_packed = pclustersize_packed >> sbi.blkszbits;
+ cfg.c_mkfs_pclustersize_packed = pclustersize_packed;
}
return 0;
}
cfg.c_mkfs_segment_size = 16ULL * 1024 * 1024;
#endif
sbi.blkszbits = ilog2(min_t(u32, getpagesize(), EROFS_MAX_BLOCK_SIZE));
+ cfg.c_mkfs_pclustersize_max = erofs_blksiz(&sbi);
+ cfg.c_mkfs_pclustersize_def = cfg.c_mkfs_pclustersize_max;
sbi.feature_incompat = EROFS_FEATURE_INCOMPAT_ZERO_PADDING;
sbi.feature_compat = EROFS_FEATURE_COMPAT_SB_CHKSUM |
EROFS_FEATURE_COMPAT_MTIME;
#endif
erofs_show_config();
if (cfg.c_fragments || cfg.c_extra_ea_name_prefixes) {
- if (!cfg.c_pclusterblks_packed)
- cfg.c_pclusterblks_packed = cfg.c_pclusterblks_def;
+ if (!cfg.c_mkfs_pclustersize_packed)
+ cfg.c_mkfs_pclustersize_packed = cfg.c_mkfs_pclustersize_def;
packedfile = erofs_packedfile_init();
if (IS_ERR(packedfile)) {