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.14-2021-08-07' of git://git.kernel.dk/linux-block

Pull block fixes from Jens Axboe:
"A few minor fixes:

- Fix ldm kernel-doc warning (Bart)

- Fix adding offset twice for DMA address in n64cart (Christoph)

- Fix use-after-free in dasd path handling (Stefan)

- Order kyber insert trace correctly (Vincent)

- raid1 errored write handling fix (Wei)

- Fix blk-iolatency queue get failure handling (Yu)"

* tag 'block-5.14-2021-08-07' of git://git.kernel.dk/linux-block:
kyber: make trace_block_rq call consistent with documentation
block/partitions/ldm.c: Fix a kernel-doc warning
blk-iolatency: error out if blk_get_queue() failed in iolatency_set_limit()
n64cart: fix the dma address in n64cart_do_bvec
s390/dasd: fix use after free in dasd path handling
md/raid10: properly indicate failure when ending a failed write request

+21 -10
+5 -1
block/blk-iolatency.c
··· 833 833 834 834 enable = iolatency_set_min_lat_nsec(blkg, lat_val); 835 835 if (enable) { 836 - WARN_ON_ONCE(!blk_get_queue(blkg->q)); 836 + if (!blk_get_queue(blkg->q)) { 837 + ret = -ENODEV; 838 + goto out; 839 + } 840 + 837 841 blkg_get(blkg); 838 842 } 839 843
+1 -1
block/kyber-iosched.c
··· 596 596 struct list_head *head = &kcq->rq_list[sched_domain]; 597 597 598 598 spin_lock(&kcq->lock); 599 + trace_block_rq_insert(rq); 599 600 if (at_head) 600 601 list_move(&rq->queuelist, head); 601 602 else 602 603 list_move_tail(&rq->queuelist, head); 603 604 sbitmap_set_bit(&khd->kcq_map[sched_domain], 604 605 rq->mq_ctx->index_hw[hctx->type]); 605 - trace_block_rq_insert(rq); 606 606 spin_unlock(&kcq->lock); 607 607 } 608 608 }
+1 -1
block/partitions/ldm.c
··· 1 1 // SPDX-License-Identifier: GPL-2.0-or-later 2 - /** 2 + /* 3 3 * ldm - Support for Windows Logical Disk Manager (Dynamic Disks) 4 4 * 5 5 * Copyright (C) 2001,2002 Richard Russon <ldm@flatcap.org>
+1 -1
drivers/block/n64cart.c
··· 74 74 75 75 n64cart_wait_dma(); 76 76 77 - n64cart_write_reg(PI_DRAM_REG, dma_addr + bv->bv_offset); 77 + n64cart_write_reg(PI_DRAM_REG, dma_addr); 78 78 n64cart_write_reg(PI_CART_REG, (bstart | CART_DOMAIN) & CART_MAX); 79 79 n64cart_write_reg(PI_WRITE_REG, bv->bv_len - 1); 80 80
-2
drivers/md/raid1.c
··· 474 474 /* 475 475 * When the device is faulty, it is not necessary to 476 476 * handle write error. 477 - * For failfast, this is the only remaining device, 478 - * We need to retry the write without FailFast. 479 477 */ 480 478 if (!test_bit(Faulty, &rdev->flags)) 481 479 set_bit(R1BIO_WriteError, &r1_bio->state);
+2 -2
drivers/md/raid10.c
··· 471 471 /* 472 472 * When the device is faulty, it is not necessary to 473 473 * handle write error. 474 - * For failfast, this is the only remaining device, 475 - * We need to retry the write without FailFast. 476 474 */ 477 475 if (!test_bit(Faulty, &rdev->flags)) 478 476 set_bit(R10BIO_WriteError, &r10_bio->state); 479 477 else { 478 + /* Fail the request */ 479 + set_bit(R10BIO_Degraded, &r10_bio->state); 480 480 r10_bio->devs[slot].bio = NULL; 481 481 to_put = bio; 482 482 dec_rdev = 1;
+11 -2
drivers/s390/block/dasd_eckd.c
··· 1004 1004 static void dasd_eckd_store_conf_data(struct dasd_device *device, 1005 1005 struct dasd_conf_data *conf_data, int chp) 1006 1006 { 1007 + struct dasd_eckd_private *private = device->private; 1007 1008 struct channel_path_desc_fmt0 *chp_desc; 1008 1009 struct subchannel_id sch_id; 1010 + void *cdp; 1009 1011 1010 - ccw_device_get_schid(device->cdev, &sch_id); 1011 1012 /* 1012 1013 * path handling and read_conf allocate data 1013 1014 * free it before replacing the pointer 1015 + * also replace the old private->conf_data pointer 1016 + * with the new one if this points to the same data 1014 1017 */ 1015 - kfree(device->path[chp].conf_data); 1018 + cdp = device->path[chp].conf_data; 1019 + if (private->conf_data == cdp) { 1020 + private->conf_data = (void *)conf_data; 1021 + dasd_eckd_identify_conf_parts(private); 1022 + } 1023 + ccw_device_get_schid(device->cdev, &sch_id); 1016 1024 device->path[chp].conf_data = conf_data; 1017 1025 device->path[chp].cssid = sch_id.cssid; 1018 1026 device->path[chp].ssid = sch_id.ssid; ··· 1028 1020 if (chp_desc) 1029 1021 device->path[chp].chpid = chp_desc->chpid; 1030 1022 kfree(chp_desc); 1023 + kfree(cdp); 1031 1024 } 1032 1025 1033 1026 static void dasd_eckd_clear_conf_data(struct dasd_device *device)