On 17-01-17 08:57 AM, David Miller wrote: > From: John Fastabend <[email protected]> > Date: Sun, 15 Jan 2017 15:59:47 -0800 > >> @@ -2358,7 +2371,10 @@ static void remove_vq_common(struct virtnet_info *vi) >> /* Free unused buffers in both send and recv, if any. */ >> free_unused_bufs(vi); >> >> - free_receive_bufs(vi); >> + if (rtnl_is_locked()) >> + _free_receive_bufs(vi); >> + else >> + free_receive_bufs(vi); >> >> free_receive_page_frags(vi); >> > > This doesn't work. rtnl_is_locked() doesn't tell if _you_ own the mutex, it > just says that someone does. > > So if we now execute this code without taking the RTNL lock just because some > other thread of control holds it, we introduce a race. >
yeah this bit is junk. dang. Trying to get this locking right without duplicate code or pushing around lock_me variables is getting tricky. .John
