diff options
author | Theodore Ts'o <tytso@mit.edu> | 2010-06-11 23:14:04 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2010-06-11 23:14:04 -0400 |
commit | a0375156ca1041574b5d47cc7e32f10b891151b0 (patch) | |
tree | b791961012b9348f289c3dda5dc071bdf9b736d2 /fs/ext4/ext4_jbd2.h | |
parent | 7e27d6e778cd87b6f2415515d7127eba53fe5d02 (diff) |
ext4: Clean up s_dirt handling
We don't need to set s_dirt in most of the ext4 code when journaling
is enabled. In ext3/4 some of the summary statistics for # of free
inodes, blocks, and directories are calculated from the per-block
group statistics when the file system is mounted or unmounted. As a
result the superblock doesn't have to be updated, either via the
journal or by setting s_dirt. There are a few exceptions, most
notably when resizing the file system, where the superblock needs to
be modified --- and in that case it should be done as a journalled
operation if possible, and s_dirt set only in no-journal mode.
This patch will optimize out some unneeded disk writes when using ext4
with a journal.
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs/ext4/ext4_jbd2.h')
-rw-r--r-- | fs/ext4/ext4_jbd2.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/fs/ext4/ext4_jbd2.h b/fs/ext4/ext4_jbd2.h index dade0c024797..8ae8168900bf 100644 --- a/fs/ext4/ext4_jbd2.h +++ b/fs/ext4/ext4_jbd2.h | |||
@@ -141,6 +141,9 @@ int __ext4_journal_get_create_access(const char *where, | |||
141 | int __ext4_handle_dirty_metadata(const char *where, handle_t *handle, | 141 | int __ext4_handle_dirty_metadata(const char *where, handle_t *handle, |
142 | struct inode *inode, struct buffer_head *bh); | 142 | struct inode *inode, struct buffer_head *bh); |
143 | 143 | ||
144 | int __ext4_handle_dirty_super(const char *where, handle_t *handle, | ||
145 | struct super_block *sb); | ||
146 | |||
144 | #define ext4_journal_get_undo_access(handle, bh) \ | 147 | #define ext4_journal_get_undo_access(handle, bh) \ |
145 | __ext4_journal_get_undo_access(__func__, (handle), (bh)) | 148 | __ext4_journal_get_undo_access(__func__, (handle), (bh)) |
146 | #define ext4_journal_get_write_access(handle, bh) \ | 149 | #define ext4_journal_get_write_access(handle, bh) \ |
@@ -152,6 +155,8 @@ int __ext4_handle_dirty_metadata(const char *where, handle_t *handle, | |||
152 | __ext4_journal_get_create_access(__func__, (handle), (bh)) | 155 | __ext4_journal_get_create_access(__func__, (handle), (bh)) |
153 | #define ext4_handle_dirty_metadata(handle, inode, bh) \ | 156 | #define ext4_handle_dirty_metadata(handle, inode, bh) \ |
154 | __ext4_handle_dirty_metadata(__func__, (handle), (inode), (bh)) | 157 | __ext4_handle_dirty_metadata(__func__, (handle), (inode), (bh)) |
158 | #define ext4_handle_dirty_super(handle, sb) \ | ||
159 | __ext4_handle_dirty_super(__func__, (handle), (sb)) | ||
155 | 160 | ||
156 | handle_t *ext4_journal_start_sb(struct super_block *sb, int nblocks); | 161 | handle_t *ext4_journal_start_sb(struct super_block *sb, int nblocks); |
157 | int __ext4_journal_stop(const char *where, handle_t *handle); | 162 | int __ext4_journal_stop(const char *where, handle_t *handle); |