mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	vfs: use helpers for calling f_op->{read,write}_iter()
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
This commit is contained in:
		
							parent
							
								
									0f78d06ac1
								
							
						
					
					
						commit
						bb7462b6fd
					
				
					 5 changed files with 23 additions and 11 deletions
				
			
		|  | @ -501,9 +501,9 @@ static int lo_rw_aio(struct loop_device *lo, struct loop_cmd *cmd, | |||
| 	cmd->iocb.ki_flags = IOCB_DIRECT; | ||||
| 
 | ||||
| 	if (rw == WRITE) | ||||
| 		ret = file->f_op->write_iter(&cmd->iocb, &iter); | ||||
| 		ret = call_write_iter(file, &cmd->iocb, &iter); | ||||
| 	else | ||||
| 		ret = file->f_op->read_iter(&cmd->iocb, &iter); | ||||
| 		ret = call_read_iter(file, &cmd->iocb, &iter); | ||||
| 
 | ||||
| 	if (ret != -EIOCBQUEUED) | ||||
| 		cmd->iocb.ki_complete(&cmd->iocb, ret, 0); | ||||
|  |  | |||
							
								
								
									
										4
									
								
								fs/aio.c
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								fs/aio.c
									
									
									
									
									
								
							|  | @ -1494,7 +1494,7 @@ static ssize_t aio_read(struct kiocb *req, struct iocb *iocb, bool vectored, | |||
| 		return ret; | ||||
| 	ret = rw_verify_area(READ, file, &req->ki_pos, iov_iter_count(&iter)); | ||||
| 	if (!ret) | ||||
| 		ret = aio_ret(req, file->f_op->read_iter(req, &iter)); | ||||
| 		ret = aio_ret(req, call_read_iter(file, req, &iter)); | ||||
| 	kfree(iovec); | ||||
| 	return ret; | ||||
| } | ||||
|  | @ -1519,7 +1519,7 @@ static ssize_t aio_write(struct kiocb *req, struct iocb *iocb, bool vectored, | |||
| 	if (!ret) { | ||||
| 		req->ki_flags |= IOCB_WRITE; | ||||
| 		file_start_write(file); | ||||
| 		ret = aio_ret(req, file->f_op->write_iter(req, &iter)); | ||||
| 		ret = aio_ret(req, call_write_iter(file, req, &iter)); | ||||
| 		/*
 | ||||
| 		 * We release freeze protection in aio_complete().  Fool lockdep | ||||
| 		 * by telling it the lock got released so that it doesn't | ||||
|  |  | |||
|  | @ -367,7 +367,7 @@ ssize_t vfs_iter_read(struct file *file, struct iov_iter *iter, loff_t *ppos) | |||
| 	kiocb.ki_pos = *ppos; | ||||
| 
 | ||||
| 	iter->type |= READ; | ||||
| 	ret = file->f_op->read_iter(&kiocb, iter); | ||||
| 	ret = call_read_iter(file, &kiocb, iter); | ||||
| 	BUG_ON(ret == -EIOCBQUEUED); | ||||
| 	if (ret > 0) | ||||
| 		*ppos = kiocb.ki_pos; | ||||
|  | @ -387,7 +387,7 @@ ssize_t vfs_iter_write(struct file *file, struct iov_iter *iter, loff_t *ppos) | |||
| 	kiocb.ki_pos = *ppos; | ||||
| 
 | ||||
| 	iter->type |= WRITE; | ||||
| 	ret = file->f_op->write_iter(&kiocb, iter); | ||||
| 	ret = call_write_iter(file, &kiocb, iter); | ||||
| 	BUG_ON(ret == -EIOCBQUEUED); | ||||
| 	if (ret > 0) | ||||
| 		*ppos = kiocb.ki_pos; | ||||
|  | @ -436,7 +436,7 @@ static ssize_t new_sync_read(struct file *filp, char __user *buf, size_t len, lo | |||
| 	kiocb.ki_pos = *ppos; | ||||
| 	iov_iter_init(&iter, READ, &iov, 1, len); | ||||
| 
 | ||||
| 	ret = filp->f_op->read_iter(&kiocb, &iter); | ||||
| 	ret = call_read_iter(filp, &kiocb, &iter); | ||||
| 	BUG_ON(ret == -EIOCBQUEUED); | ||||
| 	*ppos = kiocb.ki_pos; | ||||
| 	return ret; | ||||
|  | @ -493,7 +493,7 @@ static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t | |||
| 	kiocb.ki_pos = *ppos; | ||||
| 	iov_iter_init(&iter, WRITE, &iov, 1, len); | ||||
| 
 | ||||
| 	ret = filp->f_op->write_iter(&kiocb, &iter); | ||||
| 	ret = call_write_iter(filp, &kiocb, &iter); | ||||
| 	BUG_ON(ret == -EIOCBQUEUED); | ||||
| 	if (ret > 0) | ||||
| 		*ppos = kiocb.ki_pos; | ||||
|  | @ -690,9 +690,9 @@ static ssize_t do_iter_readv_writev(struct file *filp, struct iov_iter *iter, | |||
| 	kiocb.ki_pos = *ppos; | ||||
| 
 | ||||
| 	if (type == READ) | ||||
| 		ret = filp->f_op->read_iter(&kiocb, iter); | ||||
| 		ret = call_read_iter(filp, &kiocb, iter); | ||||
| 	else | ||||
| 		ret = filp->f_op->write_iter(&kiocb, iter); | ||||
| 		ret = call_write_iter(filp, &kiocb, iter); | ||||
| 	BUG_ON(ret == -EIOCBQUEUED); | ||||
| 	*ppos = kiocb.ki_pos; | ||||
| 	return ret; | ||||
|  |  | |||
|  | @ -306,7 +306,7 @@ ssize_t generic_file_splice_read(struct file *in, loff_t *ppos, | |||
| 	idx = to.idx; | ||||
| 	init_sync_kiocb(&kiocb, in); | ||||
| 	kiocb.ki_pos = *ppos; | ||||
| 	ret = in->f_op->read_iter(&kiocb, &to); | ||||
| 	ret = call_read_iter(in, &kiocb, &to); | ||||
| 	if (ret > 0) { | ||||
| 		*ppos = kiocb.ki_pos; | ||||
| 		file_accessed(in); | ||||
|  |  | |||
|  | @ -1715,6 +1715,18 @@ struct inode_operations { | |||
| 	int (*set_acl)(struct inode *, struct posix_acl *, int); | ||||
| } ____cacheline_aligned; | ||||
| 
 | ||||
| static inline ssize_t call_read_iter(struct file *file, struct kiocb *kio, | ||||
| 				     struct iov_iter *iter) | ||||
| { | ||||
| 	return file->f_op->read_iter(kio, iter); | ||||
| } | ||||
| 
 | ||||
| static inline ssize_t call_write_iter(struct file *file, struct kiocb *kio, | ||||
| 				      struct iov_iter *iter) | ||||
| { | ||||
| 	return file->f_op->write_iter(kio, iter); | ||||
| } | ||||
| 
 | ||||
| ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector, | ||||
| 			      unsigned long nr_segs, unsigned long fast_segs, | ||||
| 			      struct iovec *fast_pointer, | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Miklos Szeredi
						Miklos Szeredi