From: Alex Markuze Date: Tue, 25 Feb 2025 16:57:11 +0000 (+0000) Subject: Adding a tls storage struct X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2c8bdb26b5a3d7fec905873a58db3f67d178dcb5;p=ceph-client.git Adding a tls storage struct --- diff --git a/include/linux/sched.h b/include/linux/sched.h index 64934e0830af..2dccb914be9c 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -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; diff --git a/kernel/fork.c b/kernel/fork.c index 9b301180fd41..1ed6814c2601 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -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); } diff --git a/net/ceph/ceph_san.c b/net/ceph/ceph_san.c index eb04740e5fed..ed6592b5b0ea 100644 --- a/net/ceph/ceph_san.c +++ b/net/ceph/ceph_san.c @@ -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)));