diff options
Diffstat (limited to 'fs/overlayfs/file.c')
| -rw-r--r-- | fs/overlayfs/file.c | 9 | 
1 files changed, 3 insertions, 6 deletions
diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c index 3b4cc633d763..4193633c4c7a 100644 --- a/fs/overlayfs/file.c +++ b/fs/overlayfs/file.c @@ -19,7 +19,6 @@ struct ovl_aio_req {  	struct kiocb iocb;  	refcount_t ref;  	struct kiocb *orig_iocb; -	struct fd fd;  };  static struct kmem_cache *ovl_aio_request_cachep; @@ -280,7 +279,7 @@ static rwf_t ovl_iocb_to_rwf(int ifl)  static inline void ovl_aio_put(struct ovl_aio_req *aio_req)  {  	if (refcount_dec_and_test(&aio_req->ref)) { -		fdput(aio_req->fd); +		fput(aio_req->iocb.ki_filp);  		kmem_cache_free(ovl_aio_request_cachep, aio_req);  	}  } @@ -342,10 +341,9 @@ static ssize_t ovl_read_iter(struct kiocb *iocb, struct iov_iter *iter)  		if (!aio_req)  			goto out; -		aio_req->fd = real;  		real.flags = 0;  		aio_req->orig_iocb = iocb; -		kiocb_clone(&aio_req->iocb, iocb, real.file); +		kiocb_clone(&aio_req->iocb, iocb, get_file(real.file));  		aio_req->iocb.ki_complete = ovl_aio_rw_complete;  		refcount_set(&aio_req->ref, 2);  		ret = vfs_iocb_iter_read(real.file, &aio_req->iocb, iter); @@ -409,10 +407,9 @@ static ssize_t ovl_write_iter(struct kiocb *iocb, struct iov_iter *iter)  		if (!aio_req)  			goto out; -		aio_req->fd = real;  		real.flags = 0;  		aio_req->orig_iocb = iocb; -		kiocb_clone(&aio_req->iocb, iocb, real.file); +		kiocb_clone(&aio_req->iocb, iocb, get_file(real.file));  		aio_req->iocb.ki_flags = ifl;  		aio_req->iocb.ki_complete = ovl_aio_rw_complete;  		refcount_set(&aio_req->ref, 2);  |