Lines Matching refs:req

11 static inline void cachefiles_req_put(struct cachefiles_req *req)  in cachefiles_req_put()  argument
13 if (refcount_dec_and_test(&req->ref)) in cachefiles_req_put()
14 kfree(req); in cachefiles_req_put()
24 struct cachefiles_req *req; in cachefiles_ondemand_fd_release() local
42 xas_for_each_marked(&xas, req, ULONG_MAX, CACHEFILES_REQ_NEW) { in cachefiles_ondemand_fd_release()
43 if (req->msg.object_id == object_id && in cachefiles_ondemand_fd_release()
44 req->msg.opcode == CACHEFILES_OP_CLOSE) { in cachefiles_ondemand_fd_release()
45 complete(&req->done); in cachefiles_ondemand_fd_release()
121 struct cachefiles_req *req; in cachefiles_ondemand_fd_ioctl() local
131 req = xas_load(&xas); in cachefiles_ondemand_fd_ioctl()
132 if (!req || req->msg.opcode != CACHEFILES_OP_READ || in cachefiles_ondemand_fd_ioctl()
133 req->object != object) { in cachefiles_ondemand_fd_ioctl()
141 complete(&req->done); in cachefiles_ondemand_fd_ioctl()
160 struct cachefiles_req *req; in cachefiles_ondemand_copen() local
193 req = xas_load(&xas); in cachefiles_ondemand_copen()
194 if (!req || req->msg.opcode != CACHEFILES_OP_OPEN || in cachefiles_ondemand_copen()
195 !req->object->ondemand->ondemand_id) { in cachefiles_ondemand_copen()
202 info = req->object->ondemand; in cachefiles_ondemand_copen()
206 req->error = ret; in cachefiles_ondemand_copen()
213 req->error = -EINVAL; in cachefiles_ondemand_copen()
216 req->error = size; in cachefiles_ondemand_copen()
245 req->error = -EBADFD; in cachefiles_ondemand_copen()
248 cookie = req->object->cookie; in cachefiles_ondemand_copen()
254 trace_cachefiles_ondemand_copen(req->object, id, size); in cachefiles_ondemand_copen()
256 cachefiles_ondemand_set_object_open(req->object); in cachefiles_ondemand_copen()
264 cachefiles_ondemand_set_object_close(req->object); in cachefiles_ondemand_copen()
266 complete(&req->done); in cachefiles_ondemand_copen()
272 struct cachefiles_req *req; in cachefiles_ondemand_restore() local
285 xas_for_each(&xas, req, ULONG_MAX) in cachefiles_ondemand_restore()
293 static int cachefiles_ondemand_get_fd(struct cachefiles_req *req, in cachefiles_ondemand_get_fd() argument
302 object = cachefiles_grab_object(req->object, in cachefiles_ondemand_get_fd()
335 load = (void *)req->msg.data; in cachefiles_ondemand_get_fd()
341 trace_cachefiles_ondemand_open(object, &req->msg, load); in cachefiles_ondemand_get_fd()
378 struct cachefiles_req *req; in cachefiles_ondemand_select_req() local
382 xas_for_each_marked(xas, req, xa_max, CACHEFILES_REQ_NEW) { in cachefiles_ondemand_select_req()
383 if (req->msg.opcode != CACHEFILES_OP_READ) in cachefiles_ondemand_select_req()
384 return req; in cachefiles_ondemand_select_req()
385 object = req->object; in cachefiles_ondemand_select_req()
394 return req; in cachefiles_ondemand_select_req()
399 static inline bool cachefiles_ondemand_finish_req(struct cachefiles_req *req, in cachefiles_ondemand_finish_req() argument
402 if (unlikely(!xas || !req)) in cachefiles_ondemand_finish_req()
405 if (xa_cmpxchg(xas->xa, xas->xa_index, req, NULL, 0) != req) in cachefiles_ondemand_finish_req()
408 req->error = err; in cachefiles_ondemand_finish_req()
409 complete(&req->done); in cachefiles_ondemand_finish_req()
416 struct cachefiles_req *req; in cachefiles_ondemand_daemon_read() local
429 req = cachefiles_ondemand_select_req(&xas, ULONG_MAX); in cachefiles_ondemand_daemon_read()
430 if (!req && cache->req_id_next > 0) { in cachefiles_ondemand_daemon_read()
432 req = cachefiles_ondemand_select_req(&xas, cache->req_id_next - 1); in cachefiles_ondemand_daemon_read()
434 if (!req) { in cachefiles_ondemand_daemon_read()
439 msg = &req->msg; in cachefiles_ondemand_daemon_read()
449 refcount_inc(&req->ref); in cachefiles_ondemand_daemon_read()
450 cachefiles_grab_object(req->object, cachefiles_obj_get_read_req); in cachefiles_ondemand_daemon_read()
454 ret = cachefiles_ondemand_get_fd(req, &anon_file); in cachefiles_ondemand_daemon_read()
460 msg->object_id = req->object->ondemand->ondemand_id; in cachefiles_ondemand_daemon_read()
474 cachefiles_put_object(req->object, cachefiles_obj_put_read_req); in cachefiles_ondemand_daemon_read()
477 cachefiles_ondemand_finish_req(req, &xas, ret); in cachefiles_ondemand_daemon_read()
478 cachefiles_req_put(req); in cachefiles_ondemand_daemon_read()
482 typedef int (*init_req_fn)(struct cachefiles_req *req, void *private);
491 struct cachefiles_req *req = NULL; in cachefiles_ondemand_send_req() local
503 req = kzalloc(sizeof(*req) + data_len, GFP_KERNEL); in cachefiles_ondemand_send_req()
504 if (!req) { in cachefiles_ondemand_send_req()
509 refcount_set(&req->ref, 1); in cachefiles_ondemand_send_req()
510 req->object = object; in cachefiles_ondemand_send_req()
511 init_completion(&req->done); in cachefiles_ondemand_send_req()
512 req->msg.opcode = opcode; in cachefiles_ondemand_send_req()
513 req->msg.len = sizeof(struct cachefiles_msg) + data_len; in cachefiles_ondemand_send_req()
515 ret = init_req(req, private); in cachefiles_ondemand_send_req()
568 xas_store(&xas, req); in cachefiles_ondemand_send_req()
583 ret = wait_for_completion_killable(&req->done); in cachefiles_ondemand_send_req()
585 ret = req->error; in cachefiles_ondemand_send_req()
588 if (!cachefiles_ondemand_finish_req(req, &xas, ret)) { in cachefiles_ondemand_send_req()
594 cachefiles_req_put(req); in cachefiles_ondemand_send_req()
604 kfree(req); in cachefiles_ondemand_send_req()
608 static int cachefiles_ondemand_init_open_req(struct cachefiles_req *req, in cachefiles_ondemand_init_open_req() argument
611 struct cachefiles_object *object = req->object; in cachefiles_ondemand_init_open_req()
614 struct cachefiles_open *load = (void *)req->msg.data; in cachefiles_ondemand_init_open_req()
642 static int cachefiles_ondemand_init_close_req(struct cachefiles_req *req, in cachefiles_ondemand_init_close_req() argument
645 struct cachefiles_object *object = req->object; in cachefiles_ondemand_init_close_req()
650 trace_cachefiles_ondemand_close(object, &req->msg); in cachefiles_ondemand_init_close_req()
659 static int cachefiles_ondemand_init_read_req(struct cachefiles_req *req, in cachefiles_ondemand_init_read_req() argument
662 struct cachefiles_object *object = req->object; in cachefiles_ondemand_init_read_req()
663 struct cachefiles_read *load = (void *)req->msg.data; in cachefiles_ondemand_init_read_req()
668 trace_cachefiles_ondemand_read(object, &req->msg, load); in cachefiles_ondemand_init_read_req()
702 struct cachefiles_req *req; in cachefiles_ondemand_clean_object() local
718 xa_for_each(&cache->reqs, index, req) { in cachefiles_ondemand_clean_object()
719 if (req->object == object) { in cachefiles_ondemand_clean_object()
720 req->error = -EIO; in cachefiles_ondemand_clean_object()
721 complete(&req->done); in cachefiles_ondemand_clean_object()