diff options
author | Frederic Weisbecker <fweisbec@gmail.com> | 2009-12-07 01:28:35 -0500 |
---|---|---|
committer | Frederic Weisbecker <fweisbec@gmail.com> | 2009-12-07 01:29:22 -0500 |
commit | 6548698f929814375fa5d62ae1db96959b0418c1 (patch) | |
tree | 340924ae82cb0946aa15045b2b72186de52a8146 /fs/ntfs/file.c | |
parent | 1d2c6cfd40b2dece3bb958cbbc405a2c1536ab75 (diff) | |
parent | 22763c5cf3690a681551162c15d34d935308c8d7 (diff) |
Merge commit 'v2.6.32' into reiserfs/kill-bkl
Merge-reason: The tree was based 2.6.31. It's better to be up to date
with 2.6.32. Although no conflicting changes were made in between,
it gives benchmarking results closer to the lastest kernel behaviour.
Diffstat (limited to 'fs/ntfs/file.c')
-rw-r--r-- | fs/ntfs/file.c | 54 |
1 files changed, 3 insertions, 51 deletions
diff --git a/fs/ntfs/file.c b/fs/ntfs/file.c index 3140a4429af1..663c0e341f8b 100644 --- a/fs/ntfs/file.c +++ b/fs/ntfs/file.c | |||
@@ -2076,14 +2076,6 @@ err_out: | |||
2076 | *ppos = pos; | 2076 | *ppos = pos; |
2077 | if (cached_page) | 2077 | if (cached_page) |
2078 | page_cache_release(cached_page); | 2078 | page_cache_release(cached_page); |
2079 | /* For now, when the user asks for O_SYNC, we actually give O_DSYNC. */ | ||
2080 | if (likely(!status)) { | ||
2081 | if (unlikely((file->f_flags & O_SYNC) || IS_SYNC(vi))) { | ||
2082 | if (!mapping->a_ops->writepage || !is_sync_kiocb(iocb)) | ||
2083 | status = generic_osync_inode(vi, mapping, | ||
2084 | OSYNC_METADATA|OSYNC_DATA); | ||
2085 | } | ||
2086 | } | ||
2087 | pagevec_lru_add_file(&lru_pvec); | 2079 | pagevec_lru_add_file(&lru_pvec); |
2088 | ntfs_debug("Done. Returning %s (written 0x%lx, status %li).", | 2080 | ntfs_debug("Done. Returning %s (written 0x%lx, status %li).", |
2089 | written ? "written" : "status", (unsigned long)written, | 2081 | written ? "written" : "status", (unsigned long)written, |
@@ -2145,8 +2137,8 @@ static ssize_t ntfs_file_aio_write(struct kiocb *iocb, const struct iovec *iov, | |||
2145 | mutex_lock(&inode->i_mutex); | 2137 | mutex_lock(&inode->i_mutex); |
2146 | ret = ntfs_file_aio_write_nolock(iocb, iov, nr_segs, &iocb->ki_pos); | 2138 | ret = ntfs_file_aio_write_nolock(iocb, iov, nr_segs, &iocb->ki_pos); |
2147 | mutex_unlock(&inode->i_mutex); | 2139 | mutex_unlock(&inode->i_mutex); |
2148 | if (ret > 0 && ((file->f_flags & O_SYNC) || IS_SYNC(inode))) { | 2140 | if (ret > 0) { |
2149 | int err = sync_page_range(inode, mapping, pos, ret); | 2141 | int err = generic_write_sync(file, pos, ret); |
2150 | if (err < 0) | 2142 | if (err < 0) |
2151 | ret = err; | 2143 | ret = err; |
2152 | } | 2144 | } |
@@ -2154,46 +2146,6 @@ static ssize_t ntfs_file_aio_write(struct kiocb *iocb, const struct iovec *iov, | |||
2154 | } | 2146 | } |
2155 | 2147 | ||
2156 | /** | 2148 | /** |
2157 | * ntfs_file_writev - | ||
2158 | * | ||
2159 | * Basically the same as generic_file_writev() except that it ends up calling | ||
2160 | * ntfs_file_aio_write_nolock() instead of __generic_file_aio_write_nolock(). | ||
2161 | */ | ||
2162 | static ssize_t ntfs_file_writev(struct file *file, const struct iovec *iov, | ||
2163 | unsigned long nr_segs, loff_t *ppos) | ||
2164 | { | ||
2165 | struct address_space *mapping = file->f_mapping; | ||
2166 | struct inode *inode = mapping->host; | ||
2167 | struct kiocb kiocb; | ||
2168 | ssize_t ret; | ||
2169 | |||
2170 | mutex_lock(&inode->i_mutex); | ||
2171 | init_sync_kiocb(&kiocb, file); | ||
2172 | ret = ntfs_file_aio_write_nolock(&kiocb, iov, nr_segs, ppos); | ||
2173 | if (ret == -EIOCBQUEUED) | ||
2174 | ret = wait_on_sync_kiocb(&kiocb); | ||
2175 | mutex_unlock(&inode->i_mutex); | ||
2176 | if (ret > 0 && ((file->f_flags & O_SYNC) || IS_SYNC(inode))) { | ||
2177 | int err = sync_page_range(inode, mapping, *ppos - ret, ret); | ||
2178 | if (err < 0) | ||
2179 | ret = err; | ||
2180 | } | ||
2181 | return ret; | ||
2182 | } | ||
2183 | |||
2184 | /** | ||
2185 | * ntfs_file_write - simple wrapper for ntfs_file_writev() | ||
2186 | */ | ||
2187 | static ssize_t ntfs_file_write(struct file *file, const char __user *buf, | ||
2188 | size_t count, loff_t *ppos) | ||
2189 | { | ||
2190 | struct iovec local_iov = { .iov_base = (void __user *)buf, | ||
2191 | .iov_len = count }; | ||
2192 | |||
2193 | return ntfs_file_writev(file, &local_iov, 1, ppos); | ||
2194 | } | ||
2195 | |||
2196 | /** | ||
2197 | * ntfs_file_fsync - sync a file to disk | 2149 | * ntfs_file_fsync - sync a file to disk |
2198 | * @filp: file to be synced | 2150 | * @filp: file to be synced |
2199 | * @dentry: dentry describing the file to sync | 2151 | * @dentry: dentry describing the file to sync |
@@ -2255,7 +2207,7 @@ const struct file_operations ntfs_file_ops = { | |||
2255 | .read = do_sync_read, /* Read from file. */ | 2207 | .read = do_sync_read, /* Read from file. */ |
2256 | .aio_read = generic_file_aio_read, /* Async read from file. */ | 2208 | .aio_read = generic_file_aio_read, /* Async read from file. */ |
2257 | #ifdef NTFS_RW | 2209 | #ifdef NTFS_RW |
2258 | .write = ntfs_file_write, /* Write to file. */ | 2210 | .write = do_sync_write, /* Write to file. */ |
2259 | .aio_write = ntfs_file_aio_write, /* Async write to file. */ | 2211 | .aio_write = ntfs_file_aio_write, /* Async write to file. */ |
2260 | /*.release = ,*/ /* Last file is closed. See | 2212 | /*.release = ,*/ /* Last file is closed. See |
2261 | fs/ext2/file.c:: | 2213 | fs/ext2/file.c:: |