From 17868220a4b521ff00f5bbaef8a80e3c1a71ab11 Mon Sep 17 00:00:00 2001 From: Tejun Heo Date: Tue, 20 Jul 2010 15:18:07 -0700 Subject: [PATCH] --- yaml --- r: 207599 b: refs/heads/master c: 4f331f01b9c43bf001d3ffee578a97a1e0633eac h: refs/heads/master i: 207597: 457c837fcc82d0049117f2548246c18218d6da53 207595: 308051d11b1435e15e095ce7dc5c6aa1af24b1fe 207591: caebb839ad1c276bfffd9ef824a4d178770165c3 207583: 42f16519a2282031d349e085ab8f6c4cfaba5ba4 v: v3 --- [refs] | 2 +- trunk/fs/super.c | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index c226af5e99d0..077ff48580da 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 719f2c879f4dda7d7f303bd387d37cd96db29d31 +refs/heads/master: 4f331f01b9c43bf001d3ffee578a97a1e0633eac diff --git a/trunk/fs/super.c b/trunk/fs/super.c index 938119ab8dcb..3479ca6f005f 100644 --- a/trunk/fs/super.c +++ b/trunk/fs/super.c @@ -773,7 +773,16 @@ int get_sb_bdev(struct file_system_type *fs_type, goto error_bdev; } + /* + * s_umount nests inside bd_mutex during + * __invalidate_device(). close_bdev_exclusive() + * acquires bd_mutex and can't be called under + * s_umount. Drop s_umount temporarily. This is safe + * as we're holding an active reference. + */ + up_write(&s->s_umount); close_bdev_exclusive(bdev, mode); + down_write(&s->s_umount); } else { char b[BDEVNAME_SIZE];