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.16-2021-12-10' of git://git.kernel.dk/linux-block

Pull block fixes from Jens Axboe:
"A few block fixes that should go into this release:

- NVMe pull request:
- set ana_log_size to 0 after freeing ana_log_buf (Hou Tao)
- show subsys nqn for duplicate cntlids (Keith Busch)
- disable namespace access for unsupported metadata (Keith
Busch)
- report write pointer for a full zone as zone start + zone len
(Niklas Cassel)
- fix use after free when disconnecting a reconnecting ctrl
(Ruozhu Li)
- fix a list corruption in nvmet-tcp (Sagi Grimberg)

- Fix for a regression on DIO single bio async IO (Pavel)

- ioprio seteuid fix (Davidlohr)

- mtd fix that subsequently got reverted as it was broken, will get
re-done and submitted for the next round

- Two MD fixes via Song (Markus, zhangyue)"

* tag 'block-5.16-2021-12-10' of git://git.kernel.dk/linux-block:
Revert "mtd_blkdevs: don't scan partitions for plain mtdblock"
block: fix ioprio_get(IOPRIO_WHO_PGRP) vs setuid(2)
md: fix double free of mddev->private in autorun_array()
md: fix update super 1.0 on rdev size change
nvmet-tcp: fix possible list corruption for unexpected command failure
block: fix single bio async DIO error handling
nvme: fix use after free when disconnecting a reconnecting ctrl
nvme-multipath: set ana_log_size to 0 after free ana_log_buf
mtd_blkdevs: don't scan partitions for plain mtdblock
nvme: report write pointer for a full zone as zone start + zone len
nvme: disable namespace access for unsupported metadata
nvme: show subsys nqn for duplicate cntlids

+40 -12
+1 -2
block/fops.c
··· 341 341 } else { 342 342 ret = bio_iov_iter_get_pages(bio, iter); 343 343 if (unlikely(ret)) { 344 - bio->bi_status = BLK_STS_IOERR; 345 - bio_endio(bio); 344 + bio_put(bio); 346 345 return ret; 347 346 } 348 347 }
+3
block/ioprio.c
··· 220 220 pgrp = task_pgrp(current); 221 221 else 222 222 pgrp = find_vpid(who); 223 + read_lock(&tasklist_lock); 223 224 do_each_pid_thread(pgrp, PIDTYPE_PGID, p) { 224 225 tmpio = get_task_ioprio(p); 225 226 if (tmpio < 0) ··· 230 229 else 231 230 ret = ioprio_best(ret, tmpio); 232 231 } while_each_pid_thread(pgrp, PIDTYPE_PGID, p); 232 + read_unlock(&tasklist_lock); 233 + 233 234 break; 234 235 case IOPRIO_WHO_USER: 235 236 uid = make_kuid(current_user_ns(), who);
+3 -1
drivers/md/md.c
··· 2189 2189 2190 2190 if (!num_sectors || num_sectors > max_sectors) 2191 2191 num_sectors = max_sectors; 2192 + rdev->sb_start = sb_start; 2192 2193 } 2193 2194 sb = page_address(rdev->sb_page); 2194 2195 sb->data_size = cpu_to_le64(num_sectors); ··· 6271 6270 spin_lock(&mddev->lock); 6272 6271 mddev->pers = NULL; 6273 6272 spin_unlock(&mddev->lock); 6274 - pers->free(mddev, mddev->private); 6273 + if (mddev->private) 6274 + pers->free(mddev, mddev->private); 6275 6275 mddev->private = NULL; 6276 6276 if (pers->sync_request && mddev->to_remove == NULL) 6277 6277 mddev->to_remove = &md_redundancy_group;
+18 -5
drivers/nvme/host/core.c
··· 666 666 struct request *rq) 667 667 { 668 668 if (ctrl->state != NVME_CTRL_DELETING_NOIO && 669 + ctrl->state != NVME_CTRL_DELETING && 669 670 ctrl->state != NVME_CTRL_DEAD && 670 671 !test_bit(NVME_CTRL_FAILFAST_EXPIRED, &ctrl->flags) && 671 672 !blk_noretry_request(rq) && !(rq->cmd_flags & REQ_NVME_MPATH)) ··· 1750 1749 */ 1751 1750 if (WARN_ON_ONCE(!(id->flbas & NVME_NS_FLBAS_META_EXT))) 1752 1751 return -EINVAL; 1753 - if (ctrl->max_integrity_segments) 1754 - ns->features |= 1755 - (NVME_NS_METADATA_SUPPORTED | NVME_NS_EXT_LBAS); 1752 + 1753 + ns->features |= NVME_NS_EXT_LBAS; 1754 + 1755 + /* 1756 + * The current fabrics transport drivers support namespace 1757 + * metadata formats only if nvme_ns_has_pi() returns true. 1758 + * Suppress support for all other formats so the namespace will 1759 + * have a 0 capacity and not be usable through the block stack. 1760 + * 1761 + * Note, this check will need to be modified if any drivers 1762 + * gain the ability to use other metadata formats. 1763 + */ 1764 + if (ctrl->max_integrity_segments && nvme_ns_has_pi(ns)) 1765 + ns->features |= NVME_NS_METADATA_SUPPORTED; 1756 1766 } else { 1757 1767 /* 1758 1768 * For PCIe controllers, we can't easily remap the separate ··· 2708 2696 2709 2697 if (tmp->cntlid == ctrl->cntlid) { 2710 2698 dev_err(ctrl->device, 2711 - "Duplicate cntlid %u with %s, rejecting\n", 2712 - ctrl->cntlid, dev_name(tmp->device)); 2699 + "Duplicate cntlid %u with %s, subsys %s, rejecting\n", 2700 + ctrl->cntlid, dev_name(tmp->device), 2701 + subsys->subnqn); 2713 2702 return false; 2714 2703 } 2715 2704
+2 -1
drivers/nvme/host/multipath.c
··· 866 866 } 867 867 if (ana_log_size > ctrl->ana_log_size) { 868 868 nvme_mpath_stop(ctrl); 869 - kfree(ctrl->ana_log_buf); 869 + nvme_mpath_uninit(ctrl); 870 870 ctrl->ana_log_buf = kmalloc(ana_log_size, GFP_KERNEL); 871 871 if (!ctrl->ana_log_buf) 872 872 return -ENOMEM; ··· 886 886 { 887 887 kfree(ctrl->ana_log_buf); 888 888 ctrl->ana_log_buf = NULL; 889 + ctrl->ana_log_size = 0; 889 890 }
+1 -1
drivers/nvme/host/nvme.h
··· 709 709 return true; 710 710 if (ctrl->ops->flags & NVME_F_FABRICS && 711 711 ctrl->state == NVME_CTRL_DELETING) 712 - return true; 712 + return queue_live; 713 713 return __nvme_check_ready(ctrl, rq, queue_live); 714 714 } 715 715 int nvme_submit_sync_cmd(struct request_queue *q, struct nvme_command *cmd,
+4 -1
drivers/nvme/host/zns.c
··· 166 166 zone.len = ns->zsze; 167 167 zone.capacity = nvme_lba_to_sect(ns, le64_to_cpu(entry->zcap)); 168 168 zone.start = nvme_lba_to_sect(ns, le64_to_cpu(entry->zslba)); 169 - zone.wp = nvme_lba_to_sect(ns, le64_to_cpu(entry->wp)); 169 + if (zone.cond == BLK_ZONE_COND_FULL) 170 + zone.wp = zone.start + zone.len; 171 + else 172 + zone.wp = nvme_lba_to_sect(ns, le64_to_cpu(entry->wp)); 170 173 171 174 return cb(&zone, idx, data); 172 175 }
+8 -1
drivers/nvme/target/tcp.c
··· 922 922 size_t data_len = le32_to_cpu(req->cmd->common.dptr.sgl.length); 923 923 int ret; 924 924 925 - if (!nvme_is_write(cmd->req.cmd) || 925 + /* 926 + * This command has not been processed yet, hence we are trying to 927 + * figure out if there is still pending data left to receive. If 928 + * we don't, we can simply prepare for the next pdu and bail out, 929 + * otherwise we will need to prepare a buffer and receive the 930 + * stale data before continuing forward. 931 + */ 932 + if (!nvme_is_write(cmd->req.cmd) || !data_len || 926 933 data_len > cmd->req.port->inline_data_size) { 927 934 nvmet_prepare_receive_pdu(queue); 928 935 return;