diff --git a/fs/super.c b/fs/super.c index 14862ca3500af8bee835d378a20ea24c58391b20..118a0dea4749e7564798146419aeca4ea5fb4d2b 100644 --- a/fs/super.c +++ b/fs/super.c @@ -1397,8 +1397,16 @@ static int super_s_dev_set(struct super_block *s, struct fs_context *fc) static int super_s_dev_test(struct super_block *s, struct fs_context *fc) { - return !(s->s_iflags & SB_I_RETIRED) && - s->s_dev == *(dev_t *)fc->sget_key; + if ((s->s_iflags & SB_I_RETIRED)) + return false; + + if (s->s_dev != *(dev_t *)fc->sget_key) + return false; + + if (s->s_bdev && !disk_live(s->s_bdev->bd_disk)) + return false; + + return true; } /**