Hello, On 07/12/15(Mon) 16:48, Mathieu - wrote: > Hello, > > I worked a bit on umass(4) recently and had a diff to pass the > umassbus_softc's real size to free so here it is. At some point I > pondered about deleting the whole abstraction, as it would simplify the > free'ing, for we only have one implementation (umass_scsi_softc, as atapi > uses it too). But I figured it would be against the whole design of the > umass driver, thoughts?
I'd rather create a umass_scsi_detach() function symmetrical to umass_scsi_attach(). This way you don't need an extra variable for the size, keep the autoconf(9) glue inside umass_scsi.c and can turn "struct umassbus_softc" into an opaque type. > > Index: usb/umass.c > =================================================================== > RCS file: /cvs/src/sys/dev/usb/umass.c,v > retrieving revision 1.70 > diff -u -p -r1.70 umass.c > --- usb/umass.c 14 Mar 2015 03:38:50 -0000 1.70 > +++ usb/umass.c 7 Dec 2015 15:40:15 -0000 > @@ -651,7 +651,7 @@ umass_detach(struct device *self, int fl > if (scbus != NULL) { > if (scbus->sc_child != NULL) > rv = config_detach(scbus->sc_child, flags); > - free(scbus, M_DEVBUF, 0); > + free(scbus, M_DEVBUF, scbus->sc_size); > sc->bus = NULL; > } > > Index: usb/umass_scsi.c > =================================================================== > RCS file: /cvs/src/sys/dev/usb/umass_scsi.c,v > retrieving revision 1.42 > diff -u -p -r1.42 umass_scsi.c > --- usb/umass_scsi.c 14 Mar 2015 03:38:50 -0000 1.42 > +++ usb/umass_scsi.c 7 Dec 2015 15:40:16 -0000 > @@ -145,6 +145,7 @@ umass_scsi_setup(struct umass_softc *sc) > struct umass_scsi_softc *scbus; > > scbus = malloc(sizeof(*scbus), M_DEVBUF, M_WAITOK | M_ZERO); > + scbus->base.sc_size = sizeof(*scbus); > > sc->bus = (struct umassbus_softc *)scbus; > > Index: usb/umassvar.h > =================================================================== > RCS file: /cvs/src/sys/dev/usb/umassvar.h,v > retrieving revision 1.14 > diff -u -p -r1.14 umassvar.h > --- usb/umassvar.h 6 Nov 2013 14:37:31 -0000 1.14 > +++ usb/umassvar.h 7 Dec 2015 15:40:16 -0000 > @@ -146,6 +146,7 @@ struct umass_wire_methods { > > struct umassbus_softc { > struct device *sc_child; /* child device, for detach */ > + size_t sc_size; > }; > > /* the per device structure */ >