diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-01-10 21:03:30 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-01-10 21:03:30 -0500 |
commit | f45ac22ae2b8fc5b4c32d9b8d17ea419a8701d89 (patch) | |
tree | 8e05bccd7b85fc3dd2fbd33ec3286de27e152819 /fs/direct-io.c | |
parent | 79f3b3cb7a2586b319a43a7f29924c6c555e4357 (diff) | |
parent | c59765042f53a79a7a65585042ff463b69cb248c (diff) |
Merge commit 'v2.6.29-rc1' into x86/urgent
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, | |||
1209 | retval = direct_io_worker(rw, iocb, inode, iov, offset, | 1209 | retval = direct_io_worker(rw, iocb, inode, iov, offset, |
1210 | nr_segs, blkbits, get_block, end_io, dio); | 1210 | nr_segs, blkbits, get_block, end_io, dio); |
1211 | 1211 | ||
1212 | /* | ||
1213 | * In case of error extending write may have instantiated a few | ||
1214 | * blocks outside i_size. Trim these off again for DIO_LOCKING. | ||
1215 | * NOTE: DIO_NO_LOCK/DIO_OWN_LOCK callers have to handle this by | ||
1216 | * it's own meaner. | ||
1217 | */ | ||
1218 | if (unlikely(retval < 0 && (rw & WRITE))) { | ||
1219 | loff_t isize = i_size_read(inode); | ||
1220 | |||
1221 | if (end > isize && dio_lock_type == DIO_LOCKING) | ||
1222 | vmtruncate(inode, isize); | ||
1223 | } | ||
1224 | |||
1212 | if (rw == READ && dio_lock_type == DIO_LOCKING) | 1225 | if (rw == READ && dio_lock_type == DIO_LOCKING) |
1213 | release_i_mutex = 0; | 1226 | release_i_mutex = 0; |
1214 | 1227 | ||