Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'block-5.13-2021-05-28' of git://git.kernel.dk/linux-block

Pull block fixes from Jens Axboe:

- NVMe pull request (Christoph):
- fix a memory leak in nvme_cdev_add (Guoqing Jiang)
- fix inline data size comparison in nvmet_tcp_queue_response (Hou
Pu)
- fix false keep-alive timeout when a controller is torn down
(Sagi Grimberg)
- fix a nvme-tcp Kconfig dependency (Sagi Grimberg)
- short-circuit reconnect retries for FC (Hannes Reinecke)
- decode host pathing error for connect (Hannes Reinecke)

- MD pull request (Song):
- Fix incorrect chunk boundary assert (Christoph)

- Fix s390/dasd verification panic (Stefan)

* tag 'block-5.13-2021-05-28' of git://git.kernel.dk/linux-block:
nvmet: fix false keep-alive timeout when a controller is torn down
nvmet-tcp: fix inline data size comparison in nvmet_tcp_queue_response
nvme-tcp: remove incorrect Kconfig dep in BLK_DEV_NVME
md/raid5: remove an incorrect assert in in_chunk_boundary
s390/dasd: add missing discipline function
nvme-fabrics: decode host pathing error for connect
nvme-fc: short-circuit reconnect retries
nvme: fix potential memory leaks in nvme_cdev_add

+54 -21
-2
drivers/md/raid5.c
··· 5311 5311 unsigned int chunk_sectors; 5312 5312 unsigned int bio_sectors = bio_sectors(bio); 5313 5313 5314 - WARN_ON_ONCE(bio->bi_bdev->bd_partno); 5315 - 5316 5314 chunk_sectors = min(conf->chunk_sectors, conf->prev_chunk_sectors); 5317 5315 return chunk_sectors >= 5318 5316 ((sector & (chunk_sectors - 1)) + bio_sectors);
+2 -1
drivers/nvme/host/Kconfig
··· 71 71 config NVME_TCP 72 72 tristate "NVM Express over Fabrics TCP host driver" 73 73 depends on INET 74 - depends on BLK_DEV_NVME 74 + depends on BLOCK 75 + select NVME_CORE 75 76 select NVME_FABRICS 76 77 select CRYPTO 77 78 select CRYPTO_CRC32C
+3 -1
drivers/nvme/host/core.c
··· 3485 3485 cdev_init(cdev, fops); 3486 3486 cdev->owner = owner; 3487 3487 ret = cdev_device_add(cdev, cdev_device); 3488 - if (ret) 3488 + if (ret) { 3489 + put_device(cdev_device); 3489 3490 ida_simple_remove(&nvme_ns_chr_minor_ida, minor); 3491 + } 3490 3492 return ret; 3491 3493 } 3492 3494
+5
drivers/nvme/host/fabrics.c
··· 336 336 cmd->connect.recfmt); 337 337 break; 338 338 339 + case NVME_SC_HOST_PATH_ERROR: 340 + dev_err(ctrl->device, 341 + "Connect command failed: host path error\n"); 342 + break; 343 + 339 344 default: 340 345 dev_err(ctrl->device, 341 346 "Connect command failed, error wo/DNR bit: %d\n",
+17 -8
drivers/nvme/host/fc.c
··· 3107 3107 if (ctrl->ctrl.icdoff) { 3108 3108 dev_err(ctrl->ctrl.device, "icdoff %d is not supported!\n", 3109 3109 ctrl->ctrl.icdoff); 3110 + ret = NVME_SC_INVALID_FIELD | NVME_SC_DNR; 3110 3111 goto out_disconnect_admin_queue; 3111 3112 } 3112 3113 ··· 3115 3114 if (!(ctrl->ctrl.sgls & ((1 << 0) | (1 << 1)))) { 3116 3115 dev_err(ctrl->ctrl.device, 3117 3116 "Mandatory sgls are not supported!\n"); 3117 + ret = NVME_SC_INVALID_FIELD | NVME_SC_DNR; 3118 3118 goto out_disconnect_admin_queue; 3119 3119 } 3120 3120 ··· 3282 3280 if (ctrl->ctrl.state != NVME_CTRL_CONNECTING) 3283 3281 return; 3284 3282 3285 - if (portptr->port_state == FC_OBJSTATE_ONLINE) 3283 + if (portptr->port_state == FC_OBJSTATE_ONLINE) { 3286 3284 dev_info(ctrl->ctrl.device, 3287 3285 "NVME-FC{%d}: reset: Reconnect attempt failed (%d)\n", 3288 3286 ctrl->cnum, status); 3289 - else if (time_after_eq(jiffies, rport->dev_loss_end)) 3287 + if (status > 0 && (status & NVME_SC_DNR)) 3288 + recon = false; 3289 + } else if (time_after_eq(jiffies, rport->dev_loss_end)) 3290 3290 recon = false; 3291 3291 3292 3292 if (recon && nvmf_should_reconnect(&ctrl->ctrl)) { ··· 3302 3298 3303 3299 queue_delayed_work(nvme_wq, &ctrl->connect_work, recon_delay); 3304 3300 } else { 3305 - if (portptr->port_state == FC_OBJSTATE_ONLINE) 3306 - dev_warn(ctrl->ctrl.device, 3307 - "NVME-FC{%d}: Max reconnect attempts (%d) " 3308 - "reached.\n", 3309 - ctrl->cnum, ctrl->ctrl.nr_reconnects); 3310 - else 3301 + if (portptr->port_state == FC_OBJSTATE_ONLINE) { 3302 + if (status > 0 && (status & NVME_SC_DNR)) 3303 + dev_warn(ctrl->ctrl.device, 3304 + "NVME-FC{%d}: reconnect failure\n", 3305 + ctrl->cnum); 3306 + else 3307 + dev_warn(ctrl->ctrl.device, 3308 + "NVME-FC{%d}: Max reconnect attempts " 3309 + "(%d) reached.\n", 3310 + ctrl->cnum, ctrl->ctrl.nr_reconnects); 3311 + } else 3311 3312 dev_warn(ctrl->ctrl.device, 3312 3313 "NVME-FC{%d}: dev_loss_tmo (%d) expired " 3313 3314 "while waiting for remoteport connectivity.\n",
+11 -4
drivers/nvme/target/core.c
··· 388 388 { 389 389 struct nvmet_ctrl *ctrl = container_of(to_delayed_work(work), 390 390 struct nvmet_ctrl, ka_work); 391 - bool cmd_seen = ctrl->cmd_seen; 391 + bool reset_tbkas = ctrl->reset_tbkas; 392 392 393 - ctrl->cmd_seen = false; 394 - if (cmd_seen) { 393 + ctrl->reset_tbkas = false; 394 + if (reset_tbkas) { 395 395 pr_debug("ctrl %d reschedule traffic based keep-alive timer\n", 396 396 ctrl->cntlid); 397 397 schedule_delayed_work(&ctrl->ka_work, ctrl->kato * HZ); ··· 804 804 percpu_ref_exit(&sq->ref); 805 805 806 806 if (ctrl) { 807 + /* 808 + * The teardown flow may take some time, and the host may not 809 + * send us keep-alive during this period, hence reset the 810 + * traffic based keep-alive timer so we don't trigger a 811 + * controller teardown as a result of a keep-alive expiration. 812 + */ 813 + ctrl->reset_tbkas = true; 807 814 nvmet_ctrl_put(ctrl); 808 815 sq->ctrl = NULL; /* allows reusing the queue later */ 809 816 } ··· 959 952 } 960 953 961 954 if (sq->ctrl) 962 - sq->ctrl->cmd_seen = true; 955 + sq->ctrl->reset_tbkas = true; 963 956 964 957 return true; 965 958
+1 -1
drivers/nvme/target/nvmet.h
··· 167 167 struct nvmet_subsys *subsys; 168 168 struct nvmet_sq **sqs; 169 169 170 - bool cmd_seen; 170 + bool reset_tbkas; 171 171 172 172 struct mutex lock; 173 173 u64 cap;
+1 -1
drivers/nvme/target/tcp.c
··· 550 550 * nvmet_req_init is completed. 551 551 */ 552 552 if (queue->rcv_state == NVMET_TCP_RECV_PDU && 553 - len && len < cmd->req.port->inline_data_size && 553 + len && len <= cmd->req.port->inline_data_size && 554 554 nvme_is_write(cmd->req.cmd)) 555 555 return; 556 556 }
+7 -1
drivers/s390/block/dasd_diag.c
··· 642 642 blk_queue_segment_boundary(q, PAGE_SIZE - 1); 643 643 } 644 644 645 + static int dasd_diag_pe_handler(struct dasd_device *device, 646 + __u8 tbvpm, __u8 fcsecpm) 647 + { 648 + return dasd_generic_verify_path(device, tbvpm); 649 + } 650 + 645 651 static struct dasd_discipline dasd_diag_discipline = { 646 652 .owner = THIS_MODULE, 647 653 .name = "DIAG", 648 654 .ebcname = "DIAG", 649 655 .check_device = dasd_diag_check_device, 650 - .verify_path = dasd_generic_verify_path, 656 + .pe_handler = dasd_diag_pe_handler, 651 657 .fill_geometry = dasd_diag_fill_geometry, 652 658 .setup_blk_queue = dasd_diag_setup_blk_queue, 653 659 .start_IO = dasd_start_diag,
+7 -1
drivers/s390/block/dasd_fba.c
··· 794 794 blk_queue_flag_set(QUEUE_FLAG_DISCARD, q); 795 795 } 796 796 797 + static int dasd_fba_pe_handler(struct dasd_device *device, 798 + __u8 tbvpm, __u8 fcsecpm) 799 + { 800 + return dasd_generic_verify_path(device, tbvpm); 801 + } 802 + 797 803 static struct dasd_discipline dasd_fba_discipline = { 798 804 .owner = THIS_MODULE, 799 805 .name = "FBA ", 800 806 .ebcname = "FBA ", 801 807 .check_device = dasd_fba_check_characteristics, 802 808 .do_analysis = dasd_fba_do_analysis, 803 - .verify_path = dasd_generic_verify_path, 809 + .pe_handler = dasd_fba_pe_handler, 804 810 .setup_blk_queue = dasd_fba_setup_blk_queue, 805 811 .fill_geometry = dasd_fba_fill_geometry, 806 812 .start_IO = dasd_start_IO,
-1
drivers/s390/block/dasd_int.h
··· 297 297 * e.g. verify that new path is compatible with the current 298 298 * configuration. 299 299 */ 300 - int (*verify_path)(struct dasd_device *, __u8); 301 300 int (*pe_handler)(struct dasd_device *, __u8, __u8); 302 301 303 302 /*