How to get usbd to umount fle systems without crashing ?

User Jhs jhs at flat.berklix.net
Mon Sep 20 09:50:25 PDT 2004


Re. my question on mount & dismount of memory sticks:
Thanks to all (Hank, Brooks, Chris, (hope I missed no one)),
	( Chris's examples were particularly useful in
        	Message-id: <20040914155115.GB13849 at dantooine.vindaloo.com> )

> You want to use the automounter for this. The reason it's dying is
> because FreeBSD is trying to write information (dirty buffers) back to
> the filesystem after the device has disappeared. The correct sequence
> for this would be umount the filesystem, then unplug the device.

Yes. After I posted, I added to the options list in /etc/fstab ",sync"
& checked with tunefs -p that soft updates were disabled on the USB
memory stick (they already were). It didnt help. I'm not suprised
FreeBSD crashes when a write mounted partition is removed, but it's
sad something mounted read only crashes. Read mounted fd0: floppies dont
crash immediately when removed (fortunately no usbd killing devs there).

> I'm not sure if the portmapper is relevent.

I recall AMD or NFS wants it.  On my other FreeBSD-4 hosts using
NFS, portmapper is not neeeded in my rc.conf, as it gets started
automaticaly.  In a stand alone laptop with no net, not running NFS
one would still want AMD, so I've set     rpcbind_enable="YES" in case.


I have 2 problems still, (with 2 configs as below):
  - The 2nd mount in attach line fails (see comment in usbd.conf below).
        Maybe some USB kernel problem that might go away when I upgrade
        from { 5.2-CURRENT built from src/ day or 2 before Sep  3. }
        to 5.2-stable or 5.3-Rel. ?
  - AMD fails to unmount USB devices, (but does unmount cdrom OK eg this works:
        cd /host/cdrom;ls;cd /; sleep 20;mount |grep cdrom      )
Comments requested.
  
1st Config: of /etc/ usbd.conf fstab amd.map rc.conf
  {
  usbd.conf:
    {
    device      "jhs Memory stick Celldisk Pro. IOCELL - M-Systems"
        vendor  0x08ec
        product 0x0834
        release 0x0100
        attach "sleep 2 ; mount -r /dev.dummy/usb.0 ; mkdir /.amd_mnt/usb.ufs.0 ; mount /.amd_mnt/usb.ufs.0; mkdir /.amd_mnt/usb.dos.0 ; mount /.amd_mnt/usb.dos.0"
        # Sleep: proven necessary.
        # Mkdir: if already run at previous insertions (inc. boot with memory 
        #       stick in place) will fail subsequently as already exists
        #       (unless amd removes unused directories) so mkdirs are 
        #       seperated in case it aborts on first pre-existing when 2nd
        #       still needed.
        # Mount: 2nd always fails, regardless which is 1st & 2nd.
        #       typical error message even if done manually after: 
        #                msdosfs: /dev/da0s1: Operation not permitted.
        # Umount: should be done by amd, not by detach, as it crashes system.
        #       (after detach of usb stick there is no device to umount).
        # detach        "umount /stick.bsd; umount /stick.dos"
        # devname       "umass0"
    }     
  fstab:
    {
    /dev/da0          /dev.dummy/usb.0        msdos   ro,noauto 0 0
    # da[01] to enable a probe to initiate automatic creation of da[[01]s[1-4].
    /dev/da0s1        /.amd_mnt/usb.dos.0     msdos   rw,noauto         0 0
    /dev/da0s2a       /.amd_mnt/usb.ufs.0     ufs     rw,noatime,noauto 0 0
    }
  amd.map:
    {
    /defaults       type:=host;fs:=${autodir}/${rhost};rhost:=${key}
    laps            type:=link;fs:=..
    *       opts:=rw,grpid,resvport,vers=2,proto=udp,nodev
    cdrom   type:=cdfs;fs:=${autodir}/${key};dev:=/dev/acd0;addopts:=ro,rrip 
    /.amd_mnt/usb.dos.0       type:=program;fs:=${autodir}/${key};\
        mount:="/sbin/mount mount ${fs}";unmount:="/sbin/umount umount ${fs}"
    /.amd_mnt/usb.ufs.0       type:=program;fs:=${autodir}/${key};\
        mount:="/sbin/mount mount ${fs}";unmount:="/sbin/umount umount ${fs}"
     }
  rc.conf:
    {
    rpcbind_enable="YES" # No by default, Replaces portmap_enable.
    usbd_enable="YES"
    amd_enable="YES"
    amd_flags="-c 30 -l syslog -n -r -t 3 -w 12 /host /etc/amd.map"
    #       "-c 30" reduce name caching from default 300 sec.
    #       "-n" map /host/user to /.amd_mnt/flip
    #       "-r" inherit existing mounts (eg from USB insertion)
    #       "-t3" used to be a bit slow see amd.map
    #       "-w 12" dismount default is 120 seconds
    #       Frequent scans for unmount for memory stick to avoid crash.
    #       chris at vindaloo.c__ uses "-c 30" but not "-w 12".
    }
  }
2nd Config: of /etc/ usbd.conf fstab amd.map rc.conf
  { As above, except to try to debug the amd umount failure:
  {
  usbd.conf:
    {
        attach "sleep 2 ; mount -r /dev.dummy/usb.0 ; mkdir /usb.ufs.0 ; mount /usb.ufs.0; mkdir /usb.dos.0 ; mount /usb.dos.0"
    }
  fstab:
    {
    /dev/da0s1      /usb.dos.0              msdos   rw,noauto         0 0
    /dev/da0s2a     /usb.ufs.0              ufs     rw,noatime,noauto 0 0
    }
  amd.map:
    {
    usb.dos.0  type:=msdos;fs:=${autodir}/${key};dev:=/dev/da0s1;addopts:=sync
    usb.ufs.0  type:=ufs;fs:=${autodir}/${key};dev:=/dev/da0s2a;addopts:=sync
    }
  }

-
Julian Stacey.  Unix,C,Net & Sys. Eng. Consultant, Munich.  http://berklix.com
Mail in Ascii, Html dumped as Spam.  Ihr Rauch = mein allergischer Kopfschmerz.


More information about the freebsd-mobile mailing list