On 02/29/12 03:53, Christoph Hellwig wrote:
Timestamps on regular files are the last metadata that XFS does not update transactionally. Now that we use the delaylog mode exclusively and made the log scode scale extremly well there is no need to bypass that code for timestamp updates. Logging all updates allows to drop a lot of code, and will allow for further performance improvements later on. Note that this patch drops optimized handling of fdatasync - it will be added back in a separate commit. Reviewed-by: Dave Chinner<dchinner@xxxxxxxxxx> Signed-off-by: Christoph Hellwig<hch@xxxxxx> ---
...
@@ -659,9 +598,6 @@ restart: return error; } - if (likely(!(file->f_mode& FMODE_NOCMTIME))) - file_update_time(file); - /* * If the offset is beyond the size of the file, we need to zero any * blocks that fall between the existing EOF and the start of this @@ -685,6 +621,15 @@ restart: return error; /* + * Updating the timestamps will grab the ilock again from + * xfs_fs_dirty_inode, so we have to call it after dropping the + * lock above. Eventually we should look into a way to avoid + * the pointless lock roundtrip. + */ + if (likely(!(file->f_mode& FMODE_NOCMTIME))) + file_update_time(file); +
I see the inode timestamp update was taken out of the dio path. Are those being updated in xfs_trans_ichgtime()?
Reviewed-by: Mark Tinguely _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs