Lines Matching refs:req
99 static void nbd_end_request(struct nbd_device *nbd, struct request *req) in nbd_end_request() argument
101 int error = req->errors ? -EIO : 0; in nbd_end_request()
102 struct request_queue *q = req->q; in nbd_end_request()
105 dev_dbg(nbd_to_dev(nbd), "request %p: %s\n", req, in nbd_end_request()
109 __blk_end_request_all(req, error); in nbd_end_request()
228 static int nbd_send_req(struct nbd_device *nbd, struct request *req) in nbd_send_req() argument
232 unsigned long size = blk_rq_bytes(req); in nbd_send_req()
236 request.type = htonl(nbd_cmd(req)); in nbd_send_req()
238 if (nbd_cmd(req) != NBD_CMD_FLUSH && nbd_cmd(req) != NBD_CMD_DISC) { in nbd_send_req()
239 request.from = cpu_to_be64((u64)blk_rq_pos(req) << 9); in nbd_send_req()
242 memcpy(request.handle, &req, sizeof(req)); in nbd_send_req()
245 req, nbdcmd_to_ascii(nbd_cmd(req)), in nbd_send_req()
246 (unsigned long long)blk_rq_pos(req) << 9, blk_rq_bytes(req)); in nbd_send_req()
248 (nbd_cmd(req) == NBD_CMD_WRITE) ? MSG_MORE : 0); in nbd_send_req()
255 if (nbd_cmd(req) == NBD_CMD_WRITE) { in nbd_send_req()
262 rq_for_each_segment(bvec, req, iter) { in nbd_send_req()
267 req, bvec.bv_len); in nbd_send_req()
283 struct request *req, *tmp; in nbd_find_request() local
291 list_for_each_entry_safe(req, tmp, &nbd->queue_head, queuelist) { in nbd_find_request()
292 if (req != xreq) in nbd_find_request()
294 list_del_init(&req->queuelist); in nbd_find_request()
296 return req; in nbd_find_request()
318 struct request *req; in nbd_read_stat() local
335 req = nbd_find_request(nbd, *(struct request **)reply.handle); in nbd_read_stat()
336 if (IS_ERR(req)) { in nbd_read_stat()
337 result = PTR_ERR(req); in nbd_read_stat()
350 req->errors++; in nbd_read_stat()
351 return req; in nbd_read_stat()
354 dev_dbg(nbd_to_dev(nbd), "request %p: got reply\n", req); in nbd_read_stat()
355 if (nbd_cmd(req) == NBD_CMD_READ) { in nbd_read_stat()
359 rq_for_each_segment(bvec, req, iter) { in nbd_read_stat()
364 req->errors++; in nbd_read_stat()
365 return req; in nbd_read_stat()
368 req, bvec.bv_len); in nbd_read_stat()
371 return req; in nbd_read_stat()
393 struct request *req; in nbd_do_it() local
407 while ((req = nbd_read_stat(nbd)) != NULL) in nbd_do_it()
408 nbd_end_request(nbd, req); in nbd_do_it()
417 struct request *req; in nbd_clear_que() local
433 req = list_entry(nbd->queue_head.next, struct request, in nbd_clear_que()
435 list_del_init(&req->queuelist); in nbd_clear_que()
436 req->errors++; in nbd_clear_que()
437 nbd_end_request(nbd, req); in nbd_clear_que()
441 req = list_entry(nbd->waiting_queue.next, struct request, in nbd_clear_que()
443 list_del_init(&req->queuelist); in nbd_clear_que()
444 req->errors++; in nbd_clear_que()
445 nbd_end_request(nbd, req); in nbd_clear_que()
450 static void nbd_handle_req(struct nbd_device *nbd, struct request *req) in nbd_handle_req() argument
452 if (req->cmd_type != REQ_TYPE_FS) in nbd_handle_req()
455 nbd_cmd(req) = NBD_CMD_READ; in nbd_handle_req()
456 if (rq_data_dir(req) == WRITE) { in nbd_handle_req()
457 if ((req->cmd_flags & REQ_DISCARD)) { in nbd_handle_req()
459 nbd_cmd(req) = NBD_CMD_TRIM; in nbd_handle_req()
461 nbd_cmd(req) = NBD_CMD_WRITE; in nbd_handle_req()
469 if (req->cmd_flags & REQ_FLUSH) { in nbd_handle_req()
470 BUG_ON(unlikely(blk_rq_sectors(req))); in nbd_handle_req()
471 nbd_cmd(req) = NBD_CMD_FLUSH; in nbd_handle_req()
474 req->errors = 0; in nbd_handle_req()
484 nbd->active_req = req; in nbd_handle_req()
486 if (nbd_send_req(nbd, req) != 0) { in nbd_handle_req()
488 req->errors++; in nbd_handle_req()
489 nbd_end_request(nbd, req); in nbd_handle_req()
492 list_add_tail(&req->queuelist, &nbd->queue_head); in nbd_handle_req()
503 req->errors++; in nbd_handle_req()
504 nbd_end_request(nbd, req); in nbd_handle_req()
510 struct request *req; in nbd_thread() local
524 req = list_entry(nbd->waiting_queue.next, struct request, in nbd_thread()
526 list_del_init(&req->queuelist); in nbd_thread()
530 nbd_handle_req(nbd, req); in nbd_thread()
545 struct request *req; in do_nbd_request() local
547 while ((req = blk_fetch_request(q)) != NULL) { in do_nbd_request()
552 nbd = req->rq_disk->private_data; in do_nbd_request()
557 req, req->cmd_type); in do_nbd_request()
562 req->errors++; in do_nbd_request()
563 nbd_end_request(nbd, req); in do_nbd_request()
569 list_add_tail(&req->queuelist, &nbd->waiting_queue); in do_nbd_request()