xfs: fix timestamp handling in xfs_setattr
authorChristoph Hellwig <hch@infradead.org>
Wed, 23 Dec 2009 16:09:13 +0000 (16:09 +0000)
committerAlex Elder <aelder@sgi.com>
Sun, 10 Jan 2010 18:21:58 +0000 (12:21 -0600)
commitd6d59bada372bcf8bd36c3bbc71c485c29dd2a4b
tree140a4625597ffac953ce1d0dbbfed7caa436e053
parentea9a48881e093a41a79305fb1545ca0794b203dc
xfs: fix timestamp handling in xfs_setattr

We currently have some rather odd code in xfs_setattr for
updating the a/c/mtime timestamps:

 - first we do a non-transaction update if all three are updated
   together
 - second we implicitly update the ctime for various changes
   instead of relying on the ATTR_CTIME flag
 - third we set the timestamps to the current time instead of the
   arguments in the iattr structure in many cases.

This patch makes sure we update it in a consistent way:

 - always transactional
 - ctime is only updated if ATTR_CTIME is set or we do a size
   update, which is a special case
 - always to the times passed in from the caller instead of the
   current time

The only non-size caller of xfs_setattr that doesn't come from
the VFS is updated to set ATTR_CTIME and pass in a valid ctime
value.

Reported-by: Eric Blake <ebb9@byu.net>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Alex Elder <aelder@sgi.com>
fs/xfs/linux-2.6/xfs_acl.c
fs/xfs/xfs_vnodeops.c