Lines Matching refs:aio
98 static void backing_aio_put(struct backing_aio *aio) in backing_aio_put() argument
100 if (refcount_dec_and_test(&aio->ref)) { in backing_aio_put()
101 fput(aio->iocb.ki_filp); in backing_aio_put()
102 kmem_cache_free(backing_aio_cachep, aio); in backing_aio_put()
106 static void backing_aio_cleanup(struct backing_aio *aio, long res) in backing_aio_cleanup() argument
108 struct kiocb *iocb = &aio->iocb; in backing_aio_cleanup()
109 struct kiocb *orig_iocb = aio->orig_iocb; in backing_aio_cleanup()
112 if (aio->end_write) in backing_aio_cleanup()
113 aio->end_write(orig_iocb, res); in backing_aio_cleanup()
115 backing_aio_put(aio); in backing_aio_cleanup()
120 struct backing_aio *aio = container_of(iocb, struct backing_aio, iocb); in backing_aio_rw_complete() local
121 struct kiocb *orig_iocb = aio->orig_iocb; in backing_aio_rw_complete()
126 backing_aio_cleanup(aio, res); in backing_aio_rw_complete()
132 struct backing_aio *aio = container_of(work, struct backing_aio, work); in backing_aio_complete_work() local
134 backing_aio_rw_complete(&aio->iocb, aio->res); in backing_aio_complete_work()
139 struct backing_aio *aio = container_of(iocb, struct backing_aio, iocb); in backing_aio_queue_completion() local
144 aio->res = res; in backing_aio_queue_completion()
145 INIT_WORK(&aio->work, backing_aio_complete_work); in backing_aio_queue_completion()
146 queue_work(file_inode(aio->orig_iocb->ki_filp)->i_sb->s_dio_done_wq, in backing_aio_queue_completion()
147 &aio->work); in backing_aio_queue_completion()
163 struct backing_aio *aio = NULL; in do_backing_file_read_iter() local
172 aio = kmem_cache_zalloc(backing_aio_cachep, GFP_KERNEL); in do_backing_file_read_iter()
173 if (!aio) in do_backing_file_read_iter()
176 aio->orig_iocb = iocb; in do_backing_file_read_iter()
177 kiocb_clone(&aio->iocb, iocb, get_file(file)); in do_backing_file_read_iter()
178 aio->iocb.ki_complete = backing_aio_rw_complete; in do_backing_file_read_iter()
179 refcount_set(&aio->ref, 2); in do_backing_file_read_iter()
180 ret = vfs_iocb_iter_read(file, &aio->iocb, iter); in do_backing_file_read_iter()
181 backing_aio_put(aio); in do_backing_file_read_iter()
183 backing_aio_cleanup(aio, ret); in do_backing_file_read_iter()
217 struct backing_aio *aio; in do_backing_file_write_iter() local
233 aio = kmem_cache_zalloc(backing_aio_cachep, GFP_KERNEL); in do_backing_file_write_iter()
234 if (!aio) in do_backing_file_write_iter()
237 aio->orig_iocb = iocb; in do_backing_file_write_iter()
238 aio->end_write = end_write; in do_backing_file_write_iter()
239 kiocb_clone(&aio->iocb, iocb, get_file(file)); in do_backing_file_write_iter()
240 aio->iocb.ki_flags = flags; in do_backing_file_write_iter()
241 aio->iocb.ki_complete = backing_aio_queue_completion; in do_backing_file_write_iter()
242 refcount_set(&aio->ref, 2); in do_backing_file_write_iter()
243 ret = vfs_iocb_iter_write(file, &aio->iocb, iter); in do_backing_file_write_iter()
244 backing_aio_put(aio); in do_backing_file_write_iter()
246 backing_aio_cleanup(aio, ret); in do_backing_file_write_iter()