deal with get_reqs_available() in aio_get_req() itself
simplifies the caller Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
		
							parent
							
								
									7425970347
								
							
						
					
					
						commit
						fa0ca2aee3
					
				
							
								
								
									
										12
									
								
								fs/aio.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								fs/aio.c
									
									
									
									
									
								
							| @ -1033,6 +1033,11 @@ static inline struct aio_kiocb *aio_get_req(struct kioctx *ctx) | |||||||
| 	if (unlikely(!req)) | 	if (unlikely(!req)) | ||||||
| 		return NULL; | 		return NULL; | ||||||
| 
 | 
 | ||||||
|  | 	if (unlikely(!get_reqs_available(ctx))) { | ||||||
|  | 		kfree(req); | ||||||
|  | 		return NULL; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	percpu_ref_get(&ctx->reqs); | 	percpu_ref_get(&ctx->reqs); | ||||||
| 	req->ki_ctx = ctx; | 	req->ki_ctx = ctx; | ||||||
| 	INIT_LIST_HEAD(&req->ki_list); | 	INIT_LIST_HEAD(&req->ki_list); | ||||||
| @ -1793,13 +1798,9 @@ static int __io_submit_one(struct kioctx *ctx, const struct iocb *iocb, | |||||||
| 		return -EINVAL; | 		return -EINVAL; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	if (!get_reqs_available(ctx)) |  | ||||||
| 		return -EAGAIN; |  | ||||||
| 
 |  | ||||||
| 	ret = -EAGAIN; |  | ||||||
| 	req = aio_get_req(ctx); | 	req = aio_get_req(ctx); | ||||||
| 	if (unlikely(!req)) | 	if (unlikely(!req)) | ||||||
| 		goto out_put_reqs_available; | 		return -EAGAIN; | ||||||
| 
 | 
 | ||||||
| 	req->ki_filp = fget(iocb->aio_fildes); | 	req->ki_filp = fget(iocb->aio_fildes); | ||||||
| 	ret = -EBADF; | 	ret = -EBADF; | ||||||
| @ -1874,7 +1875,6 @@ static int __io_submit_one(struct kioctx *ctx, const struct iocb *iocb, | |||||||
| 
 | 
 | ||||||
| out_put_req: | out_put_req: | ||||||
| 	iocb_destroy(req); | 	iocb_destroy(req); | ||||||
| out_put_reqs_available: |  | ||||||
| 	put_reqs_available(ctx, 1); | 	put_reqs_available(ctx, 1); | ||||||
| 	return ret; | 	return ret; | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user