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-6.11-20240906' of git://git.kernel.dk/linux

Pull block fixes from Jens Axboe:
"Mostly just some fixlets for NVMe, but also a bug fix for the ublk
driver and an integrity fix"

* tag 'block-6.11-20240906' of git://git.kernel.dk/linux:
bio-integrity: don't restrict the size of integrity metadata
ublk_drv: fix NULL pointer dereference in ublk_ctrl_start_recovery()
nvmet: Identify-Active Namespace ID List command should reject invalid nsid
nvme: set BLK_FEAT_ZONED for ZNS multipath disks
nvme-pci: Add sleep quirk for Samsung 990 Evo
nvme-pci: allocate tagset on reset if necessary
nvmet-tcp: fix kernel crash if commands allocation fails
nvme: use better description for async reset reason
nvmet: Make nvmet_debugfs static

+38 -8
-4
block/bio-integrity.c
··· 167 167 struct request_queue *q = bdev_get_queue(bio->bi_bdev); 168 168 struct bio_integrity_payload *bip = bio_integrity(bio); 169 169 170 - if (((bip->bip_iter.bi_size + len) >> SECTOR_SHIFT) > 171 - queue_max_hw_sectors(q)) 172 - return 0; 173 - 174 170 if (bip->bip_vcnt > 0) { 175 171 struct bio_vec *bv = &bip->bip_vec[bip->bip_vcnt - 1]; 176 172 bool same_page = false;
+2
drivers/block/ublk_drv.c
··· 2663 2663 mutex_lock(&ub->mutex); 2664 2664 if (!ublk_can_use_recovery(ub)) 2665 2665 goto out_unlock; 2666 + if (!ub->nr_queues_ready) 2667 + goto out_unlock; 2666 2668 /* 2667 2669 * START_RECOVERY is only allowd after: 2668 2670 *
+2 -1
drivers/nvme/host/core.c
··· 4437 4437 4438 4438 static void nvme_handle_aer_persistent_error(struct nvme_ctrl *ctrl) 4439 4439 { 4440 - dev_warn(ctrl->device, "resetting controller due to AER\n"); 4440 + dev_warn(ctrl->device, 4441 + "resetting controller due to persistent internal error\n"); 4441 4442 nvme_reset_ctrl(ctrl); 4442 4443 } 4443 4444
+3 -1
drivers/nvme/host/multipath.c
··· 616 616 blk_set_stacking_limits(&lim); 617 617 lim.dma_alignment = 3; 618 618 lim.features |= BLK_FEAT_IO_STAT | BLK_FEAT_NOWAIT | BLK_FEAT_POLL; 619 - if (head->ids.csi != NVME_CSI_ZNS) 619 + if (head->ids.csi == NVME_CSI_ZNS) 620 + lim.features |= BLK_FEAT_ZONED; 621 + else 620 622 lim.max_zone_append_sectors = 0; 621 623 622 624 head->disk = blk_alloc_disk(&lim, ctrl->numa_node);
+17
drivers/nvme/host/pci.c
··· 2508 2508 2509 2509 static void nvme_pci_update_nr_queues(struct nvme_dev *dev) 2510 2510 { 2511 + if (!dev->ctrl.tagset) { 2512 + nvme_alloc_io_tag_set(&dev->ctrl, &dev->tagset, &nvme_mq_ops, 2513 + nvme_pci_nr_maps(dev), sizeof(struct nvme_iod)); 2514 + return; 2515 + } 2516 + 2511 2517 blk_mq_update_nr_hw_queues(&dev->tagset, dev->online_queues - 1); 2512 2518 /* free previously allocated queues that are no longer usable */ 2513 2519 nvme_free_queues(dev, dev->online_queues); ··· 2972 2966 dmi_match(DMI_BOARD_NAME, "NS5x_7xAU") || 2973 2967 dmi_match(DMI_BOARD_NAME, "NS5x_7xPU") || 2974 2968 dmi_match(DMI_BOARD_NAME, "PH4PRX1_PH6PRX1")) 2969 + return NVME_QUIRK_FORCE_NO_SIMPLE_SUSPEND; 2970 + } else if (pdev->vendor == 0x144d && pdev->device == 0xa80d) { 2971 + /* 2972 + * Exclude Samsung 990 Evo from NVME_QUIRK_SIMPLE_SUSPEND 2973 + * because of high power consumption (> 2 Watt) in s2idle 2974 + * sleep. Only some boards with Intel CPU are affected. 2975 + */ 2976 + if (dmi_match(DMI_BOARD_NAME, "GMxPXxx") || 2977 + dmi_match(DMI_BOARD_NAME, "PH4PG31") || 2978 + dmi_match(DMI_BOARD_NAME, "PH4PRX1_PH6PRX1") || 2979 + dmi_match(DMI_BOARD_NAME, "PH6PG01_PH6PG71")) 2975 2980 return NVME_QUIRK_FORCE_NO_SIMPLE_SUSPEND; 2976 2981 } 2977 2982
+10
drivers/nvme/target/admin-cmd.c
··· 587 587 u16 status = 0; 588 588 int i = 0; 589 589 590 + /* 591 + * NSID values 0xFFFFFFFE and NVME_NSID_ALL are invalid 592 + * See NVMe Base Specification, Active Namespace ID list (CNS 02h). 593 + */ 594 + if (min_nsid == 0xFFFFFFFE || min_nsid == NVME_NSID_ALL) { 595 + req->error_loc = offsetof(struct nvme_identify, nsid); 596 + status = NVME_SC_INVALID_NS | NVME_STATUS_DNR; 597 + goto out; 598 + } 599 + 590 600 list = kzalloc(buf_size, GFP_KERNEL); 591 601 if (!list) { 592 602 status = NVME_SC_INTERNAL;
+1 -1
drivers/nvme/target/debugfs.c
··· 13 13 #include "nvmet.h" 14 14 #include "debugfs.h" 15 15 16 - struct dentry *nvmet_debugfs; 16 + static struct dentry *nvmet_debugfs; 17 17 18 18 #define NVMET_DEBUGFS_ATTR(field) \ 19 19 static int field##_open(struct inode *inode, struct file *file) \
+3 -1
drivers/nvme/target/tcp.c
··· 2146 2146 } 2147 2147 2148 2148 queue->nr_cmds = sq->size * 2; 2149 - if (nvmet_tcp_alloc_cmds(queue)) 2149 + if (nvmet_tcp_alloc_cmds(queue)) { 2150 + queue->nr_cmds = 0; 2150 2151 return NVME_SC_INTERNAL; 2152 + } 2151 2153 return 0; 2152 2154 } 2153 2155