Lines Matching refs:rreq
320 void netfs_wake_collector(struct netfs_io_request *rreq) in netfs_wake_collector() argument
322 if (test_bit(NETFS_RREQ_OFFLOAD_COLLECTION, &rreq->flags) && in netfs_wake_collector()
323 !test_bit(NETFS_RREQ_RETRYING, &rreq->flags)) { in netfs_wake_collector()
324 queue_work(system_unbound_wq, &rreq->work); in netfs_wake_collector()
326 trace_netfs_rreq(rreq, netfs_rreq_trace_wake_queue); in netfs_wake_collector()
327 wake_up(&rreq->waitq); in netfs_wake_collector()
337 struct netfs_io_request *rreq = subreq->rreq; in netfs_subreq_clear_in_progress() local
338 struct netfs_io_stream *stream = &rreq->io_streams[subreq->stream_nr]; in netfs_subreq_clear_in_progress()
345 test_bit(NETFS_RREQ_RETRYING, &rreq->flags)) in netfs_subreq_clear_in_progress()
346 netfs_wake_collector(rreq); in netfs_subreq_clear_in_progress()
352 void netfs_wait_for_in_progress_stream(struct netfs_io_request *rreq, in netfs_wait_for_in_progress_stream() argument
362 trace_netfs_rreq(rreq, netfs_rreq_trace_wait_quiesce); in netfs_wait_for_in_progress_stream()
364 prepare_to_wait(&rreq->waitq, &myself, TASK_UNINTERRUPTIBLE); in netfs_wait_for_in_progress_stream()
374 trace_netfs_rreq(rreq, netfs_rreq_trace_waited_quiesce); in netfs_wait_for_in_progress_stream()
375 finish_wait(&rreq->waitq, &myself); in netfs_wait_for_in_progress_stream()
381 static int netfs_collect_in_app(struct netfs_io_request *rreq, in netfs_collect_in_app() argument
382 bool (*collector)(struct netfs_io_request *rreq)) in netfs_collect_in_app() argument
386 if (!netfs_check_rreq_in_progress(rreq)) { in netfs_collect_in_app()
387 trace_netfs_rreq(rreq, netfs_rreq_trace_recollect); in netfs_collect_in_app()
393 struct netfs_io_stream *stream = &rreq->io_streams[i]; in netfs_collect_in_app()
398 trace_netfs_collect_stream(rreq, stream); in netfs_collect_in_app()
408 if (subreq || !test_bit(NETFS_RREQ_ALL_QUEUED, &rreq->flags)) in netfs_collect_in_app()
416 if (collector(rreq)) { in netfs_collect_in_app()
418 netfs_put_request(rreq, netfs_rreq_trace_put_work_ip); in netfs_collect_in_app()
424 rreq->debug_id); in netfs_collect_in_app()
433 static ssize_t netfs_wait_for_in_progress(struct netfs_io_request *rreq, in netfs_wait_for_in_progress() argument
434 bool (*collector)(struct netfs_io_request *rreq)) in netfs_wait_for_in_progress() argument
440 prepare_to_wait(&rreq->waitq, &myself, TASK_UNINTERRUPTIBLE); in netfs_wait_for_in_progress()
442 if (!test_bit(NETFS_RREQ_OFFLOAD_COLLECTION, &rreq->flags)) { in netfs_wait_for_in_progress()
443 switch (netfs_collect_in_app(rreq, collector)) { in netfs_wait_for_in_progress()
449 if (!netfs_check_rreq_in_progress(rreq)) in netfs_wait_for_in_progress()
456 if (!netfs_check_rreq_in_progress(rreq)) in netfs_wait_for_in_progress()
459 trace_netfs_rreq(rreq, netfs_rreq_trace_wait_ip); in netfs_wait_for_in_progress()
464 trace_netfs_rreq(rreq, netfs_rreq_trace_waited_ip); in netfs_wait_for_in_progress()
465 finish_wait(&rreq->waitq, &myself); in netfs_wait_for_in_progress()
467 ret = rreq->error; in netfs_wait_for_in_progress()
469 ret = rreq->transferred; in netfs_wait_for_in_progress()
470 switch (rreq->origin) { in netfs_wait_for_in_progress()
478 if (rreq->submitted < rreq->len) { in netfs_wait_for_in_progress()
479 trace_netfs_failure(rreq, NULL, ret, netfs_fail_short_read); in netfs_wait_for_in_progress()
489 ssize_t netfs_wait_for_read(struct netfs_io_request *rreq) in netfs_wait_for_read() argument
491 return netfs_wait_for_in_progress(rreq, netfs_read_collection); in netfs_wait_for_read()
494 ssize_t netfs_wait_for_write(struct netfs_io_request *rreq) in netfs_wait_for_write() argument
496 return netfs_wait_for_in_progress(rreq, netfs_write_collection); in netfs_wait_for_write()
502 static void netfs_wait_for_pause(struct netfs_io_request *rreq, in netfs_wait_for_pause() argument
503 bool (*collector)(struct netfs_io_request *rreq)) in netfs_wait_for_pause() argument
508 trace_netfs_rreq(rreq, netfs_rreq_trace_wait_pause); in netfs_wait_for_pause()
509 prepare_to_wait(&rreq->waitq, &myself, TASK_UNINTERRUPTIBLE); in netfs_wait_for_pause()
511 if (!test_bit(NETFS_RREQ_OFFLOAD_COLLECTION, &rreq->flags)) { in netfs_wait_for_pause()
512 switch (netfs_collect_in_app(rreq, collector)) { in netfs_wait_for_pause()
518 if (!netfs_check_rreq_in_progress(rreq) || in netfs_wait_for_pause()
519 !test_bit(NETFS_RREQ_PAUSE, &rreq->flags)) in netfs_wait_for_pause()
526 if (!netfs_check_rreq_in_progress(rreq) || in netfs_wait_for_pause()
527 !test_bit(NETFS_RREQ_PAUSE, &rreq->flags)) in netfs_wait_for_pause()
534 trace_netfs_rreq(rreq, netfs_rreq_trace_waited_pause); in netfs_wait_for_pause()
535 finish_wait(&rreq->waitq, &myself); in netfs_wait_for_pause()
538 void netfs_wait_for_paused_read(struct netfs_io_request *rreq) in netfs_wait_for_paused_read() argument
540 return netfs_wait_for_pause(rreq, netfs_read_collection); in netfs_wait_for_paused_read()
543 void netfs_wait_for_paused_write(struct netfs_io_request *rreq) in netfs_wait_for_paused_write() argument
545 return netfs_wait_for_pause(rreq, netfs_write_collection); in netfs_wait_for_paused_write()