Re: ext3 updates for 2.4.20

From: Chris Mason (mason@suse.com)
Date: Mon Dec 16 2002 - 16:28:12 EST


Hmmm, this took me a while to find the first time around in the
commit_super code, and I almost forgot about it.

Looking at the loop in sync_supers()

       while (sb != sb_entry(&super_blocks))
                if (sb->s_dirt) {
                        sb->s_count++;
                        spin_unlock(&sb_lock);

Right here, we can race against kill_super, which means an unmount can
make the FS go away completely. The only thing that saves the
write_super() call is a check for s->s_root != NULL. Since we don't
check that before calling sync_fs, it should race against an unmount.

                        down_read(&sb->s_umount);
                        write_super(sb);
                        if (wait && sb->s_op && sb->s_op->sync_fs)
                                sb->s_op->sync_fs(sb);
                        drop_super(sb);
                        goto restart;
                } else

Any reason ext3 can't have a check for s_root in there?

-chris

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Mon Dec 23 2002 - 22:00:14 EST