mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	Retain thread name when resuming a zthr
When created, a zthr is given a name to identify it by. This name is lost when a cancelled zthr is resumed. Retain the name of a zthr so it can be used when resuming. Reviewed-by: Serapheim Dimitropoulos <serapheim@delphix.com> Reviewed-by: Alexander Motin <mav@FreeBSD.org> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Ryan Moeller <ryan@iXsystems.com> Closes #10881
This commit is contained in:
		
							parent
							
								
									e28635396a
								
							
						
					
					
						commit
						a1e03186fd
					
				| @ -56,7 +56,7 @@ | |||||||
|  * |  * | ||||||
|  * == ZTHR creation |  * == ZTHR creation | ||||||
|  * |  * | ||||||
|  * Every zthr needs three inputs to start running: |  * Every zthr needs four inputs to start running: | ||||||
|  * |  * | ||||||
|  * 1] A user-defined checker function (checkfunc) that decides whether |  * 1] A user-defined checker function (checkfunc) that decides whether | ||||||
|  *    the zthr should start working or go to sleep. The function should |  *    the zthr should start working or go to sleep. The function should | ||||||
| @ -72,6 +72,9 @@ | |||||||
|  * 3] A void args pointer that will be passed to checkfunc and func |  * 3] A void args pointer that will be passed to checkfunc and func | ||||||
|  *    implicitly by the infrastructure. |  *    implicitly by the infrastructure. | ||||||
|  * |  * | ||||||
|  |  * 4] A name for the thread. This string must be valid for the lifetime | ||||||
|  |  *    of the zthr. | ||||||
|  |  * | ||||||
|  * The reason why the above API needs two different functions, |  * The reason why the above API needs two different functions, | ||||||
|  * instead of one that both checks and does the work, has to do with |  * instead of one that both checks and does the work, has to do with | ||||||
|  * the zthr's internal state lock (zthr_state_lock) and the allowed |  * the zthr's internal state lock (zthr_state_lock) and the allowed | ||||||
| @ -221,6 +224,7 @@ struct zthr { | |||||||
| 	zthr_checkfunc_t	*zthr_checkfunc; | 	zthr_checkfunc_t	*zthr_checkfunc; | ||||||
| 	zthr_func_t	*zthr_func; | 	zthr_func_t	*zthr_func; | ||||||
| 	void		*zthr_arg; | 	void		*zthr_arg; | ||||||
|  | 	const char	*zthr_name; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static void | static void | ||||||
| @ -291,6 +295,7 @@ zthr_create_timer(const char *zthr_name, zthr_checkfunc_t *checkfunc, | |||||||
| 	t->zthr_func = func; | 	t->zthr_func = func; | ||||||
| 	t->zthr_arg = arg; | 	t->zthr_arg = arg; | ||||||
| 	t->zthr_sleep_timeout = max_sleep; | 	t->zthr_sleep_timeout = max_sleep; | ||||||
|  | 	t->zthr_name = zthr_name; | ||||||
| 
 | 
 | ||||||
| 	t->zthr_thread = thread_create_named(zthr_name, NULL, 0, | 	t->zthr_thread = thread_create_named(zthr_name, NULL, 0, | ||||||
| 	    zthr_procedure, t, 0, &p0, TS_RUN, minclsyspri); | 	    zthr_procedure, t, 0, &p0, TS_RUN, minclsyspri); | ||||||
| @ -417,8 +422,8 @@ zthr_resume(zthr_t *t) | |||||||
| 	 *     no-op. | 	 *     no-op. | ||||||
| 	 */ | 	 */ | ||||||
| 	if (t->zthr_thread == NULL) { | 	if (t->zthr_thread == NULL) { | ||||||
| 		t->zthr_thread = thread_create(NULL, 0, zthr_procedure, t, | 		t->zthr_thread = thread_create_named(t->zthr_name, NULL, 0, | ||||||
| 		    0, &p0, TS_RUN, minclsyspri); | 		    zthr_procedure, t, 0, &p0, TS_RUN, minclsyspri); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	mutex_exit(&t->zthr_state_lock); | 	mutex_exit(&t->zthr_state_lock); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Ryan Moeller
						Ryan Moeller