Commit 03610bd6 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull block fixes from Jens Axboe:

 - Fix for an accounting leak in bcache that's been there forever,
   and a related dead code removal

 - Revert of a fix for rnbd that went into this series, but depends
   on other changes that are staged for 7.0

 - NVMe pull request via Keith:
      - TCP target completion race condition fix (Ming)
      - DMA descriptor cleanup fix (Roger)

* tag 'block-6.19-20260130' of git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux:
  bcache: fix I/O accounting leak in detached_dev_do_request
  bcache: remove dead code in detached_dev_do_request
  nvme-pci: DMA unmap the correct regions in nvme_free_sgls
  Revert "rnbd-clt: fix refcount underflow in device unmap path"
  nvmet: fix race in nvmet_bio_done() leading to NULL pointer dereference
parents 2b54ac9e 4da7c5c3
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1662,6 +1662,7 @@ static void destroy_sysfs(struct rnbd_clt_dev *dev,
			/* To avoid deadlock firstly remove itself */
			sysfs_remove_file_self(&dev->kobj, sysfs_self);
		kobject_del(&dev->kobj);
		kobject_put(&dev->kobj);
	}
}

+1 −5
Original line number Diff line number Diff line
@@ -1107,17 +1107,13 @@ static void detached_dev_do_request(struct bcache_device *d,

	if (bio_op(orig_bio) == REQ_OP_DISCARD &&
	    !bdev_max_discard_sectors(dc->bdev)) {
		bio_end_io_acct(orig_bio, start_time);
		bio_endio(orig_bio);
		return;
	}

	clone_bio = bio_alloc_clone(dc->bdev, orig_bio, GFP_NOIO,
				    &d->bio_detached);
	if (!clone_bio) {
		orig_bio->bi_status = BLK_STS_RESOURCE;
		bio_endio(orig_bio);
		return;
	}

	ddip = container_of(clone_bio, struct detached_dev_io_private, bio);
	/* Count on the bcache device */
+2 −2
Original line number Diff line number Diff line
@@ -806,8 +806,8 @@ static void nvme_unmap_data(struct request *req)
	if (!blk_rq_dma_unmap(req, dma_dev, &iod->dma_state, iod->total_len,
			      map)) {
		if (nvme_pci_cmd_use_sgl(&iod->cmd))
			nvme_free_sgls(req, iod->descriptors[0],
				       &iod->cmd.common.dptr.sgl, attrs);
			nvme_free_sgls(req, &iod->cmd.common.dptr.sgl,
			               iod->descriptors[0], attrs);
		else
			nvme_free_prps(req, attrs);
	}
+2 −1
Original line number Diff line number Diff line
@@ -180,9 +180,10 @@ u16 blk_to_nvme_status(struct nvmet_req *req, blk_status_t blk_sts)
static void nvmet_bio_done(struct bio *bio)
{
	struct nvmet_req *req = bio->bi_private;
	blk_status_t blk_status = bio->bi_status;

	nvmet_req_complete(req, blk_to_nvme_status(req, bio->bi_status));
	nvmet_req_bio_put(req, bio);
	nvmet_req_complete(req, blk_to_nvme_status(req, blk_status));
}

#ifdef CONFIG_BLK_DEV_INTEGRITY