Pull block fixes from Jens Axboe: - Fix blk-crypto reporting EIO when EINVAL is the correct error code - Two bug fixes for the block zone support - NVME pull request via Keith: - Target side authentication fixup - Peer-to-peer metadata fixup - null_blk DMA alignment fix * tag 'block-6.18-20251031' of git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux: null_blk: set dma alignment to logical block size blk-crypto: use BLK_STS_INVAL for alignment errors block: make REQ_OP_ZONE_OPEN a write operation block: fix op_is_zone_mgmt() to handle REQ_OP_ZONE_RESET_ALL nvme-pci: use blk_map_iter for p2p metadata nvmet-auth: update sc_c in host response
Unified · Split
| @@ -292,7 +292,7 @@ bool __blk_crypto_bio_prep(struct bio **bio_ptr) · 291 unmodified lines | |||
| 292 | } | 292 | } |
| 293 | 293 | ||
| 294 | if (!bio_crypt_check_alignment(bio)) { | 294 | if (!bio_crypt_check_alignment(bio)) { |
| 295 | bio->bi_status = BLK_STS_IOERR; | 295 | bio->bi_status = BLK_STS_INVAL; |
| 296 | goto fail; | 296 | goto fail; |
| 297 | } | 297 | } |
| 298 | 298 | ||
| @@ -1949,6 +1949,7 @@ static int null_add_dev(struct nullb_device *dev) · 1948 unmodified lines | |||
| 1949 | .logical_block_size = dev->blocksize, | 1949 | .logical_block_size = dev->blocksize, |
| 1950 | .physical_block_size = dev->blocksize, | 1950 | .physical_block_size = dev->blocksize, |
| 1951 | .max_hw_sectors = dev->max_sectors, | 1951 | .max_hw_sectors = dev->max_sectors, |
| 1952 | .dma_alignment = dev->blocksize - 1, | ||
| 1952 | }; | 1953 | }; |
| 1953 | 1954 | ||
| 1954 | struct nullb *nullb; | 1955 | struct nullb *nullb; |
| @@ -1042,7 +1042,7 @@ static blk_status_t nvme_map_data(struct request *req) · 1041 unmodified lines | |||
| 1042 | return nvme_pci_setup_data_prp(req, &iter); | 1042 | return nvme_pci_setup_data_prp(req, &iter); |
| 1043 | } | 1043 | } |
| 1044 | 1044 | ||
| 1045 | static blk_status_t nvme_pci_setup_meta_sgls(struct request *req) | 1045 | static blk_status_t nvme_pci_setup_meta_iter(struct request *req) |
| 1046 | { | 1046 | { |
| 1047 | struct nvme_queue *nvmeq = req->mq_hctx->driver_data; | 1047 | struct nvme_queue *nvmeq = req->mq_hctx->driver_data; |
| 1048 | unsigned int entries = req->nr_integrity_segments; | 1048 | unsigned int entries = req->nr_integrity_segments; |
| @@ -1072,8 +1072,12 @@ static blk_status_t nvme_pci_setup_meta_sgls(struct request *req) · 23 unmodified lines | |||
| 1072 | * descriptor provides an explicit length, so we're relying on that | 1072 | * descriptor provides an explicit length, so we're relying on that |
| 1073 | * mechanism to catch any misunderstandings between the application and | 1073 | * mechanism to catch any misunderstandings between the application and |
| 1074 | * device. | 1074 | * device. |
| 1075 | * | ||
| 1076 | * P2P DMA also needs to use the blk_dma_iter method, so mptr setup | ||
| 1077 | * leverages this routine when that happens. | ||
| 1075 | */ | 1078 | */ |
| 1076 | if (entries == 1 && !(nvme_req(req)->flags & NVME_REQ_USERCMD)) { | 1079 | if (!nvme_ctrl_meta_sgl_supported(&dev->ctrl) || |
| 1080 | (entries == 1 && !(nvme_req(req)->flags & NVME_REQ_USERCMD))) { | ||
| 1077 | iod->cmd.common.metadata = cpu_to_le64(iter.addr); | 1081 | iod->cmd.common.metadata = cpu_to_le64(iter.addr); |
| 1078 | iod->meta_total_len = iter.len; | 1082 | iod->meta_total_len = iter.len; |
| 1079 | iod->meta_dma = iter.addr; | 1083 | iod->meta_dma = iter.addr; |
| @@ -1114,6 +1118,9 @@ static blk_status_t nvme_pci_setup_meta_mptr(struct request *req) · 34 unmodified lines | |||
| 1114 | struct nvme_queue *nvmeq = req->mq_hctx->driver_data; | 1118 | struct nvme_queue *nvmeq = req->mq_hctx->driver_data; |
| 1115 | struct bio_vec bv = rq_integrity_vec(req); | 1119 | struct bio_vec bv = rq_integrity_vec(req); |
| 1116 | 1120 | ||
| 1121 | if (is_pci_p2pdma_page(bv.bv_page)) | ||
| 1122 | return nvme_pci_setup_meta_iter(req); | ||
| 1123 | |||
| 1117 | iod->meta_dma = dma_map_bvec(nvmeq->dev->dev, &bv, rq_dma_dir(req), 0); | 1124 | iod->meta_dma = dma_map_bvec(nvmeq->dev->dev, &bv, rq_dma_dir(req), 0); |
| 1118 | if (dma_mapping_error(nvmeq->dev->dev, iod->meta_dma)) | 1125 | if (dma_mapping_error(nvmeq->dev->dev, iod->meta_dma)) |
| 1119 | return BLK_STS_IOERR; | 1126 | return BLK_STS_IOERR; |
| @@ -1128,7 +1135,7 @@ static blk_status_t nvme_map_metadata(struct request *req) · 8 unmodified lines | |||
| 1128 | 1135 | ||
| 1129 | if ((iod->cmd.common.flags & NVME_CMD_SGL_METABUF) && | 1136 | if ((iod->cmd.common.flags & NVME_CMD_SGL_METABUF) && |
| 1130 | nvme_pci_metadata_use_sgls(req)) | 1137 | nvme_pci_metadata_use_sgls(req)) |
| 1131 | return nvme_pci_setup_meta_sgls(req); | 1138 | return nvme_pci_setup_meta_iter(req); |
| 1132 | return nvme_pci_setup_meta_mptr(req); | 1139 | return nvme_pci_setup_meta_mptr(req); |
| 1133 | } | 1140 | } |
| 1134 | 1141 | ||
| @@ -298,7 +298,7 @@ int nvmet_auth_host_hash(struct nvmet_req *req, u8 *response, · 297 unmodified lines | |||
| 298 | const char *hash_name; | 298 | const char *hash_name; |
| 299 | u8 *challenge = req->sq->dhchap_c1; | 299 | u8 *challenge = req->sq->dhchap_c1; |
| 300 | struct nvme_dhchap_key *transformed_key; | 300 | struct nvme_dhchap_key *transformed_key; |
| 301 | u8 buf[4]; | 301 | u8 buf[4], sc_c = ctrl->concat ? 1 : 0; |
| 302 | int ret; | 302 | int ret; |
| 303 | 303 | ||
| 304 | hash_name = nvme_auth_hmac_name(ctrl->shash_id); | 304 | hash_name = nvme_auth_hmac_name(ctrl->shash_id); |
| @@ -367,13 +367,14 @@ int nvmet_auth_host_hash(struct nvmet_req *req, u8 *response, · 62 unmodified lines | |||
| 367 | ret = crypto_shash_update(shash, buf, 2); | 367 | ret = crypto_shash_update(shash, buf, 2); |
| 368 | if (ret) | 368 | if (ret) |
| 369 | goto out; | 369 | goto out; |
| 370 | memset(buf, 0, 4); | 370 | *buf = sc_c; |
| 371 | ret = crypto_shash_update(shash, buf, 1); | 371 | ret = crypto_shash_update(shash, buf, 1); |
| 372 | if (ret) | 372 | if (ret) |
| 373 | goto out; | 373 | goto out; |
| 374 | ret = crypto_shash_update(shash, "HostHost", 8); | 374 | ret = crypto_shash_update(shash, "HostHost", 8); |
| 375 | if (ret) | 375 | if (ret) |
| 376 | goto out; | 376 | goto out; |
| 377 | memset(buf, 0, 4); | ||
| 377 | ret = crypto_shash_update(shash, ctrl->hostnqn, strlen(ctrl->hostnqn)); | 378 | ret = crypto_shash_update(shash, ctrl->hostnqn, strlen(ctrl->hostnqn)); |
| 378 | if (ret) | 379 | if (ret) |
| 379 | goto out; | 380 | goto out; |
| @@ -341,15 +341,15 @@ enum req_op { · 340 unmodified lines | |||
| 341 | /* write the zero filled sector many times */ | 341 | /* write the zero filled sector many times */ |
| 342 | REQ_OP_WRITE_ZEROES = (__force blk_opf_t)9, | 342 | REQ_OP_WRITE_ZEROES = (__force blk_opf_t)9, |
| 343 | /* Open a zone */ | 343 | /* Open a zone */ |
| 344 | REQ_OP_ZONE_OPEN = (__force blk_opf_t)10, | 344 | REQ_OP_ZONE_OPEN = (__force blk_opf_t)11, |
| 345 | /* Close a zone */ | 345 | /* Close a zone */ |
| 346 | REQ_OP_ZONE_CLOSE = (__force blk_opf_t)11, | 346 | REQ_OP_ZONE_CLOSE = (__force blk_opf_t)13, |
| 347 | /* Transition a zone to full */ | 347 | /* Transition a zone to full */ |
| 348 | REQ_OP_ZONE_FINISH = (__force blk_opf_t)13, | 348 | REQ_OP_ZONE_FINISH = (__force blk_opf_t)15, |
| 349 | /* reset a zone write pointer */ | 349 | /* reset a zone write pointer */ |
| 350 | REQ_OP_ZONE_RESET = (__force blk_opf_t)15, | 350 | REQ_OP_ZONE_RESET = (__force blk_opf_t)17, |
| 351 | /* reset all the zone present on the device */ | 351 | /* reset all the zone present on the device */ |
| 352 | REQ_OP_ZONE_RESET_ALL = (__force blk_opf_t)17, | 352 | REQ_OP_ZONE_RESET_ALL = (__force blk_opf_t)19, |
| 353 | 353 | ||
| 354 | /* Driver private requests */ | 354 | /* Driver private requests */ |
| 355 | REQ_OP_DRV_IN = (__force blk_opf_t)34, | 355 | REQ_OP_DRV_IN = (__force blk_opf_t)34, |
| @@ -478,6 +478,7 @@ static inline bool op_is_zone_mgmt(enum req_op op) · 122 unmodified lines | |||
| 478 | { | 478 | { |
| 479 | switch (op & REQ_OP_MASK) { | 479 | switch (op & REQ_OP_MASK) { |
| 480 | case REQ_OP_ZONE_RESET: | 480 | case REQ_OP_ZONE_RESET: |
| 481 | case REQ_OP_ZONE_RESET_ALL: | ||
| 481 | case REQ_OP_ZONE_OPEN: | 482 | case REQ_OP_ZONE_OPEN: |
| 482 | case REQ_OP_ZONE_CLOSE: | 483 | case REQ_OP_ZONE_CLOSE: |
| 483 | case REQ_OP_ZONE_FINISH: | 484 | case REQ_OP_ZONE_FINISH: |