Re: [PATCH v2 4/8] zram: use crypto api to check alg availability

From: Austin S. Hemmelgarn
Date: Wed Jun 01 2016 - 11:04:13 EST


On 2016-06-01 03:48, Sergey Senozhatsky wrote:
On (06/01/16 15:47), Minchan Kim wrote:
[..]
so both BUILTIN and BUILT-AS-A-MODULE cases are handled at compile
time now and we can avoid crypto_has_comp() checks for most of the
comp_algorithm calls, except for the case when someone requests an
out-of-tree module.

Hmm, isn't it problem, either?

That module was built but not installed. In that case, setting the
algorithm will be failed. IOW, we are lying to user.

have you ever seen this? really, why should we even bother?
if there is no requested algorithm we will fallback to LZO.

and how is that different from: user enabled LZO in .config (because it's
a prerequisite for zram) but forgot to install the module? do we have to
"fix" this as well?... implement our own LZO compression in zram?
or `cp lib/lzo/* drivers/block/zram/'?
Ideally, it should fall back to whatever algorithm it can find that is supported, preferably in the following order:
lzo lz4 lz4hc deflate 842
LZO first will keep backwards compatibility, while the rest is roughly in decreasing order of performance on most hardware (except on PPC systems which have hardware support for 842 compression).

Handling not being able to find any algorithm gets trickier, and the choices are pretty much use a null algorithm and just store flat data, or refuse to store anything.

For solving the problem, if we check it with crypto_has_comp, again,
it will load module into memory. :(

this will require a *VERY* non-standard behaviour from user

cat /sys/block/zram0/comp_algorithm
[lzo] lz4
# um...
echo 842 > /sys/block/zram0/comp_algorithm

and I'm quite confident that anyone who does this actually want
to init the device with the requested out-of-tree module right
after `echo FOO > comp_algorithm', rather than anything else.
Just from the perspective of a system administrator, most people probably aren't going to be directly touching the sysfs entries themselves except possibly for testing, and I don't think I've ever seen anything that actually reads zram/comp_algorithm except to verify that it's set to the requested algorithm. Given that, the behavior I'd expect from zram/comp_algorithm as an administrator would be:
1. List the currently used algorithm together with all algorithm's supported in the mainline kernel.
2. If somebody writes an algorithm we don't know about, check it with crypto_has_comp, and switch to it if successful.
3. Cache positive lookups of unknown algorithms so that you don't have to check again on other devices, and list those algorithms in zram/comp_algorithm even if they're not being used.
This would provide relative compatibility with the current behavior, while still allowing people using unknown compression modules to use them.