mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	fs: Use RWF_* flags for AIO operations
aio_rw_flags is introduced in struct iocb (using aio_reserved1) which will carry the RWF_* flags. We cannot use aio_flags because they are not checked for validity which may break existing applications. Note, the only place RWF_HIPRI comes in effect is dio_await_one(). All the rest of the locations, aio code return -EIOCBQUEUED before the checks for RWF_HIPRI. Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Jan Kara <jack@suse.cz> Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
		
							parent
							
								
									7fc9e47224
								
							
						
					
					
						commit
						9830f4be15
					
				
					 2 changed files with 8 additions and 2 deletions
				
			
		
							
								
								
									
										8
									
								
								fs/aio.c
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								fs/aio.c
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -1541,7 +1541,7 @@ static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,
 | 
			
		|||
	ssize_t ret;
 | 
			
		||||
 | 
			
		||||
	/* enforce forwards compatibility on users */
 | 
			
		||||
	if (unlikely(iocb->aio_reserved1 || iocb->aio_reserved2)) {
 | 
			
		||||
	if (unlikely(iocb->aio_reserved2)) {
 | 
			
		||||
		pr_debug("EINVAL: reserve field set\n");
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			@ -1586,6 +1586,12 @@ static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,
 | 
			
		|||
		req->common.ki_flags |= IOCB_EVENTFD;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ret = kiocb_set_rw_flags(&req->common, iocb->aio_rw_flags);
 | 
			
		||||
	if (unlikely(ret)) {
 | 
			
		||||
		pr_debug("EINVAL: aio_rw_flags\n");
 | 
			
		||||
		goto out_put_req;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	ret = put_user(KIOCB_KEY, &user_iocb->aio_key);
 | 
			
		||||
	if (unlikely(ret)) {
 | 
			
		||||
		pr_debug("EFAULT: aio_key\n");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,7 +79,7 @@ struct io_event {
 | 
			
		|||
struct iocb {
 | 
			
		||||
	/* these are internal to the kernel/libc. */
 | 
			
		||||
	__u64	aio_data;	/* data to be returned in event's data */
 | 
			
		||||
	__u32	PADDED(aio_key, aio_reserved1);
 | 
			
		||||
	__u32	PADDED(aio_key, aio_rw_flags);
 | 
			
		||||
				/* the kernel sets aio_key to the req # */
 | 
			
		||||
 | 
			
		||||
	/* common fields */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue