Hi Marcelo,
FYI:
I see that the "FIFO inode time-stamps are updated on a *readonly* fs"
bug is still not fixed in 2.4.22-rc1.
(this bug is a efficient way to destroy your CompactFlash devices in
certain applications ..)
Stephen C. Tweedie made a fix (see below) for it in May.
It has been in the Alan's -ac series since then and it works fine.
for more info see:
http://www.ussg.iu.edu/hypermail/linux/kernel/0305.3/1132.html
http://www.ussg.iu.edu/hypermail/linux/kernel/0305.3/1604.html
greetings,
Rob van Nieuwkerk
The patch:
(http://www.ussg.iu.edu/hypermail/linux/kernel/0305.3/att-1604/01-4202-vfs-mctime-rofs.patch):
###################################################################
--- linux-2.4-odirect/fs/inode.c.=K0001=.orig
+++ linux-2.4-odirect/fs/inode.c
@@ -1187,12 +1187,34 @@ void update_atime (struct inode *inode)
{
if (inode->i_atime == CURRENT_TIME)
return;
- if ( IS_NOATIME (inode) ) return;
- if ( IS_NODIRATIME (inode) && S_ISDIR (inode->i_mode) ) return;
- if ( IS_RDONLY (inode) ) return;
+ if (IS_NOATIME(inode))
+ return;
+ if (IS_NODIRATIME(inode) && S_ISDIR(inode->i_mode))
+ return;
+ if (IS_RDONLY(inode))
+ return;
inode->i_atime = CURRENT_TIME;
mark_inode_dirty_sync (inode);
-} /* End Function update_atime */
+}
+
+/**
+ * update_mctime - update the mtime and ctime
+ * @inode: inode accessed
+ *
+ * Update the modified and changed times on an inode for writes to special
+ * files such as fifos. No change is forced if the timestamps are already
+ * up-to-date or if the filesystem is readonly.
+ */
+
+void update_mctime (struct inode *inode)
+{
+ if (inode->i_mtime == CURRENT_TIME && inode->i_ctime == CURRENT_TIME)
+ return;
+ if (IS_RDONLY(inode))
+ return;
+ inode->i_ctime = inode->i_mtime = CURRENT_TIME;
+ mark_inode_dirty (inode);
+}
/*
--- linux-2.4-odirect/fs/pipe.c.=K0001=.orig
+++ linux-2.4-odirect/fs/pipe.c
@@ -230,8 +230,7 @@ pipe_write(struct file *filp, const char
/* Signal readers asynchronously that there is more data. */
wake_up_interruptible(PIPE_WAIT(*inode));
- inode->i_ctime = inode->i_mtime = CURRENT_TIME;
- mark_inode_dirty(inode);
+ update_mctime(inode);
out:
up(PIPE_SEM(*inode));
--- linux-2.4-odirect/include/linux/fs.h.=K0001=.orig
+++ linux-2.4-odirect/include/linux/fs.h
@@ -201,6 +201,7 @@ extern int leases_enable, dir_notify_ena
#include <asm/byteorder.h>
extern void update_atime (struct inode *);
+extern void update_mctime (struct inode *);
#define UPDATE_ATIME(inode) update_atime (inode)
extern void buffer_init(unsigned long);
On Mer, 2003-08-06 at 18:23, Rob van Nieuwkerk wrote:
> Stephen C. Tweedie made a fix (see below) for it in May.
> It has been in the Alan's -ac series since then and it works fine.
Certainly seems to be fine and it is a real bug. There is another unfixed
one of the same form with tty drivers too
On 08 Aug 2003 13:39:44 +0100
Alan Cox <[email protected]> wrote:
> On Mer, 2003-08-06 at 18:23, Rob van Nieuwkerk wrote:
> > Stephen C. Tweedie made a fix (see below) for it in May.
> > It has been in the Alan's -ac series since then and it works fine.
>
> Certainly seems to be fine and it is a real bug. There is another unfixed
> one of the same form with tty drivers too
Hi Alan,
How does this other bug present itself ?
I use both console and serial port output in my readonly CF
application. And I don't have any writes to the CF anymore after
fixing the FIFO bug.
greetings,
Rob van Nieuwkerk
On 8 Aug 2003, Alan Cox wrote:
> On Mer, 2003-08-06 at 18:23, Rob van Nieuwkerk wrote:
> > Stephen C. Tweedie made a fix (see below) for it in May.
> > It has been in the Alan's -ac series since then and it works fine.
>
> Certainly seems to be fine and it is a real bug. There is another unfixed
> one of the same form with tty drivers too
Applied.
On Gwe, 2003-08-08 at 13:54, Rob van Nieuwkerk wrote:
> How does this other bug present itself ?
> I use both console and serial port output in my readonly CF
> application. And I don't have any writes to the CF anymore after
> fixing the FIFO bug.
create a tty device node
open it
delete it
mount the fs r/o or unmount it
close it