Re: New pre-2.0.31 patches..

Dr. Werner Fink (werner@suse.de)
Tue, 5 Aug 1997 14:48:19 +0200


The next missed patch: the atime patch ... one of the most used one on
big news servers :-)

The appened patch is extracted out of David's pre-patch.

Werner

---------------------------------------------------------------------------
diff -urN linux-2.0.31-linus/CREDITS linux/CREDITS
--- linux-2.0.31-linus/CREDITS Tue Aug 5 11:59:16 1997
+++ linux/CREDITS Tue Aug 5 14:40:57 1997
@@ -1040,6 +1040,11 @@
S: Reston, Virginia 20191
S: USA

+N: Clayton O'Neill
+E: coneill@oneill.net
+W: http://www.oneill.net
+D: no_atime patch for EXT2
+
N: Michael O'Reilly
E: michael@iinet.com.au
E: oreillym@tartarus.uwa.edu.au
diff -urN linux-2.0.31-linus/fs/Config.in linux/fs/Config.in
--- linux-2.0.31-linus/fs/Config.in Tue Aug 5 11:59:23 1997
+++ linux/fs/Config.in Tue Aug 5 14:41:25 1997
@@ -8,6 +8,9 @@
tristate 'Minix fs support' CONFIG_MINIX_FS
tristate 'Extended fs support' CONFIG_EXT_FS
tristate 'Second extended fs support' CONFIG_EXT2_FS
+if [ "$CONFIG_EXT2_FS" = "y" ]; then
+ bool ' NO_ATIME support for ext2 filesystems' CONFIG_EXT2_NOATIME
+fi
tristate 'xiafs filesystem support' CONFIG_XIA_FS

# msdos filesystems
diff -urN linux-2.0.31-linus/fs/ext2/dir.c linux/fs/ext2/dir.c
--- linux-2.0.31-linus/fs/ext2/dir.c Fri Dec 22 12:00:19 1995
+++ linux/fs/ext2/dir.c Tue Aug 5 14:40:57 1997
@@ -17,6 +17,8 @@

#include <asm/segment.h>

+#include <linux/config.h> /* For CONFIG_EXT2_NOATIME if enabled. */
+
#include <linux/errno.h>
#include <linux/fs.h>
#include <linux/ext2_fs.h>
@@ -206,7 +208,11 @@
offset = 0;
brelse (bh);
}
+#ifdef CONFIG_EXT2_NOATIME
+ if (!IS_RDONLY(inode) && !test_opt(sb,NO_ATIME)) {
+#else
if (!IS_RDONLY(inode)) {
+#endif
inode->i_atime = CURRENT_TIME;
inode->i_dirt = 1;
}
diff -urN linux-2.0.31-linus/fs/ext2/super.c linux/fs/ext2/super.c
--- linux-2.0.31-linus/fs/ext2/super.c Sun Jul 7 10:06:53 1996
+++ linux/fs/ext2/super.c Tue Aug 5 14:40:57 1997
@@ -21,6 +21,8 @@
#include <asm/segment.h>
#include <asm/system.h>

+#include <linux/config.h> /* For CONFIG_EXT2_NOATIME if enabled. */
+
#include <linux/errno.h>
#include <linux/fs.h>
#include <linux/ext2_fs.h>
@@ -252,6 +254,13 @@
value);
return 0;
}
+#ifdef CONFIG_EXT2_NOATIME
+ } else if (!strcmp (this_char, "no_atime")) {
+ set_opt (*mount_options, NO_ATIME);
+ }
+ else if (!strcmp (this_char, "update_atime")) {
+ clear_opt (*mount_options, NO_ATIME);
+#endif
}
/* Silently ignore the quota options */
else if (!strcmp (this_char, "grpquota")
diff -urN linux-2.0.31-linus/fs/ext2/symlink.c linux/fs/ext2/symlink.c
--- linux-2.0.31-linus/fs/ext2/symlink.c Fri Apr 12 09:33:26 1996
+++ linux/fs/ext2/symlink.c Tue Aug 5 14:40:57 1997
@@ -17,6 +17,8 @@

#include <asm/segment.h>

+#include <linux/config.h> /* For CONFIG_EXT2_NOATIME if enabled. */
+
#include <linux/errno.h>
#include <linux/fs.h>
#include <linux/ext2_fs.h>
@@ -86,7 +88,11 @@
link = bh->b_data;
} else
link = (char *) inode->u.ext2_i.i_data;
+#ifdef CONFIG_EXT2_NOATIME
+ if (!IS_RDONLY(inode) && !test_opt(inode->i_sb,NO_ATIME)) {
+#else
if (!IS_RDONLY(inode)) {
+#endif
inode->i_atime = CURRENT_TIME;
inode->i_dirt = 1;
}
@@ -127,7 +133,11 @@
i++;
put_user (c, buffer++);
}
+#ifdef CONFIG_EXT2_NOATIME
+ if (!IS_RDONLY(inode) && !test_opt(inode->i_sb,NO_ATIME)) {
+#else
if (!IS_RDONLY(inode)) {
+#endif
inode->i_atime = CURRENT_TIME;
inode->i_dirt = 1;
}
diff -urN linux-2.0.31-linus/mm/filemap.c linux/mm/filemap.c
--- linux-2.0.31-linus/mm/filemap.c Tue Aug 5 11:59:25 1997
+++ linux/mm/filemap.c Tue Aug 5 14:40:57 1997
@@ -9,6 +9,8 @@
* most "normal" filesystems (but you don't /have/ to use this:
* the NFS filesystem does this differently, for example)
*/
+#include <linux/config.h> /* For CONFIG_EXT2_NOATIME if enabled. */
+
#include <linux/stat.h>
#include <linux/sched.h>
#include <linux/kernel.h>
@@ -736,6 +738,14 @@
filp->f_reada = 1;
if (page_cache)
free_page(page_cache);
+#ifdef CONFIG_EXT2_NOATIME
+ if (inode->i_sb->s_magic==EXT2_SUPER_MAGIC) {
+ if (!IS_RDONLY(inode) && !test_opt(inode->i_sb, NO_ATIME)) {
+ inode->i_atime = CURRENT_TIME;
+ inode->i_dirt = 1;
+ }
+ } else
+#endif
if (!IS_RDONLY(inode)) {
inode->i_atime = CURRENT_TIME;
inode->i_dirt = 1;
@@ -1175,6 +1185,14 @@
return -EACCES;
if (!inode->i_op || !inode->i_op->readpage)
return -ENOEXEC;
+#ifdef CONFIG_EXT2_NOATIME
+ if (inode->i_sb->s_magic==EXT2_SUPER_MAGIC) {
+ if (!IS_RDONLY(inode) && !test_opt(inode->i_sb, NO_ATIME)) {
+ inode->i_atime = CURRENT_TIME;
+ inode->i_dirt = 1;
+ }
+ } else
+#endif
if (!IS_RDONLY(inode)) {
inode->i_atime = CURRENT_TIME;
inode->i_dirt = 1;