Whamcloud - gitweb
LU-6142 lnet: convert kiblnd/ksocknal_thread_start to vararg 22/44122/3
authorMr NeilBrown <neilb@suse.de>
Thu, 1 Jul 2021 03:19:29 +0000 (13:19 +1000)
committerOleg Drokin <green@whamcloud.com>
Thu, 22 Jul 2021 01:49:33 +0000 (01:49 +0000)
Rather than requiring the called to format a thread name into a temp
buffer, change these thread_start function to accept a format and
args, and to hand them directly to kthread_run().

This is done with a macro rather than a function as the functions are
trivial and varargs is slightly easier with macros.

Test-Parameters: trivial
Signed-off-by: Mr NeilBrown <neilb@suse.de>
Change-Id: I73926ef38a9e84061d1a3f9acf5c0be4a247f957
Reviewed-on: https://review.whamcloud.com/44122
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Chris Horn <chris.horn@hpe.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lnet/klnds/o2iblnd/o2iblnd.c
lnet/klnds/o2iblnd/o2iblnd.h
lnet/klnds/o2iblnd/o2iblnd_cb.c
lnet/klnds/socklnd/socklnd.c
lnet/klnds/socklnd/socklnd.h
lnet/klnds/socklnd/socklnd_cb.c

index 0c44a61..1b57abf 100644 (file)
@@ -3159,12 +3159,11 @@ kiblnd_start_schedulers(struct kib_sched_info *sched)
        }
 
        for (i = 0; i < nthrs; i++) {
-               long    id;
-               char    name[20];
-               id = KIB_THREAD_ID(sched->ibs_cpt, sched->ibs_nthreads + i);
-               snprintf(name, sizeof(name), "kiblnd_sd_%02ld_%02ld",
-                        KIB_THREAD_CPT(id), KIB_THREAD_TID(id));
-               rc = kiblnd_thread_start(kiblnd_scheduler, (void *)id, name);
+               long    id = KIB_THREAD_ID(sched->ibs_cpt, sched->ibs_nthreads + i);
+
+               rc = kiblnd_thread_start(kiblnd_scheduler, (void *)id,
+                                        "kiblnd_sd_%02ld_%02ld",
+                                        KIB_THREAD_CPT(id), KIB_THREAD_TID(id));
                if (rc == 0)
                        continue;
 
index 652c798..26956a3 100644 (file)
@@ -1093,7 +1093,15 @@ int  kiblnd_tunables_init(void);
 
 int  kiblnd_connd (void *arg);
 int  kiblnd_scheduler(void *arg);
-int  kiblnd_thread_start(int (*fn)(void *arg), void *arg, char *name);
+#define kiblnd_thread_start(fn, data, namefmt, arg...)                 \
+       ({                                                              \
+               struct task_struct *__task = kthread_run(fn, data,      \
+                                                        namefmt, ##arg); \
+               if (!IS_ERR(__task))                                    \
+                       atomic_inc(&kiblnd_data.kib_nthreads);          \
+               PTR_ERR_OR_ZERO(__task);                                \
+       })
+
 int  kiblnd_failover_thread (void *arg);
 
 int kiblnd_alloc_pages(struct kib_pages **pp, int cpt, int npages);
index 7189676..38c91a7 100644 (file)
@@ -1931,18 +1931,6 @@ kiblnd_recv(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg,
         return rc;
 }
 
-int
-kiblnd_thread_start(int (*fn)(void *arg), void *arg, char *name)
-{
-       struct task_struct *task = kthread_run(fn, arg, "%s", name);
-
-       if (IS_ERR(task))
-               return PTR_ERR(task);
-
-       atomic_inc(&kiblnd_data.kib_nthreads);
-       return 0;
-}
-
 static void
 kiblnd_thread_fini (void)
 {
index 8e84644..fef2edf 100644 (file)
@@ -2045,15 +2045,13 @@ ksocknal_base_startup(void)
         }
 
         for (i = 0; i < *ksocknal_tunables.ksnd_nconnds; i++) {
-               char name[16];
                spin_lock_bh(&ksocknal_data.ksnd_connd_lock);
                ksocknal_data.ksnd_connd_starting++;
                spin_unlock_bh(&ksocknal_data.ksnd_connd_lock);
 
-
-               snprintf(name, sizeof(name), "socknal_cd%02d", i);
                rc = ksocknal_thread_start(ksocknal_connd,
-                                          (void *)((uintptr_t)i), name);
+                                          (void *)((uintptr_t)i),
+                                          "socknal_cd%02d", i);
                if (rc != 0) {
                        spin_lock_bh(&ksocknal_data.ksnd_connd_lock);
                        ksocknal_data.ksnd_connd_starting--;
@@ -2221,14 +2219,12 @@ ksocknal_start_schedulers(struct ksock_sched *sched)
 
        for (i = 0; i < nthrs; i++) {
                long id;
-               char name[20];
 
                id = KSOCK_THREAD_ID(sched->kss_cpt, sched->kss_nthreads + i);
-               snprintf(name, sizeof(name), "socknal_sd%02d_%02d",
-                        sched->kss_cpt, (int)KSOCK_THREAD_SID(id));
-
-               rc = ksocknal_thread_start(ksocknal_scheduler,
-                                          (void *)id, name);
+               rc = ksocknal_thread_start(ksocknal_scheduler, (void *)id,
+                                          "socknal_sd%02d_%02d",
+                                          sched->kss_cpt,
+                                          (int)KSOCK_THREAD_SID(id));
                if (rc == 0)
                        continue;
 
index f5c29d5..1c64f5b 100644 (file)
@@ -621,7 +621,15 @@ extern void ksocknal_next_tx_carrier(struct ksock_conn *conn);
 extern void ksocknal_queue_tx_locked(struct ksock_tx *tx, struct ksock_conn *conn);
 extern void ksocknal_txlist_done(struct lnet_ni *ni, struct list_head *txlist,
                                 int error);
-extern int ksocknal_thread_start(int (*fn)(void *arg), void *arg, char *name);
+#define ksocknal_thread_start(fn, data, namefmt, arg...)               \
+       ({                                                              \
+               struct task_struct *__task = kthread_run(fn, data,      \
+                                                        namefmt, ##arg); \
+               if (!IS_ERR(__task))                                    \
+                       atomic_inc(&ksocknal_data.ksnd_nthreads);       \
+               PTR_ERR_OR_ZERO(__task);                                \
+       })
+
 extern void ksocknal_thread_fini(void);
 extern void ksocknal_launch_all_connections_locked(struct ksock_peer_ni *peer_ni);
 extern struct ksock_conn_cb *ksocknal_find_connectable_conn_cb_locked(struct ksock_peer_ni *peer_ni);
index 24889b6..ec3f952 100644 (file)
@@ -1044,18 +1044,6 @@ ksocknal_send(struct lnet_ni *ni, void *private, struct lnet_msg *lntmsg)
         return (-EIO);
 }
 
-int
-ksocknal_thread_start(int (*fn)(void *arg), void *arg, char *name)
-{
-       struct task_struct *task = kthread_run(fn, arg, "%s", name);
-
-       if (IS_ERR(task))
-               return PTR_ERR(task);
-
-       atomic_inc(&ksocknal_data.ksnd_nthreads);
-       return 0;
-}
-
 void
 ksocknal_thread_fini (void)
 {
@@ -2068,7 +2056,6 @@ ksocknal_connect(struct ksock_conn_cb *conn_cb)
 static int
 ksocknal_connd_check_start(time64_t sec, long *timeout)
 {
-       char name[16];
         int rc;
         int total = ksocknal_data.ksnd_connd_starting +
                     ksocknal_data.ksnd_connd_running;
@@ -2106,8 +2093,8 @@ ksocknal_connd_check_start(time64_t sec, long *timeout)
        spin_unlock_bh(&ksocknal_data.ksnd_connd_lock);
 
        /* NB: total is the next id */
-       snprintf(name, sizeof(name), "socknal_cd%02d", total);
-       rc = ksocknal_thread_start(ksocknal_connd, NULL, name);
+       rc = ksocknal_thread_start(ksocknal_connd, NULL,
+                                  "socknal_cd%02d", total);
 
        spin_lock_bh(&ksocknal_data.ksnd_connd_lock);
         if (rc == 0)