Thanks for your explanation, I can understand now. - Felix -----Original Message----- From: Johannes Berg [mailto:johannes@xxxxxxxxxxxxxxxx] Sent: Saturday, November 24, 2012 6:36 PM To: Felix Liao Cc: linux-wireless@xxxxxxxxxxxxxxx; Ocean Su; Joe Qiao; Bryan Phillippe Subject: Re: Badness at net/mac80211/offchannel.c:264 On Sat, 2012-11-24 at 01:19 +0000, Felix Liao wrote: > Hi Johannes, > Thanks for your help, I just make some tests with the patch you provided. > Yes, there is none warning calltrace again, and none other calltrace too. > > But for the tmp_list, when we abort a roc and add to the tail of > tmp_list, We will delete it from tmp_list in the work async, we need > to modify the prev and next pointer of the head of tmp_list, I think > they are freed from the stack of function ieee80211_roc_purge(), it is > dangerous. No, it's fine because we flush the asynchronous work there by calling flush_delayed_work() so it's not actually asynchronous but synchronous. The reason I didn't just make it call the ieee80211_sw_roc_work() function is that it may already be scheduled, and we need to catch that case as well. johannes ��.n��������+%������w��{.n�����{���zW����ܨ}���Ơz�j:+v�����w����ޙ��&�)ߡ�a����z�ޗ���ݢj��w�f