[Glibc-bsd-commits] r4332 - in tags/istgt: . 0.4~20111008-3/debian 0.4~20111008-3/debian/patches

Arno Töll atoell-guest at alioth.debian.org
Tue Jun 26 22:28:59 UTC 2012


Author: atoell-guest
Date: 2012-06-26 22:28:59 +0000 (Tue, 26 Jun 2012)
New Revision: 4332

Added:
   tags/istgt/0.4~20111008-3/
   tags/istgt/0.4~20111008-3/debian/changelog
   tags/istgt/0.4~20111008-3/debian/init
   tags/istgt/0.4~20111008-3/debian/patches/add-reload.patch
   tags/istgt/0.4~20111008-3/debian/patches/fix-autosize.patch
   tags/istgt/0.4~20111008-3/debian/patches/series
Removed:
   tags/istgt/0.4~20111008-3/debian/changelog
   tags/istgt/0.4~20111008-3/debian/init
   tags/istgt/0.4~20111008-3/debian/patches/fix-autosize.patch
   tags/istgt/0.4~20111008-3/debian/patches/series
Log:
[svn-buildpackage] Tagging istgt 0.4~20111008-3

Deleted: tags/istgt/0.4~20111008-3/debian/changelog
===================================================================
--- trunk/istgt/debian/changelog	2012-06-22 19:38:20 UTC (rev 4328)
+++ tags/istgt/0.4~20111008-3/debian/changelog	2012-06-26 22:28:59 UTC (rev 4332)
@@ -1,70 +0,0 @@
-istgt (0.4~20111008-3) UNRELEASED; urgency=low
-
-  * NOT RELEASED YET
-  * Fix "cannot determine device size from symlink" Apply patch to use stat()
-    instead of lstat(). Thanks Michal Suchanek  (Closes: #650212)
-
- -- Arno Töll <arno at debian.org>  Sat, 31 Mar 2012 17:18:57 +0200
-
-istgt (0.4~20111008-2) unstable; urgency=low
-
-  * Fix "istgt: ftbs with ld --as-needed" - apply patch which shifts libraries
-    in the compiler line after object files. Thanks Julian Taylor
-    (Closes: #646272)
-  * Fix "ftbfs on squeeze" Add missing build-dependency to dpkg-dev 1.16.1 which
-    is required to build the package because we're using dpkg-buildflags to
-    generate configure flags. That's guaranteed for Testing, but might be
-    helpful to know for backporters. (Closes: #650217)
-  * Push standards version to 3.9.3.1 - no further changes required
-  * Drop the DMUA field - I don't need it anymore, update my maintainer address
-
- -- Arno Töll <arno at debian.org>  Sat, 31 Mar 2012 17:13:43 +0200
-
-istgt (0.4~20111008-1) unstable; urgency=low
-
-  * New upstream release
-  * Add patch `add-istgtcontrol-manpage' which adds a manpage for the
-    istgtcontrol command.
-  * Check whether istgt is actually running after starting up the daemon in its
-    init script. That's required because istgt may fail for the socket setup
-    after forking into the background.
-
- -- Arno Töll <debian at toell.net>  Thu, 27 Oct 2011 01:40:23 +0200
-
-istgt (0.4~20110928-1) unstable; urgency=low
-
-  * New upstream release
-  * Adapt to dpkg 1.16.1 API changes regarding build flags. This enables
-    hardening build flags. This means, istgt is now being built with
-    -fstack-protector and other security related build flags.
-
- -- Arno Töll <debian at toell.net>  Fri, 07 Oct 2011 10:54:47 -0400
-
-istgt (0.4~20110907-1) unstable; urgency=low
-
-  * New upstream release
-  * Make debian/copyright more readable
-  * Provide a non-functional watch file to follow glibc-bsd conventions to
-    denote the problem with it in a comment
-  * Fix a not detected build failure due to a problem in upstream's Makefile
-    for the GNU/Hurd architecture (`make-build-failures-fatal.patch'). This
-    patch has been forwarded and merged upstream
-  * Remove `handle-destdir.patch' - it has been merged upstream
-  * Refresh `fix-installdir.patch'
-
- -- Arno Töll <debian at toell.net>  Wed, 14 Sep 2011 22:40:25 +0200
-
-istgt (0.4~20110717-1) unstable; urgency=low
-
-  [ Arno Töll ]
-  * Make upstream Makefile honor $(DESTDIR) (`handle-destdir.patch')
-  * Install binaries to /sbin instead of /bin (`fix-installdir.patch')
-  * Initial release. (Closes: #636139: ITP: istgt -- iSCSI userspace
-    target daemon for Unix-like operating systems)
-
-  [ Robert Millan ]
-  * Require libcam-dev on kfreebsd-any.
-  * Set Dm-Upload-Allowed: yes.
-  * Add myself to Uploaders.
-
- -- Robert Millan <rmh at debian.org>  Mon, 01 Aug 2011 00:12:35 +0200

Copied: tags/istgt/0.4~20111008-3/debian/changelog (from rev 4331, trunk/istgt/debian/changelog)
===================================================================
--- tags/istgt/0.4~20111008-3/debian/changelog	                        (rev 0)
+++ tags/istgt/0.4~20111008-3/debian/changelog	2012-06-26 22:28:59 UTC (rev 4332)
@@ -0,0 +1,77 @@
+istgt (0.4~20111008-3) unstable; urgency=low
+
+  * Fix "cannot determine device size from symlink" Apply patch to use stat()
+    instead of lstat(). Thanks Michal Suchanek  (Closes: #650212). I apologize
+    for the delay, but I was postponing this decision for a long time, given
+    it was rejected by upstream for security concerns. I do not share these.
+  * Fix "Add support to reload the istgt.conf file." by merging the excellent
+    patch Andrew Ruthven <andrew at etc.gen.nz>. Much appreciated (Closes: #679055)
+  * Improve init script:
+    + Better support fancy outputs
+    + Improve failure toleance of the reload handler
+    + Log istgt start output to syslog
+
+ -- Arno Töll <arno at debian.org>  Wed, 27 Jun 2012 00:23:23 +0200
+
+istgt (0.4~20111008-2) unstable; urgency=low
+
+  * Fix "istgt: ftbs with ld --as-needed" - apply patch which shifts libraries
+    in the compiler line after object files. Thanks Julian Taylor
+    (Closes: #646272)
+  * Fix "ftbfs on squeeze" Add missing build-dependency to dpkg-dev 1.16.1 which
+    is required to build the package because we're using dpkg-buildflags to
+    generate configure flags. That's guaranteed for Testing, but might be
+    helpful to know for backporters. (Closes: #650217)
+  * Push standards version to 3.9.3.1 - no further changes required
+  * Drop the DMUA field - I don't need it anymore, update my maintainer address
+
+ -- Arno Töll <arno at debian.org>  Sat, 31 Mar 2012 17:13:43 +0200
+
+istgt (0.4~20111008-1) unstable; urgency=low
+
+  * New upstream release
+  * Add patch `add-istgtcontrol-manpage' which adds a manpage for the
+    istgtcontrol command.
+  * Check whether istgt is actually running after starting up the daemon in its
+    init script. That's required because istgt may fail for the socket setup
+    after forking into the background.
+
+ -- Arno Töll <debian at toell.net>  Thu, 27 Oct 2011 01:40:23 +0200
+
+istgt (0.4~20110928-1) unstable; urgency=low
+
+  * New upstream release
+  * Adapt to dpkg 1.16.1 API changes regarding build flags. This enables
+    hardening build flags. This means, istgt is now being built with
+    -fstack-protector and other security related build flags.
+
+ -- Arno Töll <debian at toell.net>  Fri, 07 Oct 2011 10:54:47 -0400
+
+istgt (0.4~20110907-1) unstable; urgency=low
+
+  * New upstream release
+  * Make debian/copyright more readable
+  * Provide a non-functional watch file to follow glibc-bsd conventions to
+    denote the problem with it in a comment
+  * Fix a not detected build failure due to a problem in upstream's Makefile
+    for the GNU/Hurd architecture (`make-build-failures-fatal.patch'). This
+    patch has been forwarded and merged upstream
+  * Remove `handle-destdir.patch' - it has been merged upstream
+  * Refresh `fix-installdir.patch'
+
+ -- Arno Töll <debian at toell.net>  Wed, 14 Sep 2011 22:40:25 +0200
+
+istgt (0.4~20110717-1) unstable; urgency=low
+
+  [ Arno Töll ]
+  * Make upstream Makefile honor $(DESTDIR) (`handle-destdir.patch')
+  * Install binaries to /sbin instead of /bin (`fix-installdir.patch')
+  * Initial release. (Closes: #636139: ITP: istgt -- iSCSI userspace
+    target daemon for Unix-like operating systems)
+
+  [ Robert Millan ]
+  * Require libcam-dev on kfreebsd-any.
+  * Set Dm-Upload-Allowed: yes.
+  * Add myself to Uploaders.
+
+ -- Robert Millan <rmh at debian.org>  Mon, 01 Aug 2011 00:12:35 +0200

Deleted: tags/istgt/0.4~20111008-3/debian/init
===================================================================
--- trunk/istgt/debian/init	2012-06-22 19:38:20 UTC (rev 4328)
+++ tags/istgt/0.4~20111008-3/debian/init	2012-06-26 22:28:59 UTC (rev 4332)
@@ -1,144 +0,0 @@
-#! /bin/sh
-### BEGIN INIT INFO
-# Provides:          istgt
-# Required-Start:    $network $local_fs $remote_fs
-# Required-Stop:     $remote_fs
-# Default-Start:     2 3 4 5
-# Default-Stop:      0 1 6
-# Short-Description: iSCSI userspace target for kFreeBSD systems
-# Description:       iSCSI userspace target for kFreeBSD systems
-### END INIT INFO
-
-# Author: Arno Töll <debian at toell.net>
-
-PATH=/sbin:/usr/sbin:/bin:/usr/bin
-DESC="istgt iSCSI target"
-NAME=istgt
-DAEMON=/usr/sbin/istgt
-PIDFILE=/var/run/$NAME.pid
-DAEMON_ARGS="-c /etc/istgt/istgt.conf -p $PIDFILE"
-SCRIPTNAME=/etc/init.d/$NAME
-CONFIG=/etc/istgt/istgt.conf
-
-# Exit if the package is not installed
-[ -x $DAEMON ] || exit 0
-
-# Read configuration variable file if it is present
-[ -r /etc/default/$NAME ] && . /etc/default/$NAME
-
-# Load the VERBOSE setting and other rcS variables
-. /lib/init/vars.sh
-
-# Define LSB log_* functions.
-# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
-. /lib/lsb/init-functions
-
-if [ ! -r $CONFIG ] ; then
-	[ "$VERBOSE" != no ] && log_warning_msg "Not Starting $DESC: $CONFIG does not exit"
-	exit 0
-fi
-
-#
-# Function that starts the daemon/service
-#
-do_start()
-{
-	# Return
-	#   0 if daemon has been started
-	#   1 if daemon was already running
-	#   2 if daemon could not be started
-	start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
-		|| return 1
-	start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
-		$DAEMON_ARGS \
-		|| return 2
-
-	RETVAL=0
-	for i in 1 2 3 4 5 ; do
-		sleep 1
-		status_of_proc -p $PIDFILE "$DAEMON" "$NAME" || RETVAL=$?
-		[ "$RETVAL" = 0 ] && return 0
-	done
-
-	[ "$RETVAL" != 0 ] && return 2
-}
-
-#
-# Function that stops the daemon/service
-#
-do_stop()
-{
-	# Return
-	#   0 if daemon has been stopped
-	#   1 if daemon was already stopped
-	#   2 if daemon could not be stopped
-	#   other if a failure occurred
-	start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
-	RETVAL="$?"
-	[ "$RETVAL" = 2 ] && return 2
-	# Wait for children to finish too if this is a daemon that forks
-	# and if the daemon is only ever run from this initscript.
-	start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
-	[ "$?" = 2 ] && return 2
-	# Many daemons don't delete their pidfiles when they exit.
-	rm -f $PIDFILE
-	return "$RETVAL"
-}
-
-#
-# Function that sends a SIGHUP to the daemon/service
-#
-do_reload() {
-	start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
-	return 0
-}
-
-case "$1" in
-  start)
-    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME"
-    do_start
-    case "$?" in
-		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
-		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
-	esac
-  ;;
-  stop)
-	[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
-	do_stop
-	case "$?" in
-		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
-		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
-	esac
-	;;
-  status)
-       status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
-       ;;
-  restart|force-reload)
-	#
-	# If the "reload" option is implemented then remove the
-	# 'force-reload' alias
-	#
-	log_daemon_msg "Restarting $DESC" "$NAME"
-	do_stop
-	case "$?" in
-	  0|1)
-		do_start
-		case "$?" in
-			0) log_end_msg 0 ;;
-			1) log_end_msg 1 ;; # Old process is still running
-			*) log_end_msg 1 ;; # Failed to start
-		esac
-		;;
-	  *)
-	  	# Failed to stop
-		log_end_msg 1
-		;;
-	esac
-	;;
-  *)
-	echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
-	exit 3
-	;;
-esac
-
-:

Copied: tags/istgt/0.4~20111008-3/debian/init (from rev 4331, trunk/istgt/debian/init)
===================================================================
--- tags/istgt/0.4~20111008-3/debian/init	                        (rev 0)
+++ tags/istgt/0.4~20111008-3/debian/init	2012-06-26 22:28:59 UTC (rev 4332)
@@ -0,0 +1,163 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides:          istgt
+# Required-Start:    $network $local_fs $remote_fs
+# Required-Stop:     $remote_fs
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: iSCSI userspace target for kFreeBSD systems
+# Description:       iSCSI userspace target for kFreeBSD systems
+### END INIT INFO
+
+# Author: Arno Töll <debian at toell.net>
+
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+DESC="istgt iSCSI target"
+NAME=istgt
+DAEMON=/usr/sbin/istgt
+ISTGTCONTROL=/usr/sbin/istgtcontrol
+PIDFILE=/var/run/$NAME.pid
+DAEMON_ARGS="-c /etc/istgt/istgt.conf -p $PIDFILE"
+SCRIPTNAME=/etc/init.d/$NAME
+CONFIG=/etc/istgt/istgt.conf
+
+# Exit if the package is not installed
+[ -x $DAEMON ] || exit 0
+
+# Read configuration variable file if it is present
+[ -r /etc/default/$NAME ] && . /etc/default/$NAME
+
+# Load the VERBOSE setting and other rcS variables
+. /lib/init/vars.sh
+
+# Define LSB log_* functions.
+# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
+. /lib/lsb/init-functions
+
+if [ ! -r $CONFIG ] ; then
+	[ "$VERBOSE" != no ] && log_warning_msg "Not Starting $DESC: $CONFIG does not exit"
+	exit 0
+fi
+
+#
+# Function that starts the daemon/service
+#
+do_start()
+{
+	# Return
+	#   0 if daemon has been started
+	#   1 if daemon was already running
+	#   2 if daemon could not be started
+	start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
+		|| return 1
+	start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
+		$DAEMON_ARGS  2>&1 | logger -p daemon.info \
+		|| return 2
+
+	RETVAL=0
+	for i in 1 2 3 4 5 ; do
+		sleep 1
+		pidofproc -p $PIDFILE "$DAEMON" "$NAME" > /dev/null || RETVAL=$?
+		[ "$RETVAL" = 0 ] && return 0
+	done
+
+	[ "$RETVAL" != 0 ] && return 2
+}
+
+#
+# Function that stops the daemon/service
+#
+do_stop()
+{
+	# Return
+	#   0 if daemon has been stopped
+	#   1 if daemon was already stopped
+	#   2 if daemon could not be stopped
+	#   other if a failure occurred
+	start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
+	RETVAL="$?"
+	[ "$RETVAL" = 2 ] && return 2
+	# Wait for children to finish too if this is a daemon that forks
+	# and if the daemon is only ever run from this initscript.
+	start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
+	[ "$?" = 2 ] && return 2
+	# Many daemons don't delete their pidfiles when they exit.
+	rm -f $PIDFILE
+	return "$RETVAL"
+}
+
+#
+# Function that sends a SIGHUP to the daemon/service
+#
+do_reload() {
+	[ -x $ISTGTCONTROL ] || return 127
+	pidofproc -p $PIDFILE $NAME > /dev/null || return 2
+	$ISTGTCONTROL refresh > /dev/null 2>&1
+	return $?
+}
+
+case "$1" in
+  start)
+    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME"
+    do_start
+    case "$?" in
+		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+	esac
+  ;;
+  stop)
+	[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
+	do_stop
+	case "$?" in
+		0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
+		2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
+	esac
+	;;
+  reload)
+    [ "$VERBOSE" != no ] && log_daemon_msg "Reloading $DESC " "$NAME"
+    do_reload
+    case "$?" in
+		0)
+			[ "$VERBOSE" != no ] && log_end_msg 0
+			;;
+		2)
+			[ "$VERBOSE" != no ] && log_end_msg 1
+			[ "$VERBOSE" != no ] && log_warning_msg "$NAME is not running"
+			;;
+		127)
+			[ "$VERBOSE" != no ] && log_end_msg 1
+			[ "$VERBOSE" != no ] && log_warning_msg "$ISTGTCONTROL not found"
+			;;
+		*)
+			[ "$VERBOSE" != no ] && log_end_msg 1
+			;;
+	esac
+  ;;
+  status)
+       status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
+       ;;
+  restart)
+	log_daemon_msg "Restarting $DESC" "$NAME"
+	do_stop
+	case "$?" in
+	  0|1)
+		do_start
+		case "$?" in
+			0) log_end_msg 0 ;;
+			1) log_end_msg 1 ;; # Old process is still running
+			*) log_end_msg 1 ;; # Failed to start
+		esac
+		;;
+	  *)
+	  	# Failed to stop
+		log_end_msg 1
+		;;
+	esac
+	;;
+  *)
+	echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
+	exit 3
+	;;
+esac
+
+:

Copied: tags/istgt/0.4~20111008-3/debian/patches/add-reload.patch (from rev 4330, trunk/istgt/debian/patches/add-reload.patch)
===================================================================
--- tags/istgt/0.4~20111008-3/debian/patches/add-reload.patch	                        (rev 0)
+++ tags/istgt/0.4~20111008-3/debian/patches/add-reload.patch	2012-06-26 22:28:59 UTC (rev 4332)
@@ -0,0 +1,441 @@
+Description: Add a reload target to istgt
+ Currently istgt does not support on-the-fly reloading of its configurations,
+ which means the administrator has to restart the daemon to make new settings in
+ effect.
+ .
+ This is quite inconvenient when istgt is used in conjection with some "sensitive"
+ initiators, for instance, Xen.
+ .
+ This patch which implements the underlying functionality was written by Kun Huang,
+ sponsored by Applied Operations, LLC.
+ .
+ It was taken from the FreeBSD patch tracking sustem.
+Author: Andrew Ruthven <andrew at etc.gen.nz>
+Origin: other, http://www.freebsd.org/cgi/query-pr.cgi?pr=165844
+Forwarded: no
+Last-Update: 2012-06-26
+
+--- a/src/istgt_lu.h
++++ b/src/istgt_lu.h
+@@ -236,6 +236,9 @@
+ 	ISTGT_LU_TSIH tsih[MAX_LU_TSIH];
+ 	int maxmap;
+ 	ISTGT_LU_MAP map[MAX_LU_MAP];
++
++	int to_add;
++	int to_remove;
+ } ISTGT_LU;
+ typedef ISTGT_LU *ISTGT_LU_Ptr;
+ 
+--- a/src/istgt_proto.h
++++ b/src/istgt_proto.h
+@@ -85,10 +85,10 @@
+ uint64_t istgt_lu_parse_media_size(const char *file, const char *size, int *flags);
+ PORTAL *istgt_lu_find_portalgroup(ISTGT_Ptr istgt, int tag);
+ INITIATOR_GROUP *istgt_lu_find_initiatorgroup(ISTGT_Ptr istgt, int tag);
+-int istgt_lu_init(ISTGT_Ptr istgt);
++int istgt_lu_init(ISTGT_Ptr istgt, int ignore_dup);
+ int istgt_lu_set_all_state(ISTGT_Ptr istgt, ISTGT_STATE state);
+-int istgt_lu_create_threads(ISTGT_Ptr istgt);
+-int istgt_lu_shutdown(ISTGT_Ptr istgt);
++int istgt_lu_create_threads(ISTGT_Ptr istgt, int new_only);
++int istgt_lu_shutdown(ISTGT_Ptr istgt, int removed_only);
+ int istgt_lu_islun2lun(uint64_t islun);
+ uint64_t istgt_lu_lun2islun(int lun, int maxlun);
+ int istgt_lu_reset(ISTGT_LU_Ptr lu, uint64_t lun);
+--- a/src/istgt_lu_disk.c
++++ b/src/istgt_lu_disk.c
+@@ -794,6 +794,7 @@
+ 		xfree(spec);
+ 		lu->lun[i].spec = NULL;
+ 	}
++	lu->maxlun = 0;
+ 
+ 	return 0;
+ }
+--- a/src/istgt_lu_ctl.c
++++ b/src/istgt_lu_ctl.c
+@@ -965,6 +965,113 @@
+ 	return UCTL_CMD_OK;
+ }
+ 
++extern const char *g_config_file;
++extern ISTGT g_istgt;
++
++static int
++istgt_uctl_cmd_refresh(UCTL_Ptr uctl)
++{
++	char *arg;
++	int rc, i, j;
++	CONFIG *config;
++	ISTGT_Ptr istgt;
++
++	arg = uctl->arg;
++	istgt = &g_istgt;
++
++	/* reload config, might add/remove LUNs */
++	/* step 1: re-read config files */
++	config = istgt_allocate_config();
++	rc = istgt_read_config(config, g_config_file);
++	if (rc < 0) {
++		fprintf(stderr, "refresh config error\n");
++		return UCTL_CMD_ERR;
++	}
++	if (config->section == NULL) {
++		fprintf(stderr, "empty config\n");
++		istgt_free_config(config);
++		return UCTL_CMD_ERR;
++	}
++	istgt_free_config(istgt->config);
++	istgt->config = config;
++
++	/* step 2: add new units, init new LUNs, tag to-add/remove LUNs */
++	rc = istgt_lu_init(istgt, 1);
++	if (rc < 0) {
++		ISTGT_ERRLOG("istgt_lu_init() failed\n");
++		istgt_free_config(config);
++		return UCTL_CMD_ERR;
++	}
++
++	for (i = 0; i < MAX_LOGICAL_UNIT; i++) {
++		ISTGT_LU_Ptr lu = istgt->logical_unit[i];
++		if (lu == NULL)
++			continue;
++		if (lu->to_add)
++			ISTGT_TRACELOG(ISTGT_TRACE_DEBUG, "newly added LUN %s\n", lu->name);
++		if (lu->to_remove)
++			ISTGT_TRACELOG(ISTGT_TRACE_DEBUG, "newly removed LUN %s\n", lu->name);
++	}
++
++	/* creat new threads for new LUNs, do work in luworker() */
++	/* create LUN threads for command queuing */
++	rc = istgt_lu_create_threads(istgt, 1);
++	if (rc < 0) {
++		ISTGT_ERRLOG("lu_create_threads() failed\n");
++		istgt_free_config(config);
++		return UCTL_CMD_ERR;
++	}
++	/* start taking IOs */
++	for (i = 0; i < MAX_LOGICAL_UNIT; i++) {
++		ISTGT_LU_Ptr lu = istgt->logical_unit[i];
++		if (lu == NULL)
++			continue;
++		if (lu->to_add) {
++			istgt_lu_set_state(lu, ISTGT_STATE_RUNNING);
++			ISTGT_TRACELOG(ISTGT_TRACE_DEBUG, "set newly added LUN as running %s\n", lu->name);
++		}
++	}
++
++	/* step 3: shutdown removed LUNs */
++	/* clear outstanding IOs */
++	for (i = 0; i < MAX_LOGICAL_UNIT; i++) {
++		ISTGT_LU_Ptr lu = istgt->logical_unit[i];
++		if (lu == NULL)
++			continue;
++		if (lu->to_remove) {
++			for (j = 0; j<lu->maxlun; j++)
++				istgt_lu_clear_all_task(lu, j);
++			ISTGT_TRACELOG(ISTGT_TRACE_DEBUG, "clear newly removed LUN queue %s\n", lu
++->name);
++		}
++	}
++
++	/* sync and close LUNs */
++	istgt_lu_shutdown(istgt, 1);
++
++	/* clear tag of to_add/to_remove, get ready for next refresh */
++	for (i = 0; i < MAX_LOGICAL_UNIT; i++) {
++		ISTGT_LU_Ptr lu = istgt->logical_unit[i];
++		if (lu == NULL)
++			continue;
++		if (lu->to_add)
++			lu->to_add = 0;
++		if (lu->to_remove)
++			lu->to_remove = 0;
++	}
++
++	/* logging event */
++	ISTGT_NOTICELOG("Configuration refresh requested from %s\n",
++	    uctl->caddr);
++
++	/* refresh succeeded */
++	istgt_uctl_snprintf(uctl, "OK %s\n", uctl->cmd);
++	rc = istgt_uctl_writeline(uctl);
++	if (rc != UCTL_CMD_OK)
++		return rc;
++	return UCTL_CMD_OK;
++}
++
+ static int
+ istgt_uctl_cmd_reset(UCTL_Ptr uctl)
+ {
+@@ -1183,6 +1290,7 @@
+ 	{ "UNLOAD",  istgt_uctl_cmd_unload },
+ 	{ "LOAD",    istgt_uctl_cmd_load },
+ 	{ "CHANGE",  istgt_uctl_cmd_change },
++	{ "REFRESH", istgt_uctl_cmd_refresh },
+ 	{ "RESET",   istgt_uctl_cmd_reset },
+ 	{ "INFO",    istgt_uctl_cmd_info },
+ 	{ NULL,      NULL },
+--- a/src/istgtcontrol.c
++++ b/src/istgtcontrol.c
+@@ -494,6 +494,36 @@
+ }
+ 
+ static int
++exec_refresh(UCTL_Ptr uctl)
++{
++	const char *delim = ARGS_DELIM;
++	char *arg;
++	char *result;
++	int rc;
++
++	/* send command */
++	uctl_snprintf(uctl, "REFRESH \n");
++	rc = uctl_writeline(uctl);
++	if (rc != UCTL_CMD_OK)
++		return rc;
++
++	/* receive result */
++	rc = uctl_readline(uctl);
++	if (rc != UCTL_CMD_OK)
++		return rc;
++	arg = trim_string(uctl->recvbuf);
++	result = strsepq(&arg, delim);
++	strupr(result);
++	if (strcmp(result, "OK") != 0) {
++		if (is_err_req_auth(uctl, arg))
++			return UCTL_CMD_REQAUTH;
++		fprintf(stderr, "ERROR %s\n", arg);
++		return UCTL_CMD_ERR;
++	}
++	return UCTL_CMD_OK;
++}
++
++static int
+ exec_reset(UCTL_Ptr uctl)
+ {
+ 	const char *delim = ARGS_DELIM;
+@@ -591,6 +621,7 @@
+ 	{ "UNLOAD",  exec_unload,   0, 1 },
+ 	{ "LOAD",    exec_load,     0, 1 },
+ 	{ "CHANGE",  exec_change,   1, 1 },
++	{ "REFRESH", exec_refresh,  0, 0 },
+ 	{ "RESET",   exec_reset,    0, 1 },
+ 	{ "INFO",    exec_info,     0, 0 },
+ 	{ NULL,      NULL,          0, 0 },
+@@ -1054,6 +1085,7 @@
+ 	printf(" load       load media to specified unit\n");
+ 	printf(" unload     unload media from specified unit\n");
+ 	printf(" change     change media with <file> at specified unit\n");
++	printf(" refresh    refresh to reload target and lun configuration\n");
+ 	printf(" reset      reset specified lun of target\n");
+ 	printf(" info       show connections of target\n");
+ }
+--- a/src/istgt_lu.c
++++ b/src/istgt_lu.c
+@@ -1200,7 +1200,7 @@
+ }
+ 
+ static int
+-istgt_lu_add_unit(ISTGT_Ptr istgt, CF_SECTION *sp)
++istgt_lu_add_unit(ISTGT_Ptr istgt, CF_SECTION *sp, int ignore_dup)
+ {
+ 	char buf[MAX_TMPBUF], buf2[MAX_TMPBUF];
+ 	ISTGT_LU_Ptr lu;
+@@ -1220,21 +1220,40 @@
+ 	int i, j, k;
+ 	int rc;
+ 
+-	ISTGT_TRACELOG(ISTGT_TRACE_DEBUG, "add unit %d\n", sp->num);
++	ISTGT_TRACELOG(ISTGT_TRACE_DEBUG, "add unit %d (ignore dup = %d)\n", sp->num, ignore_dup);
+ 
+ 	if (sp->num >= MAX_LOGICAL_UNIT) {
+ 		ISTGT_ERRLOG("LU%d: over maximum unit number\n", sp->num);
+ 		return -1;
+ 	}
+-	if (istgt->logical_unit[sp->num] != NULL) {
++	if (istgt->logical_unit[sp->num] != NULL && !ignore_dup) {
+ 		ISTGT_ERRLOG("LU%d: duplicate unit\n", sp->num);
+ 		return -1;
+ 	}
++	/* existing LUNs */
++	if (istgt->logical_unit[sp->num] != NULL && ignore_dup) {
++		istgt->logical_unit[sp->num]->to_add = 0;
++		istgt->logical_unit[sp->num]->to_remove = 0;
++		ISTGT_TRACELOG(ISTGT_TRACE_DEBUG, "skip existing unit %d\n", sp->num);
++		return 0;
++	}
++
++	/* new LUNs */
++	if (istgt->logical_unit[sp->num] == NULL && ignore_dup) {
++		ISTGT_TRACELOG(ISTGT_TRACE_DEBUG, "add NEW unit %d\n", sp->num);
++	}
+ 
+ 	lu = xmalloc(sizeof *lu);
+ 	memset(lu, 0, sizeof *lu);
+ 	lu->num = sp->num;
+ 	lu->istgt = istgt;
++
++	/* tag new LUNs */
++	if (ignore_dup) {
++		lu->to_add = 1;
++		lu->to_remove = 0;
++	}
++
+ 	istgt_lu_set_state(lu, ISTGT_STATE_INVALID);
+ 	nbs64 = istgt_lu_get_nbserial(istgt->nodebase);
+ #if 0
+@@ -1942,12 +1961,15 @@
+ static void *luworker(void *arg);
+ 
+ int
+-istgt_lu_init(ISTGT_Ptr istgt)
++istgt_lu_init(ISTGT_Ptr istgt, int ignore_dup)
+ {
+ 	ISTGT_LU_Ptr lu;
+ 	CF_SECTION *sp;
+ 	int rc;
+ 	int i;
++	int lun_map[MAX_LOGICAL_UNIT];
++
++	memset(lun_map, 0, sizeof(int) * MAX_LOGICAL_UNIT);
+ 
+ 	ISTGT_TRACELOG(ISTGT_TRACE_DEBUG, "istgt_lu_init\n");
+ 	sp = istgt_find_cf_section(istgt->config, "Global");
+@@ -1967,11 +1989,12 @@
+ 				ISTGT_ERRLOG("tag %d is invalid\n", sp->num);
+ 				return -1;
+ 			}
+-			rc = istgt_lu_add_unit(istgt, sp);
++			rc = istgt_lu_add_unit(istgt, sp, ignore_dup);
+ 			if (rc < 0) {
+ 				ISTGT_ERRLOG("lu_add_unit() failed\n");
+ 				return -1;
+ 			}
++			lun_map[sp->num] = 1; /* in new LUN list */
+ 		}
+ 		sp = sp->next;
+ 	}
+@@ -1980,6 +2003,22 @@
+ 		lu = istgt->logical_unit[i];
+ 		if (lu == NULL)
+ 			continue;
++		/* tag to be removed LUNs */
++		if (lun_map[i] == 0) {
++			istgt->logical_unit[i]->to_add = 0;
++			istgt->logical_unit[i]->to_remove = 1;
++			continue;
++		}
++		/* only process newly added LUNs here beyond in loop */
++		if (ignore_dup &&
++		    (istgt->logical_unit[i]->to_add == 1 &&
++		     istgt->logical_unit[i]->to_remove == 0)) {
++			ISTGT_TRACELOG(ISTGT_TRACE_DEBUG, "adding unit %d\n", i);
++		} else if (ignore_dup &&
++		    !(istgt->logical_unit[i]->to_add == 1 &&
++		      istgt->logical_unit[i]->to_remove == 0)) {
++			continue;
++		}
+ 
+ 		rc = pthread_mutex_init(&lu->mutex, NULL);
+ 		if (rc != 0) {
+@@ -2067,7 +2106,7 @@
+ }
+ 
+ int
+-istgt_lu_create_threads(ISTGT_Ptr istgt)
++istgt_lu_create_threads(ISTGT_Ptr istgt, int new_only)
+ {
+ #ifdef HAVE_PTHREAD_SET_NAME_NP
+ 	char buf[MAX_TMPBUF];
+@@ -2082,6 +2121,10 @@
+ 		lu = istgt->logical_unit[i];
+ 		if (lu == NULL)
+ 			continue;
++		if (new_only && !lu->to_add) {
++			ISTGT_TRACELOG(ISTGT_TRACE_DEBUG, "skip existing LUN %d\n", i);
++			continue;
++		}
+ 
+ 		if (lu->queue_depth != 0) {
+ 			/* create LU thread */
+@@ -2112,18 +2155,22 @@
+ }
+ 
+ int
+-istgt_lu_shutdown(ISTGT_Ptr istgt)
++istgt_lu_shutdown(ISTGT_Ptr istgt, int removed_only)
+ {
+ 	ISTGT_LU_Ptr lu;
+ 	int rc;
+ 	int i;
+ 
+-	ISTGT_TRACELOG(ISTGT_TRACE_DEBUG, "istgt_lu_shutdown\n");
++	ISTGT_TRACELOG(ISTGT_TRACE_DEBUG, "istgt_lu_shutdown (removed_only = %d\n", removed_only);
+ 
+ 	for (i = 0; i < MAX_LOGICAL_UNIT; i++) {
+ 		lu = istgt->logical_unit[i];
+ 		if (lu == NULL)
+ 			continue;
++		if (removed_only && !lu->to_remove) {
++			ISTGT_TRACELOG(ISTGT_TRACE_DEBUG, "skip existing LUNs %d\n", i);
++			continue;
++		}
+ 		istgt_lu_set_state(lu, ISTGT_STATE_SHUTDOWN);
+ 
+ 		switch (lu->type) {
+--- a/src/istgt.c
++++ b/src/istgt.c
+@@ -71,6 +71,7 @@
+ #define PORTNUMLEN 32
+ 
+ ISTGT g_istgt;
++const char  *g_config_file;
+ 
+ #if 0
+ void
+@@ -1598,6 +1599,7 @@
+ 
+ 	/* read config files */
+ 	config = istgt_allocate_config();
++	g_config_file = config_file;
+ 	rc = istgt_read_config(config, config_file);
+ 	if (rc < 0) {
+ 		fprintf(stderr, "config error\n");
+@@ -1662,7 +1664,7 @@
+ 		istgt_free_config(config);
+ 		exit(EXIT_FAILURE);
+ 	}
+-	rc = istgt_lu_init(istgt);
++	rc = istgt_lu_init(istgt, 0);
+ 	if (rc < 0) {
+ 		ISTGT_ERRLOG("istgt_lu_init() failed\n");
+ 		goto initialize_error;
+@@ -1772,7 +1774,7 @@
+ #endif
+ 
+ 	/* create LUN threads for command queuing */
+-	rc = istgt_lu_create_threads(istgt);
++	rc = istgt_lu_create_threads(istgt, 0);
+ 	if (rc < 0) {
+ 		ISTGT_ERRLOG("lu_create_threads() failed\n");
+ 		goto initialize_error;
+@@ -1809,7 +1811,7 @@
+ 		istgt_close_portal(istgt);
+ 		istgt_close_uctl_portal(istgt);
+ 		istgt_iscsi_shutdown(istgt);
+-		istgt_lu_shutdown(istgt);
++		istgt_lu_shutdown(istgt, 0);
+ 		istgt_destory_initiator_group_array(istgt);
+ 		istgt_destroy_portal_array(istgt);
+ 		istgt_destroy_uctl_portal(istgt);
+@@ -1837,7 +1839,7 @@
+ 	istgt_close_portal(istgt);
+ 	istgt_close_uctl_portal(istgt);
+ 	istgt_iscsi_shutdown(istgt);
+-	istgt_lu_shutdown(istgt);
++	istgt_lu_shutdown(istgt, 0);
+ 	istgt_destory_initiator_group_array(istgt);
+ 	istgt_destroy_portal_array(istgt);
+ 	istgt_destroy_uctl_portal(istgt);

Deleted: tags/istgt/0.4~20111008-3/debian/patches/fix-autosize.patch
===================================================================
--- trunk/istgt/debian/patches/fix-autosize.patch	2012-06-22 19:38:20 UTC (rev 4328)
+++ tags/istgt/0.4~20111008-3/debian/patches/fix-autosize.patch	2012-06-26 22:28:59 UTC (rev 4332)
@@ -1,43 +0,0 @@
-Description: support symlinks as device names
- This patch adds support for symlinks as device store in the backend.
- .
- This patch was rejected upstream, but will possibly be included in a following
- up Debian upload. However, this needs further discussion.
-Author: Michal Suchanek <hramrach at centrum.cz>
-Forwarded: yes
-
-Index: istgt-0.4~20111008/src/istgt_lu.c
-===================================================================
---- istgt-0.4~20111008.orig/src/istgt_lu.c	2011-11-27 21:48:45.000000000 +0100
-+++ istgt-0.4~20111008/src/istgt_lu.c	2011-11-27 22:14:12.000000000 +0100
-@@ -606,7 +606,7 @@
- 	int rc;
- 
- 	val = 0ULL;
--	rc = lstat(file, &st);
-+	rc = stat(file, &st);
- 	if (rc != 0)
- 		return val;
- 	if (!S_ISCHR(st.st_mode) && !S_ISBLK(st.st_mode))
-@@ -689,11 +689,9 @@
- 	int rc;
- 
- 	val = 0ULL;
--	rc = lstat(file, &st);
-+	rc = stat(file, &st);
- 	if (rc < 0)
- 		return val;
--	if (S_ISLNK(st.st_mode))
--		return val;
- 
- 	if (S_ISCHR(st.st_mode)) {
- 		val = istgt_lu_get_devsize(file);
-@@ -702,7 +700,7 @@
- 	} else if (S_ISREG(st.st_mode)) {
- 		val = st.st_size;
- 	} else {
--		ISTGT_ERRLOG("lstat is neither REG, CHR nor BLK\n");
-+		ISTGT_ERRLOG("stat is neither REG, CHR nor BLK\n");
- 		val = 0ULL;
- 	}
- 	return val;

Copied: tags/istgt/0.4~20111008-3/debian/patches/fix-autosize.patch (from rev 4330, trunk/istgt/debian/patches/fix-autosize.patch)
===================================================================
--- tags/istgt/0.4~20111008-3/debian/patches/fix-autosize.patch	                        (rev 0)
+++ tags/istgt/0.4~20111008-3/debian/patches/fix-autosize.patch	2012-06-26 22:28:59 UTC (rev 4332)
@@ -0,0 +1,49 @@
+Description: support symlinks as device names
+ This patch adds support for symlinks as device store in the backend.
+ .
+ This patch was rejected upstream. Upstream was worried about security
+ implications when following symlinks to logical devices. This is an opinion I
+ do not share, as I consider existing file permission layers as sufficient.
+ .
+ Neither do several people asked for advise.
+ .
+ -- Arno Töll <arno at debian.net>
+
+Author: Michal Suchanek <hramrach at centrum.cz>
+Forwarded: yes
+
+Index: istgt-0.4~20111008/src/istgt_lu.c
+===================================================================
+--- istgt-0.4~20111008.orig/src/istgt_lu.c	2011-11-27 21:48:45.000000000 +0100
++++ istgt-0.4~20111008/src/istgt_lu.c	2011-11-27 22:14:12.000000000 +0100
+@@ -606,7 +606,7 @@
+ 	int rc;
+ 
+ 	val = 0ULL;
+-	rc = lstat(file, &st);
++	rc = stat(file, &st);
+ 	if (rc != 0)
+ 		return val;
+ 	if (!S_ISCHR(st.st_mode) && !S_ISBLK(st.st_mode))
+@@ -689,11 +689,9 @@
+ 	int rc;
+ 
+ 	val = 0ULL;
+-	rc = lstat(file, &st);
++	rc = stat(file, &st);
+ 	if (rc < 0)
+ 		return val;
+-	if (S_ISLNK(st.st_mode))
+-		return val;
+ 
+ 	if (S_ISCHR(st.st_mode)) {
+ 		val = istgt_lu_get_devsize(file);
+@@ -702,7 +700,7 @@
+ 	} else if (S_ISREG(st.st_mode)) {
+ 		val = st.st_size;
+ 	} else {
+-		ISTGT_ERRLOG("lstat is neither REG, CHR nor BLK\n");
++		ISTGT_ERRLOG("stat is neither REG, CHR nor BLK\n");
+ 		val = 0ULL;
+ 	}
+ 	return val;

Deleted: tags/istgt/0.4~20111008-3/debian/patches/series
===================================================================
--- trunk/istgt/debian/patches/series	2012-06-22 19:38:20 UTC (rev 4328)
+++ tags/istgt/0.4~20111008-3/debian/patches/series	2012-06-26 22:28:59 UTC (rev 4332)
@@ -1,4 +0,0 @@
-fix-installdir.patch
-add-istgtcontrol-manpage
-fix-as-needed-build.patch
-#fix-autosize.patch

Copied: tags/istgt/0.4~20111008-3/debian/patches/series (from rev 4330, trunk/istgt/debian/patches/series)
===================================================================
--- tags/istgt/0.4~20111008-3/debian/patches/series	                        (rev 0)
+++ tags/istgt/0.4~20111008-3/debian/patches/series	2012-06-26 22:28:59 UTC (rev 4332)
@@ -0,0 +1,5 @@
+fix-installdir.patch
+add-istgtcontrol-manpage
+fix-as-needed-build.patch
+fix-autosize.patch
+add-reload.patch




More information about the Glibc-bsd-commits mailing list