|
@@ -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;
|
|
|
}
|