1*4882a593SmuzhiyunFrom 91edcc55c681dac41d2213b498ec6450aee22d9f Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Ian Kent <raven@themaw.net>
3*4882a593SmuzhiyunDate: Mon, 26 Jul 2021 13:18:38 +0800
4*4882a593SmuzhiyunSubject: autofs-5.1.7 - use default stack size for threads
5*4882a593Smuzhiyun
6*4882a593Smuzhiyunautofs uses PTHREAD_STACK_MIN to set the stack size for threads it
7*4882a593Smuzhiyuncreates.
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunIn two cases it is used to reduce the stack size for long running
10*4882a593Smuzhiyunservice threads while it's used to allocate a larger stack for worker
11*4882a593Smuzhiyunthreads that can have larger memory requirements.
12*4882a593Smuzhiyun
13*4882a593SmuzhiyunIn recent glibc releases PTHREAD_STACK_MIN is no longer a constant
14*4882a593Smuzhiyunwhich can lead to unexpectedly different stack sizes on different
15*4882a593Smuzhiyunarchitectures and the autofs assumption it's a constant causes a
16*4882a593Smuzhiyuncompile failure.
17*4882a593Smuzhiyun
18*4882a593SmuzhiyunThe need to alter the stack size was due to observed stack overflow
19*4882a593Smuzhiyunwhich was thought to be due the thread stack being too small for autofs
20*4882a593Smuzhiyunand glibc alloca(3) usage.
21*4882a593Smuzhiyun
22*4882a593SmuzhiyunQuite a bit of that alloca(3) usage has been eliminated from autofs now,
23*4882a593Smuzhiyunparticularly those that might be allocating largish amounts of storage,
24*4882a593Smuzhiyunand there has been a lot of change in glibc too so using the thread
25*4882a593Smuzhiyundefault stack should be ok.
26*4882a593Smuzhiyun
27*4882a593SmuzhiyunSigned-off-by: Ian Kent <raven@themaw.net>
28*4882a593Smuzhiyun
29*4882a593Smuzhiyun[Retrieved (and updated to drop CHANGELOG update) from:
30*4882a593Smuzhiyunhttps://git.kernel.org/pub/scm/linux/storage/autofs/autofs.git/commit/?id=91edcc55c681dac41d2213b498ec6450aee22d9f]
31*4882a593SmuzhiyunSigned-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
32*4882a593Smuzhiyun---
33*4882a593Smuzhiyun CHANGELOG          |  1 +
34*4882a593Smuzhiyun daemon/automount.c | 29 -----------------------------
35*4882a593Smuzhiyun daemon/state.c     |  6 +-----
36*4882a593Smuzhiyun lib/alarm.c        |  6 +-----
37*4882a593Smuzhiyun 4 files changed, 3 insertions(+), 39 deletions(-)
38*4882a593Smuzhiyun
39*4882a593Smuzhiyundiff --git a/daemon/automount.c b/daemon/automount.c
40*4882a593Smuzhiyunindex 23235a7..d743235 100644
41*4882a593Smuzhiyun--- a/daemon/automount.c
42*4882a593Smuzhiyun+++ b/daemon/automount.c
43*4882a593Smuzhiyun@@ -84,7 +84,6 @@ static size_t kpkt_len;
44*4882a593Smuzhiyun /* Attributes for creating detached and joinable threads */
45*4882a593Smuzhiyun pthread_attr_t th_attr;
46*4882a593Smuzhiyun pthread_attr_t th_attr_detached;
47*4882a593Smuzhiyun-size_t detached_thread_stack_size = PTHREAD_STACK_MIN * 144;
48*4882a593Smuzhiyun
49*4882a593Smuzhiyun struct master_readmap_cond mrc = {
50*4882a593Smuzhiyun 	PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, NULL, 0, 0, 0, 0};
51*4882a593Smuzhiyun@@ -2620,34 +2619,6 @@ int main(int argc, char *argv[])
52*4882a593Smuzhiyun 		exit(1);
53*4882a593Smuzhiyun 	}
54*4882a593Smuzhiyun
55*4882a593Smuzhiyun-#ifdef _POSIX_THREAD_ATTR_STACKSIZE
56*4882a593Smuzhiyun-	if (pthread_attr_setstacksize(
57*4882a593Smuzhiyun-			&th_attr_detached, detached_thread_stack_size)) {
58*4882a593Smuzhiyun-		logerr("%s: failed to set stack size thread attribute!",
59*4882a593Smuzhiyun-		       program);
60*4882a593Smuzhiyun-		if (start_pipefd[1] != -1) {
61*4882a593Smuzhiyun-			res = write(start_pipefd[1], pst_stat, sizeof(*pst_stat));
62*4882a593Smuzhiyun-			close(start_pipefd[1]);
63*4882a593Smuzhiyun-		}
64*4882a593Smuzhiyun-		release_flag_file();
65*4882a593Smuzhiyun-		macro_free_global_table();
66*4882a593Smuzhiyun-		exit(1);
67*4882a593Smuzhiyun-	}
68*4882a593Smuzhiyun-#endif
69*4882a593Smuzhiyun-
70*4882a593Smuzhiyun-	if (pthread_attr_getstacksize(
71*4882a593Smuzhiyun-			&th_attr_detached, &detached_thread_stack_size)) {
72*4882a593Smuzhiyun-		logerr("%s: failed to get detached thread stack size!",
73*4882a593Smuzhiyun-		       program);
74*4882a593Smuzhiyun-		if (start_pipefd[1] != -1) {
75*4882a593Smuzhiyun-			res = write(start_pipefd[1], pst_stat, sizeof(*pst_stat));
76*4882a593Smuzhiyun-			close(start_pipefd[1]);
77*4882a593Smuzhiyun-		}
78*4882a593Smuzhiyun-		release_flag_file();
79*4882a593Smuzhiyun-		macro_free_global_table();
80*4882a593Smuzhiyun-		exit(1);
81*4882a593Smuzhiyun-	}
82*4882a593Smuzhiyun-
83*4882a593Smuzhiyun 	info(logging, "Starting automounter version %s, master map %s",
84*4882a593Smuzhiyun 		version, master_list->name);
85*4882a593Smuzhiyun 	info(logging, "using kernel protocol version %d.%02d",
86*4882a593Smuzhiyundiff --git a/daemon/state.c b/daemon/state.c
87*4882a593Smuzhiyunindex 5156bb2..5df0561 100644
88*4882a593Smuzhiyun--- a/daemon/state.c
89*4882a593Smuzhiyun+++ b/daemon/state.c
90*4882a593Smuzhiyun@@ -1177,12 +1177,8 @@ int st_start_handler(void)
91*4882a593Smuzhiyun 	status = pthread_attr_init(pattrs);
92*4882a593Smuzhiyun 	if (status)
93*4882a593Smuzhiyun 		pattrs = NULL;
94*4882a593Smuzhiyun-	else {
95*4882a593Smuzhiyun+	else
96*4882a593Smuzhiyun 		pthread_attr_setdetachstate(pattrs, PTHREAD_CREATE_DETACHED);
97*4882a593Smuzhiyun-#ifdef _POSIX_THREAD_ATTR_STACKSIZE
98*4882a593Smuzhiyun-		pthread_attr_setstacksize(pattrs, PTHREAD_STACK_MIN*4);
99*4882a593Smuzhiyun-#endif
100*4882a593Smuzhiyun-	}
101*4882a593Smuzhiyun
102*4882a593Smuzhiyun 	status = pthread_create(&thid, pattrs, st_queue_handler, NULL);
103*4882a593Smuzhiyun
104*4882a593Smuzhiyundiff --git a/lib/alarm.c b/lib/alarm.c
105*4882a593Smuzhiyunindex f27e13c..1631a9b 100755
106*4882a593Smuzhiyun--- a/lib/alarm.c
107*4882a593Smuzhiyun+++ b/lib/alarm.c
108*4882a593Smuzhiyun@@ -270,12 +270,8 @@ int alarm_start_handler(void)
109*4882a593Smuzhiyun 	status = pthread_attr_init(pattrs);
110*4882a593Smuzhiyun 	if (status)
111*4882a593Smuzhiyun 		pattrs = NULL;
112*4882a593Smuzhiyun-	else {
113*4882a593Smuzhiyun+	else
114*4882a593Smuzhiyun 		pthread_attr_setdetachstate(pattrs, PTHREAD_CREATE_DETACHED);
115*4882a593Smuzhiyun-#ifdef _POSIX_THREAD_ATTR_STACKSIZE
116*4882a593Smuzhiyun-		pthread_attr_setstacksize(pattrs, PTHREAD_STACK_MIN*4);
117*4882a593Smuzhiyun-#endif
118*4882a593Smuzhiyun-	}
119*4882a593Smuzhiyun
120*4882a593Smuzhiyun 	status = pthread_condattr_init(&condattrs);
121*4882a593Smuzhiyun 	if (status)
122*4882a593Smuzhiyun--
123*4882a593Smuzhiyuncgit 1.2.3-1.el7
124*4882a593Smuzhiyun
125