On Wed, May 31, 2017 at 03:23:40PM +0800, Jia-Ju Bai wrote: > The driver may sleep under a spin lock, and the function call path is: > journal_wait_for_write (acquire the lock by spin_lock) > closure_sync > schedule --> may sleep This patch is incorrect, you've introduced a double unlock. Did you actually observe a sleep in atomic? > > To fix it, the lock is released before "closure_sync", and the lock is > acquired again after this function. > > Signed-off-by: Jia-Ju Bai <baijiaju1990@xxxxxxx> > --- > drivers/md/bcache/journal.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/md/bcache/journal.c b/drivers/md/bcache/journal.c > index 1198e53..ad47c36 100644 > --- a/drivers/md/bcache/journal.c > +++ b/drivers/md/bcache/journal.c > @@ -724,6 +724,7 @@ static struct journal_write *journal_wait_for_write(struct cache_set *c, > btree_flush_write(c); > } > > + spin_unlock(&c->journal.lock); > closure_sync(&cl); > spin_lock(&c->journal.lock); > wait = true; > -- > 1.7.9.5 > > -- To unsubscribe from this list: send the line "unsubscribe linux-bcache" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html