linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* (unknown), 
@ 2013-10-09  8:32 sthumma
  2013-10-09  8:32 ` Race condition in block layer runtime PM init and scsi disk driver sthumma
  0 siblings, 1 reply; 5+ messages in thread
From: sthumma @ 2013-10-09  8:32 UTC (permalink / raw)
  To: Aaron Lu, stern; +Cc: linux-scsi

Hi Aaron,

I found a race condition with the block layer runtime PM due to which
the q->nr_pending is decremented to less than zero (0xFFFF_FFFF (-1))
and hence the blk pre-runtime suspend always returns -EBUSY.


The issue is easily reproduced with a scsi disk with disabled tagged
command queuing

sd_probe_async() ->
	add_disk() ->
		disk_add_event() ->
			schedule(disk_events_workfn)
	sd_revalidate_disk()
	blk_pm_runtime_init()
return;

Let's say the disk_events_workfn() calls sd_check_events() which tries
to send test_unit_ready() and because of sd_revalidate_disk() trying to
send another commands the test_unit_ready() might be re-queued as the
tagged command queuing is disabled.

So the race condition is -

Thread 1 			  |		Thread 2
sd_revalidate_disk()		  |	sd_check_events()
...nr_pending = 0 as q->dev = NULL|	scsi_queue_insert()
blk_runtime_pm_init()		  | 	blk_pm_requeue_request() ->
				  |	nr_pending = -1 since
				  |	q->dev != NULL

Do you have any suggestions on how to fix this issue?


-- 
Regards,
Sujit


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2013-10-10  5:22 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-10-09  8:32 (unknown), sthumma
2013-10-09  8:32 ` Race condition in block layer runtime PM init and scsi disk driver sthumma
2013-10-09  9:07   ` Aaron Lu
2013-10-10  4:55     ` sthumma
2013-10-10  5:22       ` [PATCH] [SCSI] sd: call blk_pm_runtime_init before add_disk Aaron Lu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).