Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 14 Aug 2003 22:37:35 -0600 (MDT)
From:      "M. Warner Losh" <imp@bsdimp.com>
To:        eaja@erols.com
Cc:        freebsd-current@freebsd.org
Subject:   Re: usbd does not use detach
Message-ID:  <20030814.223735.103163505.imp@bsdimp.com>
In-Reply-To: <20030814110113.4d238ddd.eaja@erols.com>
References:  <1060185309.676.1.camel@Twoflower.liebende.de> <1060504397.777.15.camel@syrenna.deep-ocean.local> <20030814110113.4d238ddd.eaja@erols.com>

next in thread | previous in thread | raw e-mail | index | archive | help
In message: <20030814110113.4d238ddd.eaja@erols.com>
            Eric Jacobs <eaja@erols.com> writes:
: #    DETACH_FORCE: Clients using the device must be disconnected,
: #        typically by revoking open file descriptors. May not
: #        return EBUSY due to client activitiy, but may return
: #        that or other errors due to hardware problems or
: #        limitations.
: #
: #    DETACH_EJECTED: This call is made from a lower-level bus   
: #        driver when the device has been physically removed from
: #        the system. Like DETACH_FORCE, except that drivers can
: #        avoid attemping (and failing) to reset the hardware
: #        state. This request must succeed.

These two are redundant.  Devices can already ask the bridge driver if
the device is still present on the bus.  Smart drivers already do
this, but most of the drivers in the tree are dumb.  You also have to
deal with device disappearance in ISRs since it is possible for the
device to go away while the device is in the middle of the ISR.  Some
bus technologies also allow interrupt entry when a card/device is
ejected.

: In addition, the DETACH_FORCE and DETACH_EJECTED flags could
: be mapped to appropriate flag values for the other subsystems, such
: as MNT_FORCE and (a new) MNT_EJECTED flag for VFS.

The problem is that when you are detaching a device, it is gone when
you return from the detach routine.  It can be hard to know what
buffers (disk, network, etc) in the system refer a given newbus device
because there's not a one to one mapping for the device_t to dev_t
that the rest of the system uses.  Devices may or may not know about
buffers that are outstanding.  Work would be needed in the buf/bio
system to reference cound the dev_t so that when the driver destroys
it, it doesn't go completely away until the reference count goes to
zero.  However, doing that may have unfavorable performance impacts.

: > i manually umount the device before unpluging it.
: 
: That is the only safe way to do it for now.

Agreed.

Warner



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