diff options
Diffstat (limited to 'mm/filemap.c')
-rw-r--r-- | mm/filemap.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/mm/filemap.c b/mm/filemap.c index 7b84dc814347..8332c77b1bd1 100644 --- a/mm/filemap.c +++ b/mm/filemap.c | |||
@@ -1181,8 +1181,6 @@ generic_file_aio_read(struct kiocb *iocb, const struct iovec *iov, | |||
1181 | if (pos < size) { | 1181 | if (pos < size) { |
1182 | retval = generic_file_direct_IO(READ, iocb, | 1182 | retval = generic_file_direct_IO(READ, iocb, |
1183 | iov, pos, nr_segs); | 1183 | iov, pos, nr_segs); |
1184 | if (retval > 0 && !is_sync_kiocb(iocb)) | ||
1185 | retval = -EIOCBQUEUED; | ||
1186 | if (retval > 0) | 1184 | if (retval > 0) |
1187 | *ppos = pos + retval; | 1185 | *ppos = pos + retval; |
1188 | } | 1186 | } |
@@ -1445,7 +1443,6 @@ no_cached_page: | |||
1445 | * effect. | 1443 | * effect. |
1446 | */ | 1444 | */ |
1447 | error = page_cache_read(file, pgoff); | 1445 | error = page_cache_read(file, pgoff); |
1448 | grab_swap_token(); | ||
1449 | 1446 | ||
1450 | /* | 1447 | /* |
1451 | * The page we want has now been added to the page cache. | 1448 | * The page we want has now been added to the page cache. |
@@ -1893,6 +1890,7 @@ int should_remove_suid(struct dentry *dentry) | |||
1893 | 1890 | ||
1894 | return 0; | 1891 | return 0; |
1895 | } | 1892 | } |
1893 | EXPORT_SYMBOL(should_remove_suid); | ||
1896 | 1894 | ||
1897 | int __remove_suid(struct dentry *dentry, int kill) | 1895 | int __remove_suid(struct dentry *dentry, int kill) |
1898 | { | 1896 | { |
@@ -2047,15 +2045,14 @@ generic_file_direct_write(struct kiocb *iocb, const struct iovec *iov, | |||
2047 | * Sync the fs metadata but not the minor inode changes and | 2045 | * Sync the fs metadata but not the minor inode changes and |
2048 | * of course not the data as we did direct DMA for the IO. | 2046 | * of course not the data as we did direct DMA for the IO. |
2049 | * i_mutex is held, which protects generic_osync_inode() from | 2047 | * i_mutex is held, which protects generic_osync_inode() from |
2050 | * livelocking. | 2048 | * livelocking. AIO O_DIRECT ops attempt to sync metadata here. |
2051 | */ | 2049 | */ |
2052 | if (written >= 0 && ((file->f_flags & O_SYNC) || IS_SYNC(inode))) { | 2050 | if ((written >= 0 || written == -EIOCBQUEUED) && |
2051 | ((file->f_flags & O_SYNC) || IS_SYNC(inode))) { | ||
2053 | int err = generic_osync_inode(inode, mapping, OSYNC_METADATA); | 2052 | int err = generic_osync_inode(inode, mapping, OSYNC_METADATA); |
2054 | if (err < 0) | 2053 | if (err < 0) |
2055 | written = err; | 2054 | written = err; |
2056 | } | 2055 | } |
2057 | if (written == count && !is_sync_kiocb(iocb)) | ||
2058 | written = -EIOCBQUEUED; | ||
2059 | return written; | 2056 | return written; |
2060 | } | 2057 | } |
2061 | EXPORT_SYMBOL(generic_file_direct_write); | 2058 | EXPORT_SYMBOL(generic_file_direct_write); |
@@ -2269,7 +2266,7 @@ __generic_file_aio_write_nolock(struct kiocb *iocb, const struct iovec *iov, | |||
2269 | if (count == 0) | 2266 | if (count == 0) |
2270 | goto out; | 2267 | goto out; |
2271 | 2268 | ||
2272 | err = remove_suid(file->f_dentry); | 2269 | err = remove_suid(file->f_path.dentry); |
2273 | if (err) | 2270 | if (err) |
2274 | goto out; | 2271 | goto out; |
2275 | 2272 | ||