diff options
author | Takashi Iwai <tiwai@suse.de> | 2009-01-15 18:27:20 +0100 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2009-01-15 18:27:20 +0100 |
commit | c0106d72b8d71696dbe9dc80e2c77d4ac63f7531 (patch) | |
tree | ca96d2baecb0555e36219ed6968dc8e306e530ca /fs/direct-io.c | |
parent | Merge branch 'for-2.6.29' into for-2.6.30 (diff) | |
parent | ASoC: Fix the power update function for snd_soc_dapm_value_mux (diff) | |
download | linux-c0106d72b8d71696dbe9dc80e2c77d4ac63f7531.tar.xz linux-c0106d72b8d71696dbe9dc80e2c77d4ac63f7531.zip |
Merge branch 'topic/asoc' into next/asoc
Diffstat (limited to 'fs/direct-io.c')
-rw-r--r-- | fs/direct-io.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/fs/direct-io.c b/fs/direct-io.c index af0558dbe8b7..b6d43908ff7a 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c @@ -1209,6 +1209,19 @@ __blockdev_direct_IO(int rw, struct kiocb *iocb, struct inode *inode, retval = direct_io_worker(rw, iocb, inode, iov, offset, nr_segs, blkbits, get_block, end_io, dio); + /* + * In case of error extending write may have instantiated a few + * blocks outside i_size. Trim these off again for DIO_LOCKING. + * NOTE: DIO_NO_LOCK/DIO_OWN_LOCK callers have to handle this by + * it's own meaner. + */ + if (unlikely(retval < 0 && (rw & WRITE))) { + loff_t isize = i_size_read(inode); + + if (end > isize && dio_lock_type == DIO_LOCKING) + vmtruncate(inode, isize); + } + if (rw == READ && dio_lock_type == DIO_LOCKING) release_i_mutex = 0; |