Date: Thu, 21 May 2009 16:26:41 +0300 From: Kostik Belousov <kostikbel@gmail.com> To: Attilio Rao <attilio@freebsd.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r192535 - head/sys/kern Message-ID: <20090521132641.GJ1927@deviant.kiev.zoral.com.ua> In-Reply-To: <200905211322.n4LDM73t067924@svn.freebsd.org> References: <200905211322.n4LDM73t067924@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--KiOS11rrlPLUJaFM Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Thu, May 21, 2009 at 01:22:07PM +0000, Attilio Rao wrote: > Author: attilio > Date: Thu May 21 13:22:07 2009 > New Revision: 192535 > URL: http://svn.freebsd.org/changeset/base/192535 >=20 > Log: > Move the M_WAITOK flag in notify() into an M_NOWAIT one in order to mat= ch > the behaviour alredy present with the further malloc() call in > devctl_notify(). > This fixes a bug in the CAM layer where the camisr handler finished to > call camperiphfree() (and subsequently destroy_dev() resulting in a new > dev notify) while the xpt lock is held. This is wrong. You cannot call destroy_dev() while holding any mutex. Taking this into account, it makes no sense to use M_NOWAIT in notify(). > =20 > PR: kern/130330 > Tested by: Riccardo Torrini <riccardo dot torrini at esaote dot com> >=20 > Modified: > head/sys/kern/kern_conf.c >=20 > Modified: head/sys/kern/kern_conf.c > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- head/sys/kern/kern_conf.c Thu May 21 12:36:40 2009 (r192534) > +++ head/sys/kern/kern_conf.c Thu May 21 13:22:07 2009 (r192535) > @@ -491,7 +491,9 @@ notify(struct cdev *dev, const char *ev) > if (cold) > return; > namelen =3D strlen(dev->si_name); > - data =3D malloc(namelen + sizeof(prefix), M_TEMP, M_WAITOK); > + data =3D malloc(namelen + sizeof(prefix), M_TEMP, M_NOWAIT); > + if (data =3D=3D NULL) > + return; > memcpy(data, prefix, sizeof(prefix) - 1); > memcpy(data + sizeof(prefix) - 1, dev->si_name, namelen + 1); > devctl_notify("DEVFS", "CDEV", ev, data); --KiOS11rrlPLUJaFM Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (FreeBSD) iEYEARECAAYFAkoVVpEACgkQC3+MBN1Mb4glQQCdEM0ah4yu8InyG1m5bUD95rXO 97UAmwe15Zq8oxgGyo8a190TS0MprCeh =S2ta -----END PGP SIGNATURE----- --KiOS11rrlPLUJaFM--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090521132641.GJ1927>