On Fri, Apr 02, 2021 at 03:16:21PM +0800, yangerkun wrote:
sysfs_emit(3d8e2128f26a ("sysfs: Add sysfs_emit and sysfs_emit_at to format sysfs output")) has a hidden constraint that the buf should be alignment with PAGE_SIZE. It's OK since 59bb47985c1d ("mm, sl[aou]b: guarantee natural alignment for kmalloc(power-of-two)") help us to solve scenes like CONFIG_SLUB_DEBUG or CONFIG_SLOB which will break this.
But since lots of stable branch(we reproduce it with 4.19 stable) merge 3d8e2128f26a ("sysfs: Add sysfs_emit and sysfs_emit_at to format sysfs output") without 59bb47985c1d ("mm, sl[aou]b: guarantee natural alignment for kmalloc(power-of-two)"), we will get the follow warning with command 'cat /sys/class/iscsi_transport/tcp/handle' once we enable CONFIG_SLUB_DEBUG and start kernel with slub_debug=UFPZ!
Obviously, we can backport 59bb47985c1d ("mm, sl[aou]b: guarantee natural alignment for kmalloc(power-of-two)") to fix it. But this will waste some memory to ensure natural alignment which seems unbearable for embedded device. So for stable branch like 4.19, can we just remove the warning in sysfs_emit since the only user for it is iscsi, and seq_read
- sysfs_kf_seq_show can ensure that the buf in sysfs_emit must be aware
of PAGE_SIZE. Or does there some other advise for this problem?
More users of this function will be backported over time as we all know, so just removing the functions is not good.
Why is the buffer alignment considered a "waste" here? If that change is in Linus's tree and newer kernels (it showed up in 5.4 which was released quite a while ago), where are the people complaining about it there?
I think backporting 59bb47985c1d ("mm, sl[aou]b: guarantee natural alignment for kmalloc(power-of-two)") seems like the correct thing to do here to bring things into alignment (pun intended) with newer kernels.
thanks,
greg k-h