Skip to content

Commit f4408c3

Browse files
committed
Merge tag 'block-6.1-2022-11-18' of git://git.kernel.dk/linux
Pull block fixes from Jens Axboe: - NVMe pull request via Christoph: - Two more bogus nid quirks (Bean Huo, Tiago Dias Ferreira) - Memory leak fix in nvmet (Sagi Grimberg) - Regression fix for block cgroups pinning the wrong blkcg, causing leaks of cgroups and blkcgs (Chris) - UAF fix for drbd setup error handling (Dan) - Fix DMA alignment propagation in DM (Keith) * tag 'block-6.1-2022-11-18' of git://git.kernel.dk/linux: dm-log-writes: set dma_alignment limit in io_hints dm-integrity: set dma_alignment limit in io_hints block: make blk_set_default_limits() private dm-crypt: provide dma_alignment limit in io_hints block: make dma_alignment a stacking queue_limit nvmet: fix a memory leak in nvmet_auth_set_key nvme-pci: add NVME_QUIRK_BOGUS_NID for Netac NV7000 drbd: use after free in drbd_create_device() nvme-pci: add NVME_QUIRK_BOGUS_NID for Micron Nitro blk-cgroup: properly pin the parent in blkcg_css_online
2 parents b5bf1d8 + 5c59789 commit f4408c3

File tree

11 files changed

+26
-16
lines changed

11 files changed

+26
-16
lines changed

block/blk-cgroup.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1213,7 +1213,7 @@ static int blkcg_css_online(struct cgroup_subsys_state *css)
12131213
* parent so that offline always happens towards the root.
12141214
*/
12151215
if (parent)
1216-
blkcg_pin_online(css);
1216+
blkcg_pin_online(&parent->css);
12171217
return 0;
12181218
}
12191219

block/blk-core.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,6 @@ struct request_queue *blk_alloc_queue(int node_id, bool alloc_srcu)
425425
PERCPU_REF_INIT_ATOMIC, GFP_KERNEL))
426426
goto fail_stats;
427427

428-
blk_queue_dma_alignment(q, 511);
429428
blk_set_default_limits(&q->limits);
430429
q->nr_requests = BLKDEV_DEFAULT_RQ;
431430

block/blk-settings.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ void blk_set_default_limits(struct queue_limits *lim)
5757
lim->misaligned = 0;
5858
lim->zoned = BLK_ZONED_NONE;
5959
lim->zone_write_granularity = 0;
60+
lim->dma_alignment = 511;
6061
}
61-
EXPORT_SYMBOL(blk_set_default_limits);
6262

6363
/**
6464
* blk_set_stacking_limits - set default limits for stacking devices
@@ -600,6 +600,7 @@ int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,
600600

601601
t->io_min = max(t->io_min, b->io_min);
602602
t->io_opt = lcm_not_zero(t->io_opt, b->io_opt);
603+
t->dma_alignment = max(t->dma_alignment, b->dma_alignment);
603604

604605
/* Set non-power-of-2 compatible chunk_sectors boundary */
605606
if (b->chunk_sectors)
@@ -773,7 +774,7 @@ EXPORT_SYMBOL(blk_queue_virt_boundary);
773774
**/
774775
void blk_queue_dma_alignment(struct request_queue *q, int mask)
775776
{
776-
q->dma_alignment = mask;
777+
q->limits.dma_alignment = mask;
777778
}
778779
EXPORT_SYMBOL(blk_queue_dma_alignment);
779780

@@ -795,8 +796,8 @@ void blk_queue_update_dma_alignment(struct request_queue *q, int mask)
795796
{
796797
BUG_ON(mask > PAGE_SIZE);
797798

798-
if (mask > q->dma_alignment)
799-
q->dma_alignment = mask;
799+
if (mask > q->limits.dma_alignment)
800+
q->limits.dma_alignment = mask;
800801
}
801802
EXPORT_SYMBOL(blk_queue_update_dma_alignment);
802803

block/blk.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,7 @@ void blk_rq_set_mixed_merge(struct request *rq);
331331
bool blk_rq_merge_ok(struct request *rq, struct bio *bio);
332332
enum elv_merge blk_try_merge(struct request *rq, struct bio *bio);
333333

334+
void blk_set_default_limits(struct queue_limits *lim);
334335
int blk_dev_init(void);
335336

336337
/*

drivers/block/drbd/drbd_main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2672,7 +2672,7 @@ static int init_submitter(struct drbd_device *device)
26722672
enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsigned int minor)
26732673
{
26742674
struct drbd_resource *resource = adm_ctx->resource;
2675-
struct drbd_connection *connection;
2675+
struct drbd_connection *connection, *n;
26762676
struct drbd_device *device;
26772677
struct drbd_peer_device *peer_device, *tmp_peer_device;
26782678
struct gendisk *disk;
@@ -2789,7 +2789,7 @@ enum drbd_ret_code drbd_create_device(struct drbd_config_context *adm_ctx, unsig
27892789
return NO_ERROR;
27902790

27912791
out_idr_remove_from_resource:
2792-
for_each_connection(connection, resource) {
2792+
for_each_connection_safe(connection, n, resource) {
27932793
peer_device = idr_remove(&connection->peer_devices, vnr);
27942794
if (peer_device)
27952795
kref_put(&connection->kref, drbd_destroy_connection);

drivers/md/dm-crypt.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3630,6 +3630,7 @@ static void crypt_io_hints(struct dm_target *ti, struct queue_limits *limits)
36303630
limits->physical_block_size =
36313631
max_t(unsigned, limits->physical_block_size, cc->sector_size);
36323632
limits->io_min = max_t(unsigned, limits->io_min, cc->sector_size);
3633+
limits->dma_alignment = limits->logical_block_size - 1;
36333634
}
36343635

36353636
static struct target_type crypt_target = {

drivers/md/dm-integrity.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3378,6 +3378,7 @@ static void dm_integrity_io_hints(struct dm_target *ti, struct queue_limits *lim
33783378
limits->logical_block_size = ic->sectors_per_block << SECTOR_SHIFT;
33793379
limits->physical_block_size = ic->sectors_per_block << SECTOR_SHIFT;
33803380
blk_limits_io_min(limits, ic->sectors_per_block << SECTOR_SHIFT);
3381+
limits->dma_alignment = limits->logical_block_size - 1;
33813382
}
33823383
}
33833384

drivers/md/dm-log-writes.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -875,6 +875,7 @@ static void log_writes_io_hints(struct dm_target *ti, struct queue_limits *limit
875875
limits->logical_block_size = bdev_logical_block_size(lc->dev->bdev);
876876
limits->physical_block_size = bdev_physical_block_size(lc->dev->bdev);
877877
limits->io_min = limits->physical_block_size;
878+
limits->dma_alignment = limits->logical_block_size - 1;
878879
}
879880

880881
#if IS_ENABLED(CONFIG_FS_DAX)

drivers/nvme/host/pci.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3489,6 +3489,8 @@ static const struct pci_device_id nvme_id_table[] = {
34893489
NVME_QUIRK_IGNORE_DEV_SUBNQN, },
34903490
{ PCI_DEVICE(0x1344, 0x5407), /* Micron Technology Inc NVMe SSD */
34913491
.driver_data = NVME_QUIRK_IGNORE_DEV_SUBNQN },
3492+
{ PCI_DEVICE(0x1344, 0x6001), /* Micron Nitro NVMe */
3493+
.driver_data = NVME_QUIRK_BOGUS_NID, },
34923494
{ PCI_DEVICE(0x1c5c, 0x1504), /* SK Hynix PC400 */
34933495
.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, },
34943496
{ PCI_DEVICE(0x1c5c, 0x174a), /* SK Hynix P31 SSD */
@@ -3519,6 +3521,8 @@ static const struct pci_device_id nvme_id_table[] = {
35193521
.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, },
35203522
{ PCI_DEVICE(0x2646, 0x501E), /* KINGSTON OM3PGP4xxxxQ OS21011 NVMe SSD */
35213523
.driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, },
3524+
{ PCI_DEVICE(0x1f40, 0x5236), /* Netac Technologies Co. NV7000 NVMe SSD */
3525+
.driver_data = NVME_QUIRK_BOGUS_NID, },
35223526
{ PCI_DEVICE(0x1e4B, 0x1001), /* MAXIO MAP1001 */
35233527
.driver_data = NVME_QUIRK_BOGUS_NID, },
35243528
{ PCI_DEVICE(0x1e4B, 0x1002), /* MAXIO MAP1002 */

drivers/nvme/target/auth.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,11 @@ int nvmet_auth_set_key(struct nvmet_host *host, const char *secret,
4545
if (!dhchap_secret)
4646
return -ENOMEM;
4747
if (set_ctrl) {
48+
kfree(host->dhchap_ctrl_secret);
4849
host->dhchap_ctrl_secret = strim(dhchap_secret);
4950
host->dhchap_ctrl_key_hash = key_hash;
5051
} else {
52+
kfree(host->dhchap_secret);
5153
host->dhchap_secret = strim(dhchap_secret);
5254
host->dhchap_key_hash = key_hash;
5355
}

0 commit comments

Comments
 (0)