tcf_ife_init() contains a big chunk of code executed with ife->tcf_lock spinlock held. But that code contains several calls to sleeping functions: populate_metalist() and use_all_metadata() -> add_metainfo() -> find_ife_oplist(metaid) -> read_lock() -> try_module_get(o->owner) -> kzalloc(sizeof(*mi), GFP_KERNEL); -> ops->alloc(mi, metaval); -> module_put(ops->owner); _tcf_ife_cleanup() -> module_put()
The same problem is actual for tcf_ife_cleanup() as well. Found by Linux Driver Verification project (linuxtesting.org). -- Alexey Khoroshilov Linux Verification Center, ISPRAS web: http://linuxtesting.org