mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-29 15:43:59 +08:00
nvmet: don't split large I/Os unconditionally
If we know that the I/O size exceeds our inline bio vec, no point using it and split the rest to begin with. We could in theory reuse the inline bio and only allocate the bio_vec, but its really not worth optimizing for. Signed-off-by: Sagi Grimberg <sagi@grimberg.me> Signed-off-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
783f4a4408
commit
73383adfad
@ -58,7 +58,7 @@ static void nvmet_bio_done(struct bio *bio)
|
|||||||
static void nvmet_bdev_execute_rw(struct nvmet_req *req)
|
static void nvmet_bdev_execute_rw(struct nvmet_req *req)
|
||||||
{
|
{
|
||||||
int sg_cnt = req->sg_cnt;
|
int sg_cnt = req->sg_cnt;
|
||||||
struct bio *bio = &req->b.inline_bio;
|
struct bio *bio;
|
||||||
struct scatterlist *sg;
|
struct scatterlist *sg;
|
||||||
sector_t sector;
|
sector_t sector;
|
||||||
blk_qc_t cookie;
|
blk_qc_t cookie;
|
||||||
@ -81,7 +81,12 @@ static void nvmet_bdev_execute_rw(struct nvmet_req *req)
|
|||||||
sector = le64_to_cpu(req->cmd->rw.slba);
|
sector = le64_to_cpu(req->cmd->rw.slba);
|
||||||
sector <<= (req->ns->blksize_shift - 9);
|
sector <<= (req->ns->blksize_shift - 9);
|
||||||
|
|
||||||
bio_init(bio, req->inline_bvec, ARRAY_SIZE(req->inline_bvec));
|
if (req->data_len <= NVMET_MAX_INLINE_DATA_LEN) {
|
||||||
|
bio = &req->b.inline_bio;
|
||||||
|
bio_init(bio, req->inline_bvec, ARRAY_SIZE(req->inline_bvec));
|
||||||
|
} else {
|
||||||
|
bio = bio_alloc(GFP_KERNEL, min(sg_cnt, BIO_MAX_PAGES));
|
||||||
|
}
|
||||||
bio_set_dev(bio, req->ns->bdev);
|
bio_set_dev(bio, req->ns->bdev);
|
||||||
bio->bi_iter.bi_sector = sector;
|
bio->bi_iter.bi_sector = sector;
|
||||||
bio->bi_private = req;
|
bio->bi_private = req;
|
||||||
|
@ -264,6 +264,7 @@ struct nvmet_fabrics_ops {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#define NVMET_MAX_INLINE_BIOVEC 8
|
#define NVMET_MAX_INLINE_BIOVEC 8
|
||||||
|
#define NVMET_MAX_INLINE_DATA_LEN NVMET_MAX_INLINE_BIOVEC * PAGE_SIZE
|
||||||
|
|
||||||
struct nvmet_req {
|
struct nvmet_req {
|
||||||
struct nvme_command *cmd;
|
struct nvme_command *cmd;
|
||||||
|
Loading…
Reference in New Issue
Block a user