Commit 6bbf5914 authored by Linus Torvalds's avatar Linus Torvalds

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
parents 0b6684ba fb7b9b02
...@@ -833,7 +833,11 @@ static ssize_t iolatency_set_limit(struct kernfs_open_file *of, char *buf, ...@@ -833,7 +833,11 @@ static ssize_t iolatency_set_limit(struct kernfs_open_file *of, char *buf,
enable = iolatency_set_min_lat_nsec(blkg, lat_val); enable = iolatency_set_min_lat_nsec(blkg, lat_val);
if (enable) { if (enable) {
WARN_ON_ONCE(!blk_get_queue(blkg->q)); if (!blk_get_queue(blkg->q)) {
ret = -ENODEV;
goto out;
}
blkg_get(blkg); blkg_get(blkg);
} }
......
...@@ -596,13 +596,13 @@ static void kyber_insert_requests(struct blk_mq_hw_ctx *hctx, ...@@ -596,13 +596,13 @@ static void kyber_insert_requests(struct blk_mq_hw_ctx *hctx,
struct list_head *head = &kcq->rq_list[sched_domain]; struct list_head *head = &kcq->rq_list[sched_domain];
spin_lock(&kcq->lock); spin_lock(&kcq->lock);
trace_block_rq_insert(rq);
if (at_head) if (at_head)
list_move(&rq->queuelist, head); list_move(&rq->queuelist, head);
else else
list_move_tail(&rq->queuelist, head); list_move_tail(&rq->queuelist, head);
sbitmap_set_bit(&khd->kcq_map[sched_domain], sbitmap_set_bit(&khd->kcq_map[sched_domain],
rq->mq_ctx->index_hw[hctx->type]); rq->mq_ctx->index_hw[hctx->type]);
trace_block_rq_insert(rq);
spin_unlock(&kcq->lock); spin_unlock(&kcq->lock);
} }
} }
......
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
/** /*
* ldm - Support for Windows Logical Disk Manager (Dynamic Disks) * ldm - Support for Windows Logical Disk Manager (Dynamic Disks)
* *
* Copyright (C) 2001,2002 Richard Russon <ldm@flatcap.org> * Copyright (C) 2001,2002 Richard Russon <ldm@flatcap.org>
......
...@@ -74,7 +74,7 @@ static bool n64cart_do_bvec(struct device *dev, struct bio_vec *bv, u32 pos) ...@@ -74,7 +74,7 @@ static bool n64cart_do_bvec(struct device *dev, struct bio_vec *bv, u32 pos)
n64cart_wait_dma(); n64cart_wait_dma();
n64cart_write_reg(PI_DRAM_REG, dma_addr + bv->bv_offset); n64cart_write_reg(PI_DRAM_REG, dma_addr);
n64cart_write_reg(PI_CART_REG, (bstart | CART_DOMAIN) & CART_MAX); n64cart_write_reg(PI_CART_REG, (bstart | CART_DOMAIN) & CART_MAX);
n64cart_write_reg(PI_WRITE_REG, bv->bv_len - 1); n64cart_write_reg(PI_WRITE_REG, bv->bv_len - 1);
......
...@@ -474,8 +474,6 @@ static void raid1_end_write_request(struct bio *bio) ...@@ -474,8 +474,6 @@ static void raid1_end_write_request(struct bio *bio)
/* /*
* When the device is faulty, it is not necessary to * When the device is faulty, it is not necessary to
* handle write error. * handle write error.
* For failfast, this is the only remaining device,
* We need to retry the write without FailFast.
*/ */
if (!test_bit(Faulty, &rdev->flags)) if (!test_bit(Faulty, &rdev->flags))
set_bit(R1BIO_WriteError, &r1_bio->state); set_bit(R1BIO_WriteError, &r1_bio->state);
......
...@@ -471,12 +471,12 @@ static void raid10_end_write_request(struct bio *bio) ...@@ -471,12 +471,12 @@ static void raid10_end_write_request(struct bio *bio)
/* /*
* When the device is faulty, it is not necessary to * When the device is faulty, it is not necessary to
* handle write error. * handle write error.
* For failfast, this is the only remaining device,
* We need to retry the write without FailFast.
*/ */
if (!test_bit(Faulty, &rdev->flags)) if (!test_bit(Faulty, &rdev->flags))
set_bit(R10BIO_WriteError, &r10_bio->state); set_bit(R10BIO_WriteError, &r10_bio->state);
else { else {
/* Fail the request */
set_bit(R10BIO_Degraded, &r10_bio->state);
r10_bio->devs[slot].bio = NULL; r10_bio->devs[slot].bio = NULL;
to_put = bio; to_put = bio;
dec_rdev = 1; dec_rdev = 1;
......
...@@ -1004,15 +1004,23 @@ static unsigned char dasd_eckd_path_access(void *conf_data, int conf_len) ...@@ -1004,15 +1004,23 @@ static unsigned char dasd_eckd_path_access(void *conf_data, int conf_len)
static void dasd_eckd_store_conf_data(struct dasd_device *device, static void dasd_eckd_store_conf_data(struct dasd_device *device,
struct dasd_conf_data *conf_data, int chp) struct dasd_conf_data *conf_data, int chp)
{ {
struct dasd_eckd_private *private = device->private;
struct channel_path_desc_fmt0 *chp_desc; struct channel_path_desc_fmt0 *chp_desc;
struct subchannel_id sch_id; struct subchannel_id sch_id;
void *cdp;
ccw_device_get_schid(device->cdev, &sch_id);
/* /*
* path handling and read_conf allocate data * path handling and read_conf allocate data
* free it before replacing the pointer * free it before replacing the pointer
* also replace the old private->conf_data pointer
* with the new one if this points to the same data
*/ */
kfree(device->path[chp].conf_data); cdp = device->path[chp].conf_data;
if (private->conf_data == cdp) {
private->conf_data = (void *)conf_data;
dasd_eckd_identify_conf_parts(private);
}
ccw_device_get_schid(device->cdev, &sch_id);
device->path[chp].conf_data = conf_data; device->path[chp].conf_data = conf_data;
device->path[chp].cssid = sch_id.cssid; device->path[chp].cssid = sch_id.cssid;
device->path[chp].ssid = sch_id.ssid; device->path[chp].ssid = sch_id.ssid;
...@@ -1020,6 +1028,7 @@ static void dasd_eckd_store_conf_data(struct dasd_device *device, ...@@ -1020,6 +1028,7 @@ static void dasd_eckd_store_conf_data(struct dasd_device *device,
if (chp_desc) if (chp_desc)
device->path[chp].chpid = chp_desc->chpid; device->path[chp].chpid = chp_desc->chpid;
kfree(chp_desc); kfree(chp_desc);
kfree(cdp);
} }
static void dasd_eckd_clear_conf_data(struct dasd_device *device) static void dasd_eckd_clear_conf_data(struct dasd_device *device)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment