Commit 64569520 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

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
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -683,6 +683,10 @@ static void __blk_mq_free_request(struct request *rq)
	blk_crypto_free_request(rq);
	blk_pm_mark_last_busy(rq);
	rq->mq_hctx = NULL;

	if (rq->rq_flags & RQF_MQ_INFLIGHT)
		__blk_mq_dec_active_requests(hctx);

	if (rq->tag != BLK_MQ_NO_TAG)
		blk_mq_put_tag(hctx->tags, ctx, rq->tag);
	if (sched_tag != BLK_MQ_NO_TAG)
@@ -694,15 +698,11 @@ static void __blk_mq_free_request(struct request *rq)
void blk_mq_free_request(struct request *rq)
{
	struct request_queue *q = rq->q;
	struct blk_mq_hw_ctx *hctx = rq->mq_hctx;

	if ((rq->rq_flags & RQF_ELVPRIV) &&
	    q->elevator->type->ops.finish_request)
		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)))
		laptop_io_completion(q->disk->bdi);

+1 −0
Original line number Diff line number Diff line
@@ -2244,6 +2244,7 @@ static void null_destroy_dev(struct nullb *nullb)
	struct nullb_device *dev = nullb->dev;

	null_del_dev(nullb);
	null_free_device_storage(dev, false);
	null_free_dev(dev);
}

+2 −2
Original line number Diff line number Diff line
@@ -552,10 +552,10 @@ static int __dasd_ioctl_information(struct dasd_block *block,

	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)
		dasd_info->chanq_len++;
	spin_unlock_irqrestore(&block->queue_lock, flags);
	spin_unlock_irqrestore(get_ccwdev_lock(base->cdev), flags);
	return 0;
}