Re: [Patch] pipe: use file_update_time() when hold i_mutex

From: Miklos Szeredi
Date: Mon Aug 03 2009 - 12:58:15 EST


On Wed, 2009-07-22 at 17:21 +0800, Amerigo Wang wrote:
> Miklos Szeredi wrote:
> > On Tue, 2009-07-21 at 18:07 +0800, Amerigo Wang wrote:
> >
> >> Andrew Morton wrote:
> >>
> >>> On Mon, 6 Jul 2009 01:35:30 -0400
> >>> Amerigo Wang <amwang@xxxxxxxxxx> wrote:
> >>>
> >>>
> >>>
> >>>> file_update_time() should be called with i_mutex held,
> >>>> move it before mutex_unlock().
> >>>>
> >>>>
> >>>>
> >>> Why do you believe that file_update_time() needs i_mutex?
> >>>
> >>>
> >> file_update_time() modifies inode, no? :)
> >>
> >
> > So does touch_atime(), yet neither needs i_mutex.
> >
> Yes?
>
> Then how the inode is protected when file_update_time() modifies
> it?

Protected against what?

For example the inode isn't protected against concurrent access by
stat(2), since that doesn't take i_mutex.

And indeed it looks like there are races there, since set/get operations
are not atomic on the timestamp, so stat could return a garbled value if
it races with file_update_time() or touch_atime().

Possibly worth fixing, but I'm not sure how to do that without affecting
the scalability of stat and friends and without adding too much
complexity.

Thanks,
Miklos

--
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/