Re: ping //Re: [PATCH v2 0/2] squashfs: Add the mount parameter "threads="
From: Phillip Lougher
Date: Tue Aug 30 2022 - 14:35:00 EST
On 30/08/2022 19:08, Phillip Lougher wrote:
On 30/08/2022 14:38, Xiaoming Ni wrote:
On 2022/8/29 7:18, Phillip Lougher wrote:
As regards points 1 - 3, personally I would add a default kernel
configuration option that keeps the existing behaviour, build time
selectable only, no additional mount time options. Then a
kernel configuration option that allows the different decompressors
to be selected at mount time, but which always builds all the
decompressors. This will avoid the silliness of point 2, and
Would it be better to allow flexible selection of decompression mode
combinations?
I told you I don't like that (*). I also told you I want the default
behaviour to be the current behaviour.
Feel free to disagree, but that isn't a good way to get your patch
reviewed or accepted by me.
Cheers
Phillip
(*) Adding options to select the decompressor at mount time, but,
also allowing only 1 - 2 decompressors to be built is a waste of
time. It has the effect of giving something with one hand and
taking it alway with the other. Build the lot, this also
keeps it simple.
It also splatters super.c with #ifdef CONFIG lines.
phillip@phoenix:/external/stripe/linux/fs/squashfs$ grep "CONFIG_" super.c
#ifdef CONFIG_SQUASHFS_DECOMP_SINGLE
#ifdef CONFIG_SQUASHFS_DECOMP_MULTI
#ifdef CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU
#ifdef CONFIG_SQUASHFS_DECOMP_SINGLE
#ifdef CONFIG_SQUASHFS_DECOMP_MULTI
#ifdef CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU
#ifdef CONFIG_SQUASHFS_DECOMP_DEFAULT_SINGLE
#elif defined(CONFIG_SQUASHFS_DECOMP_DEFAULT_MULTI)
#elif defined(CONFIG_SQUASHFS_DECOMP_DEFAULT_PERCPU)
Or
static int squashfs_parse_param_threads(const char *str, struct
squashfs_mount_opts *opts)
{
unsigned long num;
int ret;
#ifdef CONFIG_SQUASHFS_DECOMP_SINGLE
if (strcmp(str, "single") == 0) {
opts->thread_ops = &squashfs_decompressor_single;
return 0;
}
#endif
#ifdef CONFIG_SQUASHFS_DECOMP_MULTI
if (strcmp(str, "multi") == 0) {
opts->thread_ops = &squashfs_decompressor_multi;
return 0;
}
#endif
#ifdef CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU
if (strcmp(str, "percpu") == 0) {
opts->thread_ops = &squashfs_decompressor_percpu;
return 0;
}
#endif
ret = kstrtoul(str, 0, &num);
if (ret != 0 || num == 0)
return -EINVAL;
#ifdef CONFIG_SQUASHFS_DECOMP_SINGLE
if (num == 1) {
opts->thread_ops = &squashfs_decompressor_single;
return 0;
}
#endif
#ifdef CONFIG_SQUASHFS_DECOMP_MULTI
opts->thread_ops = &squashfs_decompressor_multi;
if (num > opts->thread_ops->max_decompressors())
num = opts->thread_ops->max_decompressors();
opts->thread_num = (int)num;
return 0;
#else
return -EINVAL;
#endif
}
SNIP
static int squashfs_show_options(struct seq_file *s, struct dentry *root)
{
struct super_block *sb = root->d_sb;
struct squashfs_sb_info *msblk = sb->s_fs_info;
if (msblk->panic_on_errors)
seq_puts(s, ",errors=panic");
else
seq_puts(s, ",errors=continue");
#ifdef CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU
/*
* thread=percpu and thread=<number> have different
configuration effects.
* the parameters need to be treated differently when they are
displayed.
*/
if (msblk->thread_ops == &squashfs_decompressor_percpu) {
seq_puts(s, ",threads=percpu");
return 0;
}
#endif
seq_printf(s, ",threads=%u", msblk->max_thread_num);
return 0;
}
static int squashfs_init_fs_context(struct fs_context *fc)
{
struct squashfs_mount_opts *opts;
opts = kzalloc(sizeof(*opts), GFP_KERNEL);
if (!opts)
return -ENOMEM;
#ifdef CONFIG_SQUASHFS_DECOMP_DEFAULT_SINGLE
opts->thread_ops = &squashfs_decompressor_single;
#elif defined(CONFIG_SQUASHFS_DECOMP_DEFAULT_MULTI)
opts->thread_ops = &squashfs_decompressor_multi,
#elif defined(CONFIG_SQUASHFS_DECOMP_DEFAULT_PERCPU)
opts->thread_ops = &squashfs_decompressor_percpu;
#endif