Kent,
Bcache will put write_dirty_finish into system_wq, and also
journal_write if the journal is full. The write lock of the root node
is hold with journal_write,  and the lock won't be released until
journal_write_done, which means at this moment all work queue kthreads
which run write_dirty_finish will block since they are trying to
require the read lock of root node.

And as we know the max number of active kthreads belong to system_wq
is min(256, 4*num_possible_cpus), so if all kthreads in the poll have
been blocked in write_dirty_finish, the journal_write queued up has no
chance to run, resulting to all the kthreads sleep forever. Is this
ever possible? Have you seen such deadlocks in your systems?

Thanks,
Zhu Yanhai
--
To unsubscribe from this list: send the line "unsubscribe linux-bcache" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to