spin_unlock(&sb_lock);
 
        if (down_read_trylock(&sb->s_umount)) {
-               if (sb->s_root)
+               if (sb->s_root && (sb->s_flags & MS_BORN))
                        return true;
                up_read(&sb->s_umount);
        }
                        spin_unlock(&sb_lock);
 
                        down_read(&sb->s_umount);
-                       if (sb->s_root && sb->s_dirt)
+                       if (sb->s_root && sb->s_dirt && (sb->s_flags & MS_BORN))
                                sb->s_op->write_super(sb);
                        up_read(&sb->s_umount);
 
                spin_unlock(&sb_lock);
 
                down_read(&sb->s_umount);
-               if (sb->s_root)
+               if (sb->s_root && (sb->s_flags & MS_BORN))
                        f(sb, arg);
                up_read(&sb->s_umount);
 
                spin_unlock(&sb_lock);
 
                down_read(&sb->s_umount);
-               if (sb->s_root)
+               if (sb->s_root && (sb->s_flags & MS_BORN))
                        f(sb, arg);
                up_read(&sb->s_umount);
 
                        spin_unlock(&sb_lock);
                        down_read(&sb->s_umount);
                        /* still alive? */
-                       if (sb->s_root)
+                       if (sb->s_root && (sb->s_flags & MS_BORN))
                                return sb;
                        up_read(&sb->s_umount);
                        /* nope, got unmounted */
                        spin_unlock(&sb_lock);
                        down_read(&sb->s_umount);
                        /* still alive? */
-                       if (sb->s_root)
+                       if (sb->s_root && (sb->s_flags & MS_BORN))
                                return sb;
                        up_read(&sb->s_umount);
                        /* nope, got unmounted */
                sb->s_count++;
                spin_unlock(&sb_lock);
                down_write(&sb->s_umount);
-               if (sb->s_root && sb->s_bdev && !(sb->s_flags & MS_RDONLY)) {
+               if (sb->s_root && sb->s_bdev && (sb->s_flags & MS_BORN) &&
+                   !(sb->s_flags & MS_RDONLY)) {
                        /*
                         * What lock protects sb->s_flags??
                         */
                return -EBUSY;
        }
 
+       if (!(sb->s_flags & MS_BORN)) {
+               up_write(&sb->s_umount);
+               return 0;       /* sic - it's "nothing to do" */
+       }
+
        if (sb->s_flags & MS_RDONLY) {
                sb->s_frozen = SB_FREEZE_TRANS;
                smp_wmb();