The libfc and libfcoe modules look to have issues with mutexs being used under rcu_read_lock, which triggers "Illegal context switch in RCU read side critical section" warnings under debug kernels. I started looking at fc_disc.c where rport discovery code appears to take a mutex for each rport in fc_rport_login/fc_rport_logoff while being called under rcu_read_lock from fc_disc_done. With the rdata->kref held, I know rcu_read_unlock can be safely called before login fc_rport_login/logoff. But I don't know if it's safe to then recall rcu_read_lock and simply continue on with the list_for_each_entry_rcu or not. And as I start looking into this one case, I also get the same class of problem popping up in at least libfcoe:fcoe_ctrl.c from fcoe_ctrl_timer_work as well :( - Chris Leech