Hi Bean > > > On Mon, 2020-06-15 at 18:30 +0900, Daejun Park wrote: > > +static int ufshpb_execute_map_req(struct ufshpb_lu *hpb, > > + struct ufshpb_req *map_req) > > +{ > > + struct request_queue *q; > > + struct request *req; > > + struct scsi_request *rq; > > + int ret = 0; > > + > > + q = hpb->sdev_ufs_lu->request_queue; > > + ret = ufshpb_map_req_add_bio_page(hpb, q, map_req->bio, > > + map_req->mctx); > > + if (ret) { > > + dev_notice(&hpb->hpb_lu_dev, > > + "map_req_add_bio_page fail %d - %d\n", > > + map_req->rgn_idx, map_req->srgn_idx); > > + return ret; > > + } > > + > > + req = map_req->req; > > + > > + blk_rq_append_bio(req, &map_req->bio); > > + > > + req->timeout = 0; > > + req->end_io_data = (void *)map_req; > > + > > + rq = scsi_req(req); > > + ufshpb_set_read_buf_cmd(rq->cmd, map_req->rgn_idx, > > + map_req->srgn_idx, hpb- > > >srgn_mem_size); > > + rq->cmd_len = HPB_READ_BUFFER_CMD_LENGTH; > > + > > + blk_execute_rq_nowait(q, NULL, req, 1, > > ufshpb_map_req_compl_fn); > > > HPB map_req is now being en-queued in sdev->request_queue. > This is ok for the HPB v1.0. Have you ever been thinking about > changing this way to directly issue HPB requests to UFS? I think it is enough to support HPB. > Actually, there are two reasons for this way: > > 1. Latency of loading mapping entries is lower comparing to your curret > approach. Our map request style utilizes block layer API. It makes the codes keep simple and reliable. Also, I think the latency of loading mapping entries is not critical for HPB. Futhermore, I think the other requests from user is important than loading mapping entries. If the map_work issues map request directly, the user requests can be disturbed by map requests. > 2. Also, it is preparing for the HPB v2.0. After all HPB 1.0 only > supports 4KB read, this is useless, I am looking for the HPB v2.0. I don't understand this comment. In HPB v2.0, this code can be used without changing. Thanks, Daejun