aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/nvme.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/block/nvme.c')
-rw-r--r--drivers/block/nvme.c48
1 files changed, 24 insertions, 24 deletions
diff --git a/drivers/block/nvme.c b/drivers/block/nvme.c
index b1e8445985a..11df0e90eda 100644
--- a/drivers/block/nvme.c
+++ b/drivers/block/nvme.c
@@ -279,7 +279,7 @@ static void nvme_free_prps(struct nvme_queue *nvmeq, struct nvme_prps *prps)
279 kfree(prps); 279 kfree(prps);
280} 280}
281 281
282struct nvme_req_info { 282struct nvme_bio {
283 struct bio *bio; 283 struct bio *bio;
284 int nents; 284 int nents;
285 struct nvme_prps *prps; 285 struct nvme_prps *prps;
@@ -287,28 +287,28 @@ struct nvme_req_info {
287}; 287};
288 288
289/* XXX: use a mempool */ 289/* XXX: use a mempool */
290static struct nvme_req_info *alloc_info(unsigned nseg, gfp_t gfp) 290static struct nvme_bio *alloc_nbio(unsigned nseg, gfp_t gfp)
291{ 291{
292 return kzalloc(sizeof(struct nvme_req_info) + 292 return kzalloc(sizeof(struct nvme_bio) +
293 sizeof(struct scatterlist) * nseg, gfp); 293 sizeof(struct scatterlist) * nseg, gfp);
294} 294}
295 295
296static void free_info(struct nvme_queue *nvmeq, struct nvme_req_info *info) 296static void free_nbio(struct nvme_queue *nvmeq, struct nvme_bio *nbio)
297{ 297{
298 nvme_free_prps(nvmeq, info->prps); 298 nvme_free_prps(nvmeq, nbio->prps);
299 kfree(info); 299 kfree(nbio);
300} 300}
301 301
302static void bio_completion(struct nvme_queue *nvmeq, void *ctx, 302static void bio_completion(struct nvme_queue *nvmeq, void *ctx,
303 struct nvme_completion *cqe) 303 struct nvme_completion *cqe)
304{ 304{
305 struct nvme_req_info *info = ctx; 305 struct nvme_bio *nbio = ctx;
306 struct bio *bio = info->bio; 306 struct bio *bio = nbio->bio;
307 u16 status = le16_to_cpup(&cqe->status) >> 1; 307 u16 status = le16_to_cpup(&cqe->status) >> 1;
308 308
309 dma_unmap_sg(nvmeq->q_dmadev, info->sg, info->nents, 309 dma_unmap_sg(nvmeq->q_dmadev, nbio->sg, nbio->nents,
310 bio_data_dir(bio) ? DMA_TO_DEVICE : DMA_FROM_DEVICE); 310 bio_data_dir(bio) ? DMA_TO_DEVICE : DMA_FROM_DEVICE);
311 free_info(nvmeq, info); 311 free_nbio(nvmeq, nbio);
312 bio_endio(bio, status ? -EIO : 0); 312 bio_endio(bio, status ? -EIO : 0);
313 bio = bio_list_pop(&nvmeq->sq_cong); 313 bio = bio_list_pop(&nvmeq->sq_cong);
314 if (bio) 314 if (bio)
@@ -382,11 +382,11 @@ static struct nvme_prps *nvme_setup_prps(struct nvme_queue *nvmeq,
382 return prps; 382 return prps;
383} 383}
384 384
385static int nvme_map_bio(struct device *dev, struct nvme_req_info *info, 385static int nvme_map_bio(struct device *dev, struct nvme_bio *nbio,
386 struct bio *bio, enum dma_data_direction dma_dir, int psegs) 386 struct bio *bio, enum dma_data_direction dma_dir, int psegs)
387{ 387{
388 struct bio_vec *bvec; 388 struct bio_vec *bvec;
389 struct scatterlist *sg = info->sg; 389 struct scatterlist *sg = nbio->sg;
390 int i, nsegs; 390 int i, nsegs;
391 391
392 sg_init_table(sg, psegs); 392 sg_init_table(sg, psegs);
@@ -396,16 +396,16 @@ static int nvme_map_bio(struct device *dev, struct nvme_req_info *info,
396 /* XXX: handle non-mergable here */ 396 /* XXX: handle non-mergable here */
397 nsegs++; 397 nsegs++;
398 } 398 }
399 info->nents = nsegs; 399 nbio->nents = nsegs;
400 400
401 return dma_map_sg(dev, info->sg, info->nents, dma_dir); 401 return dma_map_sg(dev, nbio->sg, nbio->nents, dma_dir);
402} 402}
403 403
404static int nvme_submit_bio_queue(struct nvme_queue *nvmeq, struct nvme_ns *ns, 404static int nvme_submit_bio_queue(struct nvme_queue *nvmeq, struct nvme_ns *ns,
405 struct bio *bio) 405 struct bio *bio)
406{ 406{
407 struct nvme_command *cmnd; 407 struct nvme_command *cmnd;
408 struct nvme_req_info *info; 408 struct nvme_bio *nbio;
409 enum dma_data_direction dma_dir; 409 enum dma_data_direction dma_dir;
410 int cmdid; 410 int cmdid;
411 u16 control; 411 u16 control;
@@ -413,14 +413,14 @@ static int nvme_submit_bio_queue(struct nvme_queue *nvmeq, struct nvme_ns *ns,
413 unsigned long flags; 413 unsigned long flags;
414 int psegs = bio_phys_segments(ns->queue, bio); 414 int psegs = bio_phys_segments(ns->queue, bio);
415 415
416 info = alloc_info(psegs, GFP_NOIO); 416 nbio = alloc_nbio(psegs, GFP_NOIO);
417 if (!info) 417 if (!nbio)
418 goto congestion; 418 goto congestion;
419 info->bio = bio; 419 nbio->bio = bio;
420 420
421 cmdid = alloc_cmdid(nvmeq, info, bio_completion_id, IO_TIMEOUT); 421 cmdid = alloc_cmdid(nvmeq, nbio, bio_completion_id, IO_TIMEOUT);
422 if (unlikely(cmdid < 0)) 422 if (unlikely(cmdid < 0))
423 goto free_info; 423 goto free_nbio;
424 424
425 control = 0; 425 control = 0;
426 if (bio->bi_rw & REQ_FUA) 426 if (bio->bi_rw & REQ_FUA)
@@ -444,12 +444,12 @@ static int nvme_submit_bio_queue(struct nvme_queue *nvmeq, struct nvme_ns *ns,
444 dma_dir = DMA_FROM_DEVICE; 444 dma_dir = DMA_FROM_DEVICE;
445 } 445 }
446 446
447 nvme_map_bio(nvmeq->q_dmadev, info, bio, dma_dir, psegs); 447 nvme_map_bio(nvmeq->q_dmadev, nbio, bio, dma_dir, psegs);
448 448
449 cmnd->rw.flags = 1; 449 cmnd->rw.flags = 1;
450 cmnd->rw.command_id = cmdid; 450 cmnd->rw.command_id = cmdid;
451 cmnd->rw.nsid = cpu_to_le32(ns->ns_id); 451 cmnd->rw.nsid = cpu_to_le32(ns->ns_id);
452 info->prps = nvme_setup_prps(nvmeq, &cmnd->common, info->sg, 452 nbio->prps = nvme_setup_prps(nvmeq, &cmnd->common, nbio->sg,
453 bio->bi_size); 453 bio->bi_size);
454 cmnd->rw.slba = cpu_to_le64(bio->bi_sector >> (ns->lba_shift - 9)); 454 cmnd->rw.slba = cpu_to_le64(bio->bi_sector >> (ns->lba_shift - 9));
455 cmnd->rw.length = cpu_to_le16((bio->bi_size >> ns->lba_shift) - 1); 455 cmnd->rw.length = cpu_to_le16((bio->bi_size >> ns->lba_shift) - 1);
@@ -464,8 +464,8 @@ static int nvme_submit_bio_queue(struct nvme_queue *nvmeq, struct nvme_ns *ns,
464 464
465 return 0; 465 return 0;
466 466
467 free_info: 467 free_nbio:
468 free_info(nvmeq, info); 468 free_nbio(nvmeq, nbio);
469 congestion: 469 congestion:
470 return -EBUSY; 470 return -EBUSY;
471} 471}