[Pkg-iscsi-maintainers] Bug#748940: iscsitarget: "service iscsitaget stop" fails when under load

Craig Barnes craig.barnes at opusvl.com
Thu May 22 12:10:17 UTC 2014


Package: iscsitarget
Version: 1.4.20.2-10.1
Severity: important
Tags: upstream

Under heavy load the iscsitarget services fails to stop on module removal.

# service iscsitarget stop
[ ok ] Removing iSCSI enterprise target devices: :.
[ ok ] Stopping iSCSI enterprise target service: :.
[....] Removing iSCSI enterprise target modules: :FATAL: Module iscsi_trgt is in use.

Changing etc/init/init.debian to use `rmmod --wait` instead of `modprobe -r` corrects this issue.

This problem causes pacemaker to halt on failover to a secondary node when using the lsb resouce agent
to control iscsitarget.


-- System Information:
Debian Release: 7.5
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'stable')
Architecture: amd64 (x86_64)

Kernel: Linux 3.2.0-4-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

Versions of packages iscsitarget depends on:
ii  libc6     2.13-38+deb7u1
ii  lsb-base  4.1+Debian8+deb7u1
ii  procps    1:3.3.3-3

Versions of packages iscsitarget recommends:
pn  iscsitarget-module  <none>

Versions of packages iscsitarget suggests:
ii  iscsitarget-dkms  1.4.20.2-10.1

-- Configuration Files:
/etc/default/iscsitarget changed:
ISCSITARGET_ENABLE=true
ISCSITARGET_OPTIONS=""

/etc/iet/ietd.conf changed:
	# CHAP Users
	#
	# The same rules as for discovery users apply here.
	#
	# Don't set them if you don't want to use CHAP authentication.
	#
	#IncomingUser joe secret
	#OutgoingUser jim 12charpasswd
	#
	# Logical Unit definition
	#
	# Block devices, regular files (fileio only), LVM, and RAID
	# can be offered to the initiators as a block device.
	#
	# Lun numbers MUST start with zero (each target needs a Lun 0)
	#
	#Lun 0 Path=/dev/sdc,Type=fileio,ScsiId=xyz,ScsiSN=xyz
	#
	# Alias name for this target (Not Used)
	#
	#Alias Test
	#
	# Various iSCSI parameters
	# (not all are used right now, see also iSCSI spec for details)
	#
	# Outgoing SCSI data (initiator to target user data or command
	# parameters) is sent as either solicited data or unsolicited data.
	# Solicited data is sent in response to R2T PDUs.  Unsolicited data
	# can be sent as part of an iSCSI command PDU sequence
	# ("Immediate Data") or as a separate iSCSI data PDU sequence.
	#
	#MaxConnections		1		# Number of connections/session
						# We only support 1
	#MaxSessions		0		# Number of sessions/target
						# 0 = no explicit limit
	#InitialR2T		Yes		# Wait first for R2T
						# Yes = no unsolicited data
	#ImmediateData		Yes		# Data can accompany command
						# Yes = cmnd/data in same PDU
	#MaxRecvDataSegmentLength 8192		# Max data per PDU to receive
	#MaxXmitDataSegmentLength 8192		# Max data per PDU to transmit
	#MaxBurstLength		262144		# Max data per sequence (R2T)
	#FirstBurstLength	65536		# Max unsolicited data sequence
	#DefaultTime2Wait	2		# Secs to wait for ini to logout
						# also secs for ini to wait
						# before logging back in
						# Not implemented, but settable
	#DefaultTime2Retain	0		# Secs keep session after logout
						# We only support 0
	#MaxOutstandingR2T	1		# Max outstanding R2Ts per cmnd
	#DataPDUInOrder		Yes		# Data in PDUs is ordered
						# We only support ordered
	#DataSequenceInOrder	Yes		# PDUs in sequence are ordered
						# We only support ordered
	#ErrorRecoveryLevel	0		# We only support level 0
	#HeaderDigest		None,CRC32C	# PDU header checksum algo list
						# None or CRC32C
						# If only one is set then the
						# initiator must agree to it
						# or the connection will fail
	#DataDigest		None,CRC32C	# PDU data checksum algo list
						# Same as above
	#MaxSessions		0		# Maximum number of sessions to
						# this target - 0 = unlimited
	#NOPInterval		0		# Send a NOP-In ping each after
						# that many seconds if the conn
						# is otherwise idle - 0 = off
	#NOPTimeout		0 		# Wait that many seconds for a
						# response on a NOP-In ping
						# If 0 or > NOPInterval, NOPInterval
						# is used!
	#
	# Various target parameters
	#
	#Wthreads		8		# Number of IO threads
	#QueuedCommands		32		# Number of queued commands
Target iqn.test:mydisk1
	ImmediateData=Yes
	Lun 0 Path=/dev/images/test

/etc/init.d/iscsitarget changed:
PID_FILE=/var/run/ietd.pid
CONFIG_FILE=/etc/iet/ietd.conf
DAEMON=/usr/sbin/ietd
PATH=/sbin:/bin:/usr/sbin:/usr/bin
. /lib/lsb/init-functions # log_{warn,failure}_msg
ISCSITARGET_ENABLE=false
ISCSITARGET_DEFAULTS_FILE=/etc/default/iscsitarget
if [ -s "$ISCSITARGET_DEFAULTS_FILE" ]; then
    . "$ISCSITARGET_DEFAULTS_FILE"
    case "x$ISCSITARGET_ENABLE" in
        xtrue|xfalse) ;;
        *)
            log_failure_msg "value of ISCSITARGET_ENABLE must be either 'true' or 'false';"
            log_failure_msg "not starting iscsitarget."
            exit 1
            ;;
    esac
fi
RETVAL=0
ietd_start()
{
	log_daemon_msg "Starting iSCSI enterprise target service"
	modprobe -q crc32c
	modprobe iscsi_trgt
	RETVAL=$?
	if [ $RETVAL != "0" ] ;  then 
		log_end_msg 1
		exit $RETVAL
	fi
	start-stop-daemon --start --exec $DAEMON --quiet --oknodo -- $ISCSITARGET_OPTIONS
	RETVAL=$?
	if [ $RETVAL = "0" ]; then
		log_end_msg 0
	else
		log_end_msg 1
		exit $RETVAL
	fi	    
	log_end_msg 0
	exit 0
}
	
ietd_stop()
{
	log_daemon_msg "Removing iSCSI enterprise target devices: "
	pidof ietd >/dev/null 2>&1 
	RETVAL=$?
	if [ $RETVAL = "0" ] ; then
		# ugly, but ietadm does not allways provides correct exit values
		RETURN=`ietadm --op delete 2>&1`
		RETVAL=$?
		if [ $RETVAL = "0" ] && [ "$RETURN" != "something wrong" ] ; then
			log_end_msg 0
		else
			log_end_msg 1
			log_failure_msg "failed with reason :$RETURN"
			exit $RETVAL
		fi
		log_daemon_msg "Stopping iSCSI enterprise target service: "
		start-stop-daemon --stop --quiet --exec $DAEMON --pidfile $PID_FILE --oknodo
		RETVAL=$?
		if [ $RETVAL = "0" ]; then
			log_end_msg 0
		else
			log_end_msg 1
		fi
	else
		log_end_msg 0
	fi
	# ugly, but pid file is not removed by ietd
	rm -f $PID_FILE
	
	# check if the module is loaded at all
	lsmod | grep -q iscsi_trgt
	RETVAL=$?
	if [ $RETVAL = "0" ] ; then
		
		log_daemon_msg "Removing iSCSI enterprise target modules: "
		rmmod --wait iscsi_trgt
		RETVAL=$?
		modprobe -r crc32c 2>/dev/null
		if [ $RETVAL = "0" ]; then
			log_end_msg 0
		else
			log_end_msg 1
	  		exit $RETVAL
		fi
	fi
}
case "$1" in
  start)
        if [ "$ISCSITARGET_ENABLE" = "true" ]; then
            ietd_start
        else
            log_warning_msg "iscsitarget not enabled in \"$ISCSITARGET_DEFAULTS_FILE\", not starting..."
        fi
        ;;
  stop)
        ietd_stop
        ;;
  restart|force-reload)
        ietd_stop
	sleep 1
        if [ "$ISCSITARGET_ENABLE" = "true" ]; then
            ietd_start
        else
            log_warning_msg "iscsitarget not enabled in \"$ISCSITARGET_DEFAULTS_FILE\", not starting..."
        fi
        ;;
  status)
	status_of_proc -p $PID_FILE $DAEMON "iSCSI enterprise target" && exit 0 || exit $?
	;;
  *)
        log_action_msg "Usage: $0 {start|stop|restart|status}"
        exit 1
esac
exit 0


-- no debconf information



More information about the Pkg-iscsi-maintainers mailing list