• Yafang Shao's avatar
    kthread: dynamically allocate memory to store kthread's full name · d6986ce2
    Yafang Shao authored
    When I was implementing a new per-cpu kthread cfs_migration, I found the
    comm of it "cfs_migration/%u" is truncated due to the limitation of
    TASK_COMM_LEN.  For example, the comm of the percpu thread on CPU10~19
    all have the same name "cfs_migration/1", which will confuse the user.
    This issue is not critical, because we can get the corresponding CPU
    from the task's Cpus_allowed.  But for kthreads corresponding to other
    hardware devices, it is not easy to get the detailed device info from
    task comm, for example,
    
        jbd2/nvme0n1p2-
        xfs-reclaim/sdf
    
    Currently there are so many truncated kthreads:
    
        rcu_tasks_kthre
        rcu_tasks_rude_
        rcu_tasks_trace
        poll_mpt3sas0_s
        ext4-rsv-conver
        xfs-reclaim/sd{a, b, c, ...}
        xfs-blockgc/sd{a, b, c, ...}
        xfs-inodegc/sd{a, b, c, ...}
        audit_send_repl
        ecryptfs-kthrea
        vfio-irqfd-clea
        jbd2/nvme0n1p2-
        ...
    
    We can shorten these names to work around this problem, but it may be
    not applied to all of the truncated kthreads.  Take 'jbd2/nvme0n1p2-'
    for example, it is a nice name, and it is not a good idea to shorten it.
    
    One possible way to fix this issue is extending the task comm size, but
    as task->comm is used in lots of places, that may cause some potential
    buffer overflows.  Another more conservative approach is introducing a
    new pointer to store kthread's full name if it is truncated, which won't
    introduce too much overhead as it is in the non-critical path.  Finally
    we make a dicision to use the second approach.  See also the discussions
    in this thread:
    https://lore.kernel.org/lkml/20211101060419.4682-1-laoar.shao@gmail.com/
    
    After this change, the full name of these truncated kthreads will be
    displayed via /proc/[pid]/comm:
    
        rcu_tasks_kthread
        rcu_tasks_rude_kthread
        rcu_tasks_trace_kthread
        poll_mpt3sas0_statu
        ext4-rsv-conversion
        xfs-reclaim/sdf1
        xfs-blockgc/sdf1
        xfs-inodegc/sdf1
        audit_send_reply
        ecryptfs-kthread
        vfio-irqfd-cleanup
        jbd2/nvme0n1p2-8
    
    Link: https://lkml.kernel.org/r/20211120112850.46047-1-laoar.shao@gmail.com
    
    Signed-off-by: default avatarYafang Shao <laoar.shao@gmail.com>
    Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
    Reviewed-by: default avatarPetr Mladek <pmladek@suse.com>
    Suggested-by: default avatarPetr Mladek <pmladek@suse.com>
    Suggested-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Cc: Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com>
    Cc: Alexei Starovoitov <alexei.starovoitov@gmail.com>
    Cc: Andrii Nakryiko <andrii.nakryiko@gmail.com>
    Cc: Michal Miroslaw <mirq-linux@rere.qmqm.pl>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Kees Cook <keescook@chromium.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    d6986ce2
array.c 22 KB