kern/93381: reboot(8) works but 'reboot -n' hangs

Eugene Grosbein eugen at grosbein.pp.ru
Wed Feb 15 02:40:05 PST 2006


>Number:         93381
>Category:       kern
>Synopsis:       reboot(8) works but 'reboot -n' hangs
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Feb 15 10:40:02 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator:     Eugene Grosbein
>Release:        FreeBSD 6.1-PRERELEASE i386
>Organization:
Svyaz-Service JSC
>Environment:
System: FreeBSD kost.svzserv.kemerovo.su 6.1-PRERELEASE FreeBSD 6.1-PRERELEASE #8: Wed Feb 15 06:40:36 KRAT 2006 eugen at kost.svzserv.kemerovo.su:/usr/obj/usr/src/sys/TEST i386

>Description:
	While testing NanoBSD running from USB flash (umass/da0)
	I discovered that 'reboot -n' hangs the box just after 'Uptime ...'
	is printed to console. Meantime, 'shutdown -r'
	and plain 'reboot' works.

	I've added lots of printf's into my kernel and traced the a bit.

1. boot() from src/sys/kern/kern_shutdown.c calls
   EVENTHANDLER_INVOKE(shutdown_post_sync, howto);
2. dashutdown() from src/sys/cam/scsi/scsi_da.c is called
   from shutdown_post_sync;
3. dashutdown() calls xpt_polled_action() from src/sys/cam/cam_xpt.c
4. xpt_polled_action() has the following code:

        if (timeout != 0) {
                xpt_action(start_ccb);
                while(--timeout > 0) {
                        (*(sim->sim_poll))(sim);
                        camisr(&cam_bioq);
                        if ((start_ccb->ccb_h.status  & CAM_STATUS_MASK)
                            != CAM_REQ_INPROG)
                                break;
                        DELAY(1000);
                }

This 'while' loop is effectively endless for that case.
timeout appears to be 3600000 (yes, five zeroes) here.

>How-To-Repeat:

	Run FreeBSD with root partition being /dev/da0s1a and USB flash.
	Try to reboot it using 'reboot -n'.
>Fix:

	Unknown
>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list