On Thu, 2010-05-27 at 07:50 +0100, Al Viro wrote: > Note, e.g., that in your series you've touched udf; it can set s_dirt > until the cows come home, but without ->write_super() it'll be ignored > by everything in VFS and fs/udf itself never looks at the damn thing. > > A look around it shows fs/sysv, where we never clean the damn flag anymore > for r/w mounts. Yes, really (got broken a year ago, nobody noticed). > > Or, e.g., BFS - there we have ->write_super() mark the buffer_head that > contains on-disk sb dirty, and the only place that sets ->s_dirt is doing > that immediately after having marked the same bh dirty itself. Interesting > place, at that - bfs_fill_super() at r/w mount time... Note that ->sync_fs() > there does *not* wait for anything, which is not the right thing to do. > > IOW, this thing is a good topic for code review; I suspect that quite a few > users might be gone as the result. Al, you requested me to review s_dirt usage, well, I'm trying now. One thing I do not understand is s_dirt serialization, which seems to be just absent in some FSes. I checked affs and ext2. E.g., affs does: affs_alloc_block() { mark_buffer_dirty(bh); sb->s_dirt = 1; } vs affs_write_super() { affs_commit_super(); /* YYY: what if sb is marked as dirty right here? */ sb->s_dirt = 0; } vs /* This wakes up periodically */ sync_super() { if (sb->s_root && sb->s_dirt) sb->s_op->write_super(sb); } ext2 seems to be doing something similar. It seems to me that FSes should serialize s_dirt changes somehow, but they don't? Why this is not a problem? -- Best Regards, Artem Bityutskiy (Артём Битюцкий) -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html