]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
Adding a tls storage struct
authorAlex Markuze <amarkuze@redhat.com>
Tue, 25 Feb 2025 16:57:11 +0000 (16:57 +0000)
committerAlex Markuze <amarkuze@redhat.com>
Wed, 26 Feb 2025 12:43:34 +0000 (12:43 +0000)
include/linux/sched.h
kernel/fork.c
net/ceph/ceph_san.c

index 64934e0830af3446390dfecca11a99f341202993..2dccb914be9cd2484f8bd742cfdb1d4d92629f2a 100644 (file)
@@ -781,7 +781,10 @@ struct kmap_ctrl {
        pte_t                           pteval[KM_MAX_IDX];
 #endif
 };
-
+struct tls_storage {
+       void (*release)(void *state);
+       void *state;
+};
 struct task_struct {
 #ifdef CONFIG_THREAD_INFO_IN_TASK
        /*
@@ -1241,6 +1244,9 @@ struct task_struct {
        /* Journalling filesystem info: */
        void                            *journal_info;
 
+       /* TLS storage for per-task private data */
+       struct tls_storage              tls;
+
        /* Stacked block device info: */
        struct bio_list                 *bio_list;
 
index 9b301180fd41628f55fc318d8899cab2698ba6f5..1ed6814c2601130b1e7f692aa77a502114e8913c 100644 (file)
@@ -182,6 +182,11 @@ static inline struct task_struct *alloc_task_struct_node(int node)
 
 static inline void free_task_struct(struct task_struct *tsk)
 {
+       if (tsk->tls.release) {
+               tsk->tls.release(tsk->tls.state);
+               tsk->tls.state = NULL;
+               tsk->tls.release = NULL;
+       }
        kmem_cache_free(task_struct_cachep, tsk);
 }
 
index eb04740e5fedc0d3013d46a1d4887141982fbc62..ed6592b5b0ea6a642756623ebefd5f5b5b8bad44 100644 (file)
@@ -71,6 +71,7 @@ int cephsan_init(void)
        struct ceph_san_tls_logger *tls;
        struct cephsan_pagefrag *pf;
 
+       struct task_struct *task = current;
        for_each_possible_cpu(cpu) {
                tls = per_cpu_ptr(&ceph_san_tls, cpu);
                tls->pages = alloc_pages(GFP_KERNEL, get_order(CEPH_SAN_MAX_LOGS * sizeof(struct ceph_san_log_entry)));