From 864e543f0e371766b2aec842bf2a08430a0f5dff Mon Sep 17 00:00:00 2001 From: Fabian Keil Date: Sun, 7 Nov 2021 15:08:32 +0100 Subject: [PATCH 235/310] sys/geom/eli: If the thread name will be truncated, use the last characters instead of the first ones Obtained from: ElectroBSD --- sys/geom/eli/g_eli.c | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/sys/geom/eli/g_eli.c b/sys/geom/eli/g_eli.c index c34aee501270..4534dfd7703a 100644 --- a/sys/geom/eli/g_eli.c +++ b/sys/geom/eli/g_eli.c @@ -865,7 +865,9 @@ g_eli_create(struct gctl_req *req, struct g_class *mp, struct g_provider *bpp, struct g_provider *pp; struct g_consumer *cp; struct g_geom_alias *gap; - u_int i, threads; + struct thread dummy_thread; + u_int i, threads, name_offset; + size_t name_len, name_space_available; int dcw, error; G_ELI_DEBUG(1, "Creating device %s%s.", bpp->name, G_ELI_SUFFIX); @@ -970,13 +972,36 @@ g_eli_create(struct gctl_req *req, struct g_class *mp, struct g_provider *bpp, } goto failed; } - /* Only include the thread number if there's more than one */ + name_len = strlen(bpp->name); + name_space_available = sizeof(dummy_thread.td_name) - 1 - + strlen("g_eli"); + if (threads != 1) { + /* + * XXX: Assumes the number of threads + * fits a single digit + */ + name_space_available -= strlen("[0]"); + } + if (name_len < name_space_available) + name_offset = 0; + else + name_offset = name_len - name_space_available + 1; + + G_ELI_DEBUG(1, "geli threads for %s: %d, name_len: %d, " + "name_space_available: %d, name_offset: %d ", + bpp->name, threads, (int)name_len, + (int)name_space_available, name_offset); + + /* + * Only include the thread number if there's more + * than one thread. + */ if (threads == 1) { - error = kproc_create(g_eli_worker, wr, &wr->w_proc, 0, 0, - "g_eli %s", bpp->name); + error = kproc_create(g_eli_worker, wr, &wr->w_proc, + 0, 0, "g_eli %s", &bpp->name[name_offset]); } else { - error = kproc_create(g_eli_worker, wr, &wr->w_proc, 0, 0, - "g_eli[%u] %s", i, bpp->name); + error = kproc_create(g_eli_worker, wr, &wr->w_proc, + 0, 0, "g_eli[%u] %s", i, &bpp->name[name_offset]); } if (error != 0) { g_eli_freesession(wr); -- 2.37.1