diff --git a/mm/filemap.c b/mm/filemap.c index 7b84dc8..723d2ca 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2282,6 +2282,15 @@ __generic_file_aio_write_nolock(struct k written = generic_file_direct_write(iocb, iov, &nr_segs, pos, ppos, count, ocount); + if (written < 0) { + loff_t isize = i_size_read(inode); + /* + * generic_file_direct_write() may have instantiated + * a few blocks outside i_size. Trim these off again. + */ + if (pos + count > isize) + vmtruncate(inode, isize); + } if (written < 0 || written == count) goto out; /*