Hi, pr_ddain and if_drain memory reclaiming routines are called from m_reclaim. Most of them are delayed, i.e., it just sets a flag and does memory reclaiming later in fasttimo callouts. However, only ieee1394_drain (one and only of if_drain callbacks) tries to reclaim memory there.
I'm thinking of ieee1394_drain delayed as well, like this: http://www.netbsd.org/~ozaki-r/delayed_ieee1394_drain.diff It does almost the same as pr_domain callbacks; ieee1394_drainstub just sets ic_drainwanted flag and later ieee1394_watchdog calls ieee1394_drain if the flag is set. (ieee1394_watchdog also does memory reclaiming, but to keep the original behavior as much as possible, we call ieee1394_drain.) By doing so, we can make *_drain callbacks consistent, make m_reclaim MP-safe and get rid of KERNEL_LOCK from it. One drawback is that the behavior of m_reclaim will be changed and somebody would be suffered from it. (I'm not sure if it's serious or not.) How about the change? ieee1394 guys? Thanks, ozaki-r
