diff options
| author | Andrew Morton <akpm@digeo.com> | 2003-03-16 07:22:47 -0800 |
|---|---|---|
| committer | Dave Jones <davej@codemonkey.org.uk> | 2003-03-16 07:22:47 -0800 |
| commit | 3bdfab20fc8add21074bfa24c1a6384ae4eda35d (patch) | |
| tree | e5f11cb5aaa21fbdddb6929eca68ea6b627b1b90 /include | |
| parent | 5577ba7d60583d2ee4426c80d90b47197122735c (diff) | |
[PATCH] Ext2/3 noatime and dirsync fixes
Patch from "Theodore Ts'o" <tytso@mit.edu>
I recently noticed a bug in ext2/3; newly created inodes which inherit
the noatime flag from their containing directory do not respect noatime
until the inode is flushed from the inode cache and then re-read later.
This is because the code which checks the ext2 no-atime attribute and
then sets the S_NOATIME in inode->i_flags is present in
ext2_read_inode(), but not in ext2_new_inode().
I fixed this in 2.4, and then found an even worse bug in the 2.5 code;
the DIRSYNC flag is completely ignored *except* in the case where a
directory is newly created using mkdir and its parent directory has the
DIRSYNC flag. S_DIRSYNC doesn't get set in the ext2_new_inode() or the
ext2_ioctl() paths (which is used by chattr).
This patch centralizes the code which translates the ext2 flags in the
raw ext2 inode to the appropriate flag values in inode->i_flags in a
single location. This fixes the bug, makes things cleaner, and also
removes 30 lines of code and 128 bytes of compiled x86 text in the
bargain.
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/ext3_fs.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/ext3_fs.h b/include/linux/ext3_fs.h index 0612ce8e8274..b3da32479e13 100644 --- a/include/linux/ext3_fs.h +++ b/include/linux/ext3_fs.h @@ -730,6 +730,7 @@ extern void ext3_discard_prealloc (struct inode *); extern void ext3_dirty_inode(struct inode *); extern int ext3_change_inode_journal_flag(struct inode *, int); extern void ext3_truncate (struct inode *); +extern void ext3_set_inode_flags(struct inode *); /* ioctl.c */ extern int ext3_ioctl (struct inode *, struct file *, unsigned int, |
