Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 12 Mar 2012 14:47:01 +0000
From:      John <jwd@freebsd.org>
To:        freebsd-scsi <freebsd-scsi@freebsd.org>
Cc:        aoyama@peach.ne.jp
Subject:   Re: istgt does not appear to shut down cleanly
Message-ID:  <20120312144701.GA74725@FreeBSD.org>
In-Reply-To: <20120312002122.GA95330@FreeBSD.org>
References:  <20120312002122.GA95330@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
----- John's Original Message -----
> Hi Folks,
> 
>    I've been putting together a zfs server which exports zvols
> via istgt:
> 
> #istgt -V
> istgt version 0.4
> istgt extra version 20111008
> 
>    and about a 1 month old 9-stable:
> 
> 9.0-STABLE FreeBSD 9.0-STABLE #0 r231864M: Fri Feb 17 23:21:34 UTC 2012
> 
>    When adding a new LUC/LUN combination, I want to terminate and then
> restart the daemon. However, istgt does not appear to completely exit.

Hi Folks,

   Following up on my own posting. It appears that istgt is configured to
use kqueue to handle signals. However, it still pthread_create()s the
signal handler thread which requires the 2nd signal to get the thread to
exit cleanly.

   Ifdef'ing out the pthread_create() and related code seems to fix the
problem. Added NOSIGTHREAD.

   This seems to fix things nicely.

Thanks,
John


#diff -u istgt.c.orig istgt.c   [/usr/ports/net/istgt/work/istgt-20111008/src]
--- istgt.c.orig	2012-03-12 12:14:12.000000000 +0000
+++ istgt.c	2012-03-12 14:28:34.000000000 +0000

@@ -1749,6 +1758,7 @@
 #endif
 	sigaddset(&signew, ISTGT_SIGWAKEUP);
 	pthread_sigmask(SIG_SETMASK, &signew, &sigold);
+#ifdef NOSIGTHREAD
 #ifdef ISTGT_STACKSIZE
 	rc = pthread_create(&sigthread, &istgt->attr, &istgt_sighandler,
 #else
@@ -1766,8 +1776,11 @@
 		goto initialize_error;
 	}
 #endif
+#endif
 #ifdef HAVE_PTHREAD_SET_NAME_NP
+#ifdef NOSIGTHREAD
 	pthread_set_name_np(sigthread, "sigthread");
+#endif
 	pthread_set_name_np(pthread_self(), "mainthread");
 #endif
 
@@ -1847,12 +1860,14 @@
 	istgt_free_config(config);
 	istgt_set_state(istgt, ISTGT_STATE_SHUTDOWN);
 
+#ifdef NOSIGTHREAD
 	/* stop signal thread */
 	rc = pthread_join(sigthread, NULL);
 	if (rc != 0) {
 		ISTGT_ERRLOG("pthread_join() failed\n");
 		exit (EXIT_FAILURE);
 	}
+#endif
 
 	return 0;
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120312144701.GA74725>