aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ntfs/file.c
diff options
context:
space:
mode:
authorFrederic Weisbecker <fweisbec@gmail.com>2009-12-07 01:28:35 -0500
committerFrederic Weisbecker <fweisbec@gmail.com>2009-12-07 01:29:22 -0500
commit6548698f929814375fa5d62ae1db96959b0418c1 (patch)
tree340924ae82cb0946aa15045b2b72186de52a8146 /fs/ntfs/file.c
parent1d2c6cfd40b2dece3bb958cbbc405a2c1536ab75 (diff)
parent22763c5cf3690a681551162c15d34d935308c8d7 (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.c54
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 */
2162static 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 */
2187static 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::