--- /dev/null
+From: Dmitri Monakhov <dmonakhov@openvz.org>
+Date: Mon, 27 Oct 2008 13:01:49 -0700
+Subject: ocfs2: truncate outstanding block after direct io failure
+
+Signed-off-by: Dmitri Monakhov <dmonakhov@openvz.org>
+Cc: Jeff Moyer <jmoyer@redhat.com>
+Cc: Mark Fasheh <mark.fasheh@oracle.com>
+Cc: Joel Becker <Joel.Becker@oracle.com>
+Cc: Nick Piggin <nickpiggin@yahoo.com.au>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Mark Fasheh <mfasheh@suse.com>
+---
+ fs/ocfs2/file.c | 7 +++++++
+ 1 files changed, 7 insertions(+), 0 deletions(-)
+
+Index: linux-2.6.27-ocfs2/fs/ocfs2/file.c
+===================================================================
+--- linux-2.6.27-ocfs2.orig/fs/ocfs2/file.c
++++ linux-2.6.27-ocfs2/fs/ocfs2/file.c
+@@ -1866,6 +1866,13 @@ relock:
+ written = generic_file_direct_write(iocb, iov, &nr_segs, *ppos,
+ ppos, count, ocount);
+ if (written < 0) {
++ /*
++ * direct write may have instantiated a few
++ * blocks outside i_size. Trim these off again.
++ * Don't need i_size_read because we hold i_mutex.
++ */
++ if (*ppos + count > inode->i_size)
++ vmtruncate(inode, inode->i_size);
+ ret = written;
+ goto out_dio;
+ }