diff options
| author | Jan Kara <jack@suse.cz> | 2009-04-27 10:43:51 -0400 |
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2009-06-11 21:36:03 -0400 |
| commit | 5cee5815d1564bbbd505fea86f4550f1efdb5cd0 (patch) | |
| tree | ba99c38932dc534bf56f0d7dcfeeca153f50b007 /include/linux | |
| parent | 429479f031322a0cc5c921ffb2321a51718dc875 (diff) | |
vfs: Make sys_sync() use fsync_super() (version 4)
It is unnecessarily fragile to have two places (fsync_super() and do_sync())
doing data integrity sync of the filesystem. Alter __fsync_super() to
accommodate needs of both callers and use it. So after this patch
__fsync_super() is the only place where we gather all the calls needed to
properly send all data on a filesystem to disk.
Nice bonus is that we get a complete livelock avoidance and write_supers()
is now only used for periodic writeback of superblocks.
sync_blockdevs() introduced a couple of patches ago is gone now.
[build fixes folded]
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/fs.h | 2 | ||||
| -rw-r--r-- | include/linux/writeback.h | 1 |
2 files changed, 1 insertions, 2 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index 41a9907f342..f00df653cf2 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -1321,7 +1321,7 @@ struct super_block { | |||
| 1321 | struct rw_semaphore s_umount; | 1321 | struct rw_semaphore s_umount; |
| 1322 | struct mutex s_lock; | 1322 | struct mutex s_lock; |
| 1323 | int s_count; | 1323 | int s_count; |
| 1324 | int s_need_sync_fs; | 1324 | int s_need_sync; |
| 1325 | atomic_t s_active; | 1325 | atomic_t s_active; |
| 1326 | #ifdef CONFIG_SECURITY | 1326 | #ifdef CONFIG_SECURITY |
| 1327 | void *s_security; | 1327 | void *s_security; |
diff --git a/include/linux/writeback.h b/include/linux/writeback.h index 93445477f86..3224820c851 100644 --- a/include/linux/writeback.h +++ b/include/linux/writeback.h | |||
| @@ -79,7 +79,6 @@ struct writeback_control { | |||
| 79 | void writeback_inodes(struct writeback_control *wbc); | 79 | void writeback_inodes(struct writeback_control *wbc); |
| 80 | int inode_wait(void *); | 80 | int inode_wait(void *); |
| 81 | void sync_inodes_sb(struct super_block *, int wait); | 81 | void sync_inodes_sb(struct super_block *, int wait); |
| 82 | void sync_inodes(int wait); | ||
| 83 | 82 | ||
| 84 | /* writeback.h requires fs.h; it, too, is not included from here. */ | 83 | /* writeback.h requires fs.h; it, too, is not included from here. */ |
| 85 | static inline void wait_on_inode(struct inode *inode) | 84 | static inline void wait_on_inode(struct inode *inode) |
