Re: [PATCH][RFC][BUG] updating the ctime and mtime time stamps inmsync()

From: Peter Staubach
Date: Thu Jan 10 2008 - 11:47:02 EST


Rik van Riel wrote:
On Thu, 10 Jan 2008 18:56:07 +0300
"Anton Salikhmetov" <salikhmetov@xxxxxxxxx> wrote:

However, I don't see how they will work if there has been
something like a sync(2) done after the mmap'd region is
modified and the msync call. When the inode is written out
as part of the sync process, I_DIRTY_PAGES will be cleared,
thus causing a miss in this code.

The I_DIRTY_PAGES check here is good, but I think that there
needs to be some code elsewhere too, to catch the case where
I_DIRTY_PAGES is being cleared, but the time fields still need
to be updated.

Agreed. The mtime and ctime should probably also be updated
when I_DIRTY_PAGES is cleared.

The alternative would be to remember that the inode had been
dirty in the past, and have the mtime and ctime updated on
msync or close - which would be more complex.

And also remembering that the file times should not be updated
if the pages were modified via a write(2) operation. Or if
there has been an intervening write(2) operation...

The number of cases to consider and the boundary conditions
quickly make this reasonably complex to get right. That's why
this is the 4'th or 5'th attempt in the last 18 months or so
to get this situation addressed.

ps
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/