svn commit: r192535 - head/sys/kern
attilio at freebsd.org
Thu May 21 13:43:33 UTC 2009
2009/5/21 Kostik Belousov <kostikbel at gmail.com>:
> On Thu, May 21, 2009 at 03:29:57PM +0200, Attilio Rao wrote:
>> 2009/5/21 Kostik Belousov <kostikbel at gmail.com>:
>> > 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
>> >> Log:
>> >> Move the M_WAITOK flag in notify() into an M_NOWAIT one in order to match
>> >> 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().
>> As long as devctl_notify() also calls M_NOWAIT and if not available
>> skips "silently" it just does the same thing, I think this approach is
>> more consistent.
> M_NOWAIT currently uses system reserve for page allocation,
> so less it is used, the better.
>> It remains, though, the fact to fix CAM when calling destroy_dev().
>> Maybe we should add a witness_warn() there?
> Destroy_dev already has the warning, see line 853.
Oh, but this is not present in 7.2 (that's why the assertion wasn't
going to be hit).
Maybe you can MFC it?
Peace can only be achieved by understanding - A. Einstein
More information about the svn-src-all