Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 13 Nov 2004 10:58:00 -0600
From:      Tillman Hodgson <tillman@seekingfire.com>
To:        FreeBSD-Questions <freebsd-questions@freebsd.org>
Subject:   Re: Setting SCSI bus options before reaching fsck at boot time
Message-ID:  <20041113165800.GD33689@seekingfire.com>
In-Reply-To: <20041113052818.GE37496@dan.emsphone.com>
References:  <20041113040749.GB33689@seekingfire.com> <20041113052818.GE37496@dan.emsphone.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Nov 12, 2004 at 11:28:18PM -0600, Dan Nelson wrote:
> In the last episode (Nov 12), Tillman Hodgson said:
> > I'd like to find a way to have camcontrol (or some other mechanism)
> > set the SCSI bus speed on this particular SCSI chain early in the
> > boot process, /before/ it encounters fsck and thus trips over it's
> > own feet in bus resets.
> 
> Since camcontrol is in /sbin, you can just add a line to the top of
> /etc/rc.  A cleaner solution would be to write a small /etc/rc.d/
> script and add a "BEFORE: fsck" line so it gets run before fsck.

That seemed like a reasonable approach, so I took a stab at it.
Unfortunately, I haven't worked with custom RCng scripts before and I
can't seem to get the script to run.

Here's what I have (blank lines removed to save some space):

#!/bin/sh
#
# PROVIDE: camcontrol_start
# REQUIRE: disks
# BEFORE: bgfsck
. /etc/rc.subr
name="camcontrol_tillman"
rcvar=`set rcvar`
start_cmd="camcontrol_start"
stop_cmd=":"
camcontrol_start()
{
        echo -n "camcontrol_tillman has started "
        echo -n "da0 "
        camcontrol negotiate da0 -R10 -a -q
... (repeated for da1 through da6 (it's a 7 bay JBOD tower)) ...
        info "camcontrol_tillman has finished"
}
load_rc_config $name
run_rc_command "$1"

I also have the following in /etc/rc.conf:

### Tillmans custom RCng scripts
camcontrol_tillman_enable="YES"

When I run the following by hand, it works:

root@thoth# camcontrol negotiate da6 | grep freq
(pass6:sym1:0:6:0): frequency: 20.000MHz
root@thoth# camcontrol negotiate da6 -R10 -q -a
root@thoth# camcontrol negotiate da6 | grep freq
(pass6:sym1:0:6:0): frequency: 10.000MHz

Yet when I run `/etc/rc.d/camcontrol_tillman start` (or even
forcestart), all I get is:

root@thoth# /etc/rc.d/camcontrol_tillman forcestart
# camcontrol_tillman

Aside from the echo statements not outputting anything, a quick check
confirms that it really didn't do anything:

root@thoth# camcontrol neg da5 | grep freq
(pass5:sym1:0:5:0): frequency: 20.000MHz

I'm assuming that I just don't understand something relatively simple
about the RCng system and that the script is missing something
relatively minor. Anyone care to enlighten me?

-T


-- 
"The important thing is not to stop questioning. Curiosity has its own reason
 for existing."
    -- Albert Einstein



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