From b3e466814092758136d6a6badfcc15fec3c029f7 Mon Sep 17 00:00:00 2001 From: Al Viro Date: Mon, 22 Mar 2010 20:15:33 -0400 Subject: [PATCH] --- yaml --- r: 197945 b: refs/heads/master c: 1494583de59dfad2e3a6788ce9817e658d32df22 h: refs/heads/master i: 197943: 45eddbf9638455222beab316c14a9e4aaf72dca0 v: v3 --- [refs] | 2 +- trunk/fs/super.c | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/[refs] b/[refs] index a72b1a3152a5..af23245b0131 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e7fe0585ca8793e2d43c57e77d4ca79042806acf +refs/heads/master: 1494583de59dfad2e3a6788ce9817e658d32df22 diff --git a/trunk/fs/super.c b/trunk/fs/super.c index 4df8233dfb61..44971d7df1ce 100644 --- a/trunk/fs/super.c +++ b/trunk/fs/super.c @@ -471,17 +471,17 @@ struct super_block *get_active_super(struct block_device *bdev) if (!bdev) return NULL; +restart: spin_lock(&sb_lock); list_for_each_entry(sb, &super_blocks, s_list) { if (list_empty(&sb->s_instances)) continue; - if (sb->s_bdev != bdev) - continue; - - if (grab_super(sb)) /* drops sb_lock */ - return sb; - - spin_lock(&sb_lock); + if (sb->s_bdev == bdev) { + if (grab_super(sb)) /* drops sb_lock */ + return sb; + else + goto restart; + } } spin_unlock(&sb_lock); return NULL;