Lines Matching refs:ki

33 static inline void cachefiles_put_kiocb(struct cachefiles_kiocb *ki)
35 if (refcount_dec_and_test(&ki->ki_refcnt)) {
36 cachefiles_put_object(ki->object, cachefiles_obj_put_ioreq);
37 fput(ki->iocb.ki_filp);
38 kfree(ki);
47 struct cachefiles_kiocb *ki = container_of(iocb, struct cachefiles_kiocb, iocb);
48 struct inode *inode = file_inode(ki->iocb.ki_filp);
53 trace_cachefiles_io_error(ki->object, inode, ret,
56 if (ki->term_func) {
58 if (ki->object->cookie->inval_counter == ki->inval_counter)
59 ki->skipped += ret;
64 ki->term_func(ki->term_func_priv, ret, ki->was_async);
67 cachefiles_put_kiocb(ki);
81 struct cachefiles_kiocb *ki;
133 ki = kzalloc(sizeof(struct cachefiles_kiocb), GFP_KERNEL);
134 if (!ki)
137 refcount_set(&ki->ki_refcnt, 2);
138 ki->iocb.ki_filp = file;
139 ki->iocb.ki_pos = start_pos + skipped;
140 ki->iocb.ki_flags = IOCB_DIRECT;
141 ki->iocb.ki_ioprio = get_current_ioprio();
142 ki->skipped = skipped;
143 ki->object = object;
144 ki->inval_counter = cres->inval_counter;
145 ki->term_func = term_func;
146 ki->term_func_priv = term_func_priv;
147 ki->was_async = true;
149 if (ki->term_func)
150 ki->iocb.ki_complete = cachefiles_read_complete;
152 get_file(ki->iocb.ki_filp);
155 trace_cachefiles_read(object, file_inode(file), ki->iocb.ki_pos, len - skipped);
159 ret = vfs_iocb_iter_read(file, &ki->iocb, iter);
175 ki->was_async = false;
176 cachefiles_read_complete(&ki->iocb, ret);
183 cachefiles_put_kiocb(ki);
256 struct cachefiles_kiocb *ki = container_of(iocb, struct cachefiles_kiocb, iocb);
257 struct cachefiles_object *object = ki->object;
258 struct inode *inode = file_inode(ki->iocb.ki_filp);
262 if (ki->was_async)
269 atomic_long_sub(ki->b_writing, &object->volume->cache->b_writing);
271 if (ki->term_func)
272 ki->term_func(ki->term_func_priv, ret, ki->was_async);
273 cachefiles_put_kiocb(ki);
287 struct cachefiles_kiocb *ki;
299 ki = kzalloc(sizeof(struct cachefiles_kiocb), GFP_KERNEL);
300 if (!ki) {
306 refcount_set(&ki->ki_refcnt, 2);
307 ki->iocb.ki_filp = file;
308 ki->iocb.ki_pos = start_pos;
309 ki->iocb.ki_flags = IOCB_DIRECT | IOCB_WRITE;
310 ki->iocb.ki_ioprio = get_current_ioprio();
311 ki->object = object;
312 ki->start = start_pos;
313 ki->len = len;
314 ki->term_func = term_func;
315 ki->term_func_priv = term_func_priv;
316 ki->was_async = true;
317 ki->b_writing = (len + (1 << cache->bshift) - 1) >> cache->bshift;
319 if (ki->term_func)
320 ki->iocb.ki_complete = cachefiles_write_complete;
321 atomic_long_add(ki->b_writing, &cache->b_writing);
323 get_file(ki->iocb.ki_filp);
326 trace_cachefiles_write(object, file_inode(file), ki->iocb.ki_pos, len);
330 ret = vfs_iocb_iter_write(file, &ki->iocb, iter);
346 ki->was_async = false;
347 cachefiles_write_complete(&ki->iocb, ret);
354 cachefiles_put_kiocb(ki);