summaryrefslogtreecommitdiff
path: root/sys-block/tgt/files/tgtd.initd-new
blob: 962ed7bd3a2afcff8821f5fd402f78f8596b3c92 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#!/sbin/openrc-run
# Copyright 1999-2019 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

# shellcheck shell=sh

# Default configuration fike
: "${tgtd_conf:=/etc/tgt/targets.conf}"

pidfile="/var/run/${RC_SVCNAME}.pid"
command="/usr/sbin/tgtd"
command_args_background="--pid-file ${pidfile} ${tgtd_opts}"
extra_commands="forcedstop"
extra_started_commands="forcedreload reload"

depend() {
  use net
}

start_post() {
  # We need to wait for 1 second before do anything with tgtd.
   sleep 1
    # Put tgtd into "offline" state until all the targets are configured.
  # We don't want initiators to (re)connect and fail the connection
  # if configuration is not ready.
  tgtadm --op update --mode sys --name State -v offline

  # Configure the targets.
  if [ ! -r  "${tgtd_conf}" ]; then
    ewarn "Configuration file '${tgtd_conf}' not found!"
    ewarn "Leaving ${SVCNAME} running in 'offline' state."
    eend 0
  else
    ebegin "Loading target configuration"
      tgt-admin --update ALL -c "${tgtd_conf}"
        retval=$?
      if [ $retval -ne 0 ]; then
        eerror "Could not load configuration!"
        stop
        exit $?
      fi
    eend $retval

    # Put tgtd into "ready" state.
    ebegin "Onlining targets. Accepting connections"
      tgtadm --op update --mode sys --name State -v ready
    eend $?
  fi
}

stop() {
  ebegin "Stopping ${SVCNAME}"
    # We need to force shutdown if system is restarting
    # or shutting down.
    if [ "$RC_RUNLEVEL" = "shutdown" ] ; then
        forcedstop
    else
      # Remove all targets. Only remove targets which are not in use.
      tgt-admin --update ALL -c /dev/null >/dev/null 2>&1
      retval=$?
      if [ $retval -eq 107 ] ; then
          einfo "tgtd is not running"
      else
        # tgtd will exit if all targets were removed.
        tgtadm --op delete --mode system >/dev/null 2>&1
        retval=$?
        if [ $retval -ne 0 ] ; then
            eerror "WARNING: Some initiators are still connected - could not stop tgtd"
        fi
      fi
    fi
  eend $retval
}

forcedstop() {
  # NOTE: Forced shutdown of the iscsi target may cause data corruption
  # for initiators that are connected.
  ewarn "WARNING: Force-stopping target framework daemon"
  for i in 5 4 3 2 1; do
    einfo "Continuing in $i seconds..."
    sleep 1
  done

  # Offline everything first. May be needed if we're rebooting, but
  # expect the initiators to reconnect cleanly when we boot again
  # (i.e. we don't want them to reconnect to a tgtd which is still
  # onlineg, but the target is gone).
  tgtadm --op update --mode sys --name State -v offline >/dev/null 2>&1
  retval=$?
  if [ $retval -eq 107 ] ; then
      einfo "tgtd is not running"
  else
    # Offline all targets
      tgt-admin --offline ALL

      # Remove all targets, even if they are still in use.
      tgt-admin --update ALL -c /dev/null -f

      # tgtd shuts down after all targets are removed.
      tgtadm --op delete --mode system
      retval=$?
      if [ $retval -ne 0 ] ; then
      eerror "Failed to shutdown tgtd"
      eend 1
      fi
  fi
  eend $retval
}

reload() {
  ebegin "Updating target framework daemon configuration"
    # Update configuration for targets. Only targets which
    # are not in use will be updated.
    tgt-admin --update ALL -c "${tgtd_conf}" >/dev/null 2>&1
    retval=$?
    if [ $retval -eq 107 ]; then
        ewarn "WARNING: tgtd is not running"
    fi
  eend $retval
}

forcedreload() {
  ebegin "Updating target framework daemon configuration"
    ewarn "WARNING: Force-updating running configuration!"
    # Update configuration for targets, even those in use.
    tgt-admin --update ALL -f -c "${tgtd_conf}" >/dev/null 2>&1
    retval=$?
    if [ $retval -eq 107 ]; then
      ewarn "WARNING: tgtd is not running"
    fi
  eend $retval
}

status_post() {
  einfo "Run 'tgt-admin -s' to see detailed target info."
}