[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