Removing a USB stick locks up GEOM

Joe Marcus Clarke marcus at FreeBSD.org
Sun Sep 13 17:56:23 UTC 2009


If I insert a USB stick with a FAT FS, and mount it, then remove it
without unmounting, trying to retrieve kern.geom.conftxt will result in
a live lock of the system.  Yes, I know this is not a good thing to do,
but I thought one of the goals of new USB was to avoid problems with
doing such bad things.  I'm conducting tests with:

FreeBSD lasagna.marcuscom.com 9.0-CURRENT FreeBSD 9.0-CURRENT #1: Sat
Sep 12 20:51:29 EDT 2009
marcus at lasagna.marcuscom.com:/usr/obj/usr/src/sys/LASAGNA  amd64

The biggest impact of this is hal causes the system to become unusable
since hal uses this sysctl to obtain disk information.  As soon as hald
receives the devd event saying the disk is gone, it tries to refresh its
disk list, and then hangs with this stack trace:

#0  sched_switch (td=0xffffff0001a15a80, newtd=0xffffff0001374380,
flags=Variable "flags" is not available.
)
    at /usr/src/sys/kern/sched_ule.c:1864
#1  0xffffffff802f370f in mi_switch (flags=260, newtd=0x0)
    at /usr/src/sys/kern/kern_synch.c:449
#2  0xffffffff80325bd2 in sleepq_timedwait (wchan=0xffffff00250d7100,
pri=76)
    at /usr/src/sys/kern/subr_sleepqueue.c:623
#3  0xffffffff802f3c88 in _sleep (ident=0xffffff00250d7100, lock=0x0,
priority=Variable "priority" is not available.

) at /usr/src/sys/kern/kern_synch.c:230
#4  0xffffffff8028c11a in g_waitfor_event (func=Variable "func" is not
available.
)
    at /usr/src/sys/geom/geom_event.c:359
#5  0xffffffff8028d739 in sysctl_kern_geom_conftxt (oidp=Variable "oidp"
is not available.
)
    at /usr/src/sys/geom/geom_kern.c:184
#6  0xffffffff802f4e58 in sysctl_root (oidp=Variable "oidp" is not
available.
)
    at /usr/src/sys/kern/kern_sysctl.c:1418
#7  0xffffffff802f6101 in userland_sysctl (td=0x0,
name=0xffffff804d278aa0, 
    namelen=3, old=0x0, oldlenp=Variable "oldlenp" is not available.
) at /usr/src/sys/kern/kern_sysctl.c:1522
#8  0xffffffff802f62da in __sysctl (td=0xffffff0001a15a80, 
    uap=0xffffff804d278bf0) at /usr/src/sys/kern/kern_sysctl.c:1448

This problem isn't 100% reproducible with hal, and I have yet to be able
to reproduce it without hal.  I suspect a timing issue.  And it wouldn't
be hard to add a sleep between the devd event and the sysctl poll, but I
was hoping someone might have an idea of how to fix this in the kernel.

Joe

-- 
Joe Marcus Clarke
FreeBSD GNOME Team      ::      gnome at FreeBSD.org
FreeNode / #freebsd-gnome
http://www.FreeBSD.org/gnome
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: This is a digitally signed message part
Url : http://lists.freebsd.org/pipermail/freebsd-current/attachments/20090913/ca9f7f06/attachment.pgp


More information about the freebsd-current mailing list