Browse Source

MD: warn for potential deadlock

The personality thread shouldn't call mddev_suspend(). Because
mddev_suspend() will for all IO finish, but IO is handled in personality
thread, so this could cause deadlock. To trigger this early, add a
warning if mddev_suspend() is called from personality thread.

Suggested-by: NeilBrown <neilb@suse.com>
Cc: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
Signed-off-by: Shaohua Li <shli@fb.com>
Shaohua Li 9 years ago
parent
commit
70d9798b95
1 changed files with 1 additions and 0 deletions
  1. 1 0
      drivers/md/md.c

+ 1 - 0
drivers/md/md.c

@@ -305,6 +305,7 @@ static blk_qc_t md_make_request(struct request_queue *q, struct bio *bio)
  */
  */
 void mddev_suspend(struct mddev *mddev)
 void mddev_suspend(struct mddev *mddev)
 {
 {
+	WARN_ON_ONCE(current == mddev->thread->tsk);
 	if (mddev->suspended++)
 	if (mddev->suspended++)
 		return;
 		return;
 	synchronize_rcu();
 	synchronize_rcu();