

The pipe code is ignoring IS_RDONLY().



 fs/inode.c |    7 ++++++-
 fs/pipe.c  |    6 ++----
 2 files changed, 8 insertions(+), 5 deletions(-)

diff -puN fs/pipe.c~pipe-rofs-fix fs/pipe.c
--- 25/fs/pipe.c~pipe-rofs-fix	2003-08-08 03:34:59.000000000 -0700
+++ 25-akpm/fs/pipe.c	2003-08-08 03:34:59.000000000 -0700
@@ -208,10 +208,8 @@ pipe_write(struct file *filp, const char
 		wake_up_interruptible(PIPE_WAIT(*inode));
 		kill_fasync(PIPE_FASYNC_READERS(*inode), SIGIO, POLL_IN);
 	}
-	if (ret > 0) {
-		inode->i_ctime = inode->i_mtime = CURRENT_TIME;
-		mark_inode_dirty(inode);
-	}
+	if (ret > 0)
+		inode_update_time(inode, 1);	/* mtime and ctime */
 	return ret;
 }
 
diff -puN fs/inode.c~pipe-rofs-fix fs/inode.c
--- 25/fs/inode.c~pipe-rofs-fix	2003-08-08 03:37:03.000000000 -0700
+++ 25-akpm/fs/inode.c	2003-08-08 03:37:41.000000000 -0700
@@ -1150,9 +1150,14 @@ void update_atime(struct inode *inode)
 
 void inode_update_time(struct inode *inode, int ctime_too)
 {
-	struct timespec now = current_kernel_time();
+	struct timespec now;
 	int sync_it = 0;
 
+	if (IS_RDONLY(inode))
+		return;
+
+	now = current_kernel_time();
+
 	if (inode_times_differ(inode, &inode->i_mtime, &now))
 		sync_it = 1;
 	inode->i_mtime = now;

_
