summary refs log tree commit diff
path: root/fs
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2015-04-01 23:49:24 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2015-04-11 22:28:27 -0400
commit42b1ab979d92d21ae2ea376e77f33f18973b9581 (patch)
tree89d3d43076a89e2140d025683bae4c058df5eb10 /fs
parente1200fe68f20759f359698f8a8dc81d06d1265f5 (diff)
downloadlinux-42b1ab979d92d21ae2ea376e77f33f18973b9581.tar.gz
9p: get rid of v9fs_direct_file_read()
do it in ->direct_IO()...

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs')
-rw-r--r--fs/9p/vfs_addr.c21
-rw-r--r--fs/9p/vfs_file.c42
2 files changed, 12 insertions, 51 deletions
diff --git a/fs/9p/vfs_addr.c b/fs/9p/vfs_addr.c
index afe3225aaf36..2e38f9a5b472 100644
--- a/fs/9p/vfs_addr.c
+++ b/fs/9p/vfs_addr.c
@@ -251,21 +251,20 @@ static ssize_t
 v9fs_direct_IO(int rw, struct kiocb *iocb, struct iov_iter *iter, loff_t pos)
 {
 	struct file *file = iocb->ki_filp;
-	if (rw == WRITE) {
-		ssize_t written;
-		int err = 0;
-
-		written = p9_client_write(file->private_data, pos, iter, &err);
-		if (written) {
+	ssize_t n;
+	int err = 0;
+	if (rw & WRITE) {
+		n = p9_client_write(file->private_data, pos, iter, &err);
+		if (n) {
 			struct inode *inode = file_inode(file);
 			loff_t i_size = i_size_read(inode);
-			if (pos + written > i_size)
-				inode_add_bytes(inode, pos + written - i_size);
-			return written;
+			if (pos + n > i_size)
+				inode_add_bytes(inode, pos + n - i_size);
 		}
-		return err;
+	} else {
+		n = p9_client_read(file->private_data, pos, iter, &err);
 	}
-	return -EINVAL;
+	return n ? n : err;
 }
 
 static int v9fs_write_begin(struct file *filp, struct address_space *mapping,
diff --git a/fs/9p/vfs_file.c b/fs/9p/vfs_file.c
index 069f70d3758f..53a1c85b8a20 100644
--- a/fs/9p/vfs_file.c
+++ b/fs/9p/vfs_file.c
@@ -575,44 +575,6 @@ out_unlock:
 	return VM_FAULT_NOPAGE;
 }
 
-static ssize_t
-v9fs_direct_read(struct file *filp, char __user *udata, size_t count,
-		 loff_t *offsetp)
-{
-	loff_t size, offset;
-	struct inode *inode;
-	struct address_space *mapping;
-
-	offset = *offsetp;
-	mapping = filp->f_mapping;
-	inode = mapping->host;
-	if (!count)
-		return 0;
-	size = i_size_read(inode);
-	if (offset < size)
-		filemap_write_and_wait_range(mapping, offset,
-					     offset + count - 1);
-
-	return v9fs_file_read(filp, udata, count, offsetp);
-}
-
-/**
- * v9fs_cached_file_read - read from a file
- * @filp: file pointer to read
- * @data: user data buffer to read data into
- * @count: size of buffer
- * @offset: offset at which to read data
- *
- */
-static ssize_t
-v9fs_cached_file_read(struct file *filp, char __user *data, size_t count,
-		      loff_t *offset)
-{
-	if (filp->f_flags & O_DIRECT)
-		return v9fs_direct_read(filp, data, count, offset);
-	return new_sync_read(filp, data, count, offset);
-}
-
 /**
  * v9fs_mmap_file_read - read from a file
  * @filp: file pointer to read
@@ -690,7 +652,7 @@ static const struct vm_operations_struct v9fs_mmap_file_vm_ops = {
 
 const struct file_operations v9fs_cached_file_operations = {
 	.llseek = generic_file_llseek,
-	.read = v9fs_cached_file_read,
+	.read = new_sync_read,
 	.write = new_sync_write,
 	.read_iter = generic_file_read_iter,
 	.write_iter = generic_file_write_iter,
@@ -703,7 +665,7 @@ const struct file_operations v9fs_cached_file_operations = {
 
 const struct file_operations v9fs_cached_file_operations_dotl = {
 	.llseek = generic_file_llseek,
-	.read = v9fs_cached_file_read,
+	.read = new_sync_read,
 	.write = new_sync_write,
 	.read_iter = generic_file_read_iter,
 	.write_iter = generic_file_write_iter,