Commit 64569520 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'block-6.4-2023-06-09' of git://git.kernel.dk/linux

Pull block fixes from Jens Axboe:

 - Fix an issue with the hardware queue nr_active, causing it to become
   imbalanced (Tian)

 - Fix an issue with null_blk not releasing pages if configured as
   memory backed (Nitesh)

 - Fix a locking issue in dasd (Jan)

* tag 'block-6.4-2023-06-09' of git://git.kernel.dk/linux:
  s390/dasd: Use correct lock while counting channel queue length
  null_blk: Fix: memory release when memory_backed=1
  blk-mq: fix blk_mq_hw_ctx active request accounting
parents dbfa18c5 ccc45cb4
...@@ -683,6 +683,10 @@ static void __blk_mq_free_request(struct request *rq) ...@@ -683,6 +683,10 @@ static void __blk_mq_free_request(struct request *rq)
blk_crypto_free_request(rq); blk_crypto_free_request(rq);
blk_pm_mark_last_busy(rq); blk_pm_mark_last_busy(rq);
rq->mq_hctx = NULL; rq->mq_hctx = NULL;
if (rq->rq_flags & RQF_MQ_INFLIGHT)
__blk_mq_dec_active_requests(hctx);
if (rq->tag != BLK_MQ_NO_TAG) if (rq->tag != BLK_MQ_NO_TAG)
blk_mq_put_tag(hctx->tags, ctx, rq->tag); blk_mq_put_tag(hctx->tags, ctx, rq->tag);
if (sched_tag != BLK_MQ_NO_TAG) if (sched_tag != BLK_MQ_NO_TAG)
...@@ -694,15 +698,11 @@ static void __blk_mq_free_request(struct request *rq) ...@@ -694,15 +698,11 @@ static void __blk_mq_free_request(struct request *rq)
void blk_mq_free_request(struct request *rq) void blk_mq_free_request(struct request *rq)
{ {
struct request_queue *q = rq->q; struct request_queue *q = rq->q;
struct blk_mq_hw_ctx *hctx = rq->mq_hctx;
if ((rq->rq_flags & RQF_ELVPRIV) && if ((rq->rq_flags & RQF_ELVPRIV) &&
q->elevator->type->ops.finish_request) q->elevator->type->ops.finish_request)
q->elevator->type->ops.finish_request(rq); q->elevator->type->ops.finish_request(rq);
if (rq->rq_flags & RQF_MQ_INFLIGHT)
__blk_mq_dec_active_requests(hctx);
if (unlikely(laptop_mode && !blk_rq_is_passthrough(rq))) if (unlikely(laptop_mode && !blk_rq_is_passthrough(rq)))
laptop_io_completion(q->disk->bdi); laptop_io_completion(q->disk->bdi);
......
...@@ -2244,6 +2244,7 @@ static void null_destroy_dev(struct nullb *nullb) ...@@ -2244,6 +2244,7 @@ static void null_destroy_dev(struct nullb *nullb)
struct nullb_device *dev = nullb->dev; struct nullb_device *dev = nullb->dev;
null_del_dev(nullb); null_del_dev(nullb);
null_free_device_storage(dev, false);
null_free_dev(dev); null_free_dev(dev);
} }
......
...@@ -552,10 +552,10 @@ static int __dasd_ioctl_information(struct dasd_block *block, ...@@ -552,10 +552,10 @@ static int __dasd_ioctl_information(struct dasd_block *block,
memcpy(dasd_info->type, base->discipline->name, 4); memcpy(dasd_info->type, base->discipline->name, 4);
spin_lock_irqsave(&block->queue_lock, flags); spin_lock_irqsave(get_ccwdev_lock(base->cdev), flags);
list_for_each(l, &base->ccw_queue) list_for_each(l, &base->ccw_queue)
dasd_info->chanq_len++; dasd_info->chanq_len++;
spin_unlock_irqrestore(&block->queue_lock, flags); spin_unlock_irqrestore(get_ccwdev_lock(base->cdev), flags);
return 0; return 0;
} }
......
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