> On 08 Jun 2016, at 13:47, Paul Goyette <[email protected]> wrote: > > On Wed, 8 Jun 2016, Paul Goyette wrote: > >> On Tue, 7 Jun 2016, Taylor R Campbell wrote: >> >>> Date: Tue, 7 Jun 2016 18:28:11 +0800 (PHT) >>> From: Paul Goyette <[email protected]> >>> >>> Can anyone suggest a reliable way to ensure that a device-driver module >>> can be _really_ safely detached? >>> General approach: >>> 1. Prevent new references (e.g., devsw_detach). >>> 2. Wait for existing references to drain (or roll back with >>> devsw_attach if you don't want to wait, and fail with EBUSY). >>> 3. Unload. >> >> Yes, of course. Thanks, I think this will work. > > Well, it almost works! Just one little problem... :) > > For some reason, the device's open() routine is being called twice, but the > close() routine is only called once. So every iteration leaves the refcount > with a net increment of one. > > I cannot figure out why/how the open routine is called twice.
IIRC the device open() operation gets called on every open while the device close() operation gets called on last close only. See misfs/specfs/spec_vnops.c::spec_close(). -- J. Hannken-Illjes - [email protected] - TU Braunschweig (Germany)
