The driver may sleep under a spin lock, and the function call path is: cfs_wi_schedule (acquire the lock by spin_lock) LASSERT lbug_with_loc libcfs_debug_dumplog schedule and kthread_run --> may sleep To fix it, all "LASSERT" is placed out of the spin_lock and spin_unlock. Signed-off-by: Jia-Ju Bai <baijiaju1990@xxxxxxx> --- drivers/staging/lustre/lnet/libcfs/workitem.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/staging/lustre/lnet/libcfs/workitem.c b/drivers/staging/lustre/lnet/libcfs/workitem.c index dbc2a9b..30d28cd 100644 --- a/drivers/staging/lustre/lnet/libcfs/workitem.c +++ b/drivers/staging/lustre/lnet/libcfs/workitem.c @@ -179,12 +179,12 @@ struct cfs_wi_sched { { LASSERT(!in_interrupt()); /* because we use plain spinlock */ LASSERT(!sched->ws_stopping); + if (!wi->wi_scheduled) + LASSERT(list_empty(&wi->wi_list)); spin_lock(&sched->ws_lock); if (!wi->wi_scheduled) { - LASSERT(list_empty(&wi->wi_list)); - wi->wi_scheduled = 1; sched->ws_nscheduled++; if (!wi->wi_running) { @@ -195,8 +195,8 @@ struct cfs_wi_sched { } } - LASSERT(!list_empty(&wi->wi_list)); spin_unlock(&sched->ws_lock); + LASSERT(!list_empty(&wi->wi_list)); } EXPORT_SYMBOL(cfs_wi_schedule); -- 1.7.9.5 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel