Re: [RFC PATCH 2/5] block: Do not stop draining if waitqueue is not empty.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 05/28/2012 08:30 AM, Tejun Heo wrote:
Hello, Asias.

On Fri, May 25, 2012 at 09:16:47AM +0800, Asias He wrote:
I found this after queue cleanup. rl->wait[] is not empty while
rl->count[] == 0. There are exactly nr_sleep - nr_wakeup of process in D
state. So missed wakeup happens? Any ideas to do more debug to find the
root-cause?

Ping.

Ah, okay, freed_request() wakes up single waiter with the assumption
that after the wakeup there will at least be one successful allocation
which in turn will continue the wakeup chain until the wait list is
empty - ie. waiter wakeup is dependent on successful request
allocation happening after each wakeup.  With queue marked dead, any
woken up waiter fails the allocation path, so the wakeup chaining is
lost and we're left with hung waiters.  What we need is wake_up_all()
after drain completion.  Can you please test that?

Thanks, Tejun! Works for me. Will cook a patch for this.

--
Asias
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux