--- /dev/null
+#! /bin/sh
+# FS QA Test No. 215
+#
+# Test out c/mtime updates after mapped writes.
+#
+# Based on the testcase in http://bugzilla.kernel.org/show_bug.cgi?id=2645
+#
+#-----------------------------------------------------------------------
+# Copyright (c) 2009 Christoph Hellwig.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it would be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write the Free Software Foundation,
+# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#-----------------------------------------------------------------------
+#
+# creator
+owner=hch@lst.de
+
+seq=`basename $0`
+echo "QA output created by $seq"
+
+_cleanup()
+{
+ cd /
+ rm -f $testfile
+}
+
+here=`pwd`
+tmp=/tmp/$$
+status=1 # failure is the default!
+trap "_cleanup; exit \$status" 0 1 2 3 15
+
+# get standard environment, filters and checks
+. ./common.rc
+. ./common.filter
+
+# real QA test starts here
+_supported_fs generic
+_supported_os Linux
+
+testfile=$TEST_DIR/tst.mmap
+
+echo
+echo "creating test file"
+dd if=/dev/zero of=$testfile count=4096
+
+mtime1=`stat --printf="%Y" $testfile`
+ctime1=`stat --printf="%Z" $testfile`
+
+sleep 2
+
+echo
+echo "writing via mmap"
+$XFS_IO_PROG -F -f \
+ -c 'mmap 0 4096' \
+ -c 'mwrite 0 4096' \
+ $testfile | _filter_xfs_io_unique
+
+mtime2=`stat --printf="%Y" $testfile`
+ctime2=`stat --printf="%Z" $testfile`
+
+let mtime_diff=$mtime2-$mtime1
+let ctime_diff=$ctime2-$ctime1
+
+if [ "$mtime_diff" -eq "0" ]; then
+ echo "FAIL: mtime not update after mapped write"
+fi
+
+if [ "$ctime_diff" -eq "0" ]; then
+ echo "FAIL: ctime not update after mapped write"
+fi
+
+# success, all done
+echo "*** done"
+rm -f $seq.full
+status=0