Merge tag 'block-6.19-20260130' of git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux

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

+6 -8
+1
drivers/block/rnbd/rnbd-clt.c
··· 1662 /* To avoid deadlock firstly remove itself */ 1663 sysfs_remove_file_self(&dev->kobj, sysfs_self); 1664 kobject_del(&dev->kobj); 1665 } 1666 } 1667
··· 1662 /* To avoid deadlock firstly remove itself */ 1663 sysfs_remove_file_self(&dev->kobj, sysfs_self); 1664 kobject_del(&dev->kobj); 1665 + kobject_put(&dev->kobj); 1666 } 1667 } 1668
+1 -5
drivers/md/bcache/request.c
··· 1107 1108 if (bio_op(orig_bio) == REQ_OP_DISCARD && 1109 !bdev_max_discard_sectors(dc->bdev)) { 1110 bio_endio(orig_bio); 1111 return; 1112 } 1113 1114 clone_bio = bio_alloc_clone(dc->bdev, orig_bio, GFP_NOIO, 1115 &d->bio_detached); 1116 - if (!clone_bio) { 1117 - orig_bio->bi_status = BLK_STS_RESOURCE; 1118 - bio_endio(orig_bio); 1119 - return; 1120 - } 1121 1122 ddip = container_of(clone_bio, struct detached_dev_io_private, bio); 1123 /* Count on the bcache device */
··· 1107 1108 if (bio_op(orig_bio) == REQ_OP_DISCARD && 1109 !bdev_max_discard_sectors(dc->bdev)) { 1110 + bio_end_io_acct(orig_bio, start_time); 1111 bio_endio(orig_bio); 1112 return; 1113 } 1114 1115 clone_bio = bio_alloc_clone(dc->bdev, orig_bio, GFP_NOIO, 1116 &d->bio_detached); 1117 1118 ddip = container_of(clone_bio, struct detached_dev_io_private, bio); 1119 /* Count on the bcache device */
+2 -2
drivers/nvme/host/pci.c
··· 806 if (!blk_rq_dma_unmap(req, dma_dev, &iod->dma_state, iod->total_len, 807 map)) { 808 if (nvme_pci_cmd_use_sgl(&iod->cmd)) 809 - nvme_free_sgls(req, iod->descriptors[0], 810 - &iod->cmd.common.dptr.sgl, attrs); 811 else 812 nvme_free_prps(req, attrs); 813 }
··· 806 if (!blk_rq_dma_unmap(req, dma_dev, &iod->dma_state, iod->total_len, 807 map)) { 808 if (nvme_pci_cmd_use_sgl(&iod->cmd)) 809 + nvme_free_sgls(req, &iod->cmd.common.dptr.sgl, 810 + iod->descriptors[0], attrs); 811 else 812 nvme_free_prps(req, attrs); 813 }
+2 -1
drivers/nvme/target/io-cmd-bdev.c
··· 180 static void nvmet_bio_done(struct bio *bio) 181 { 182 struct nvmet_req *req = bio->bi_private; 183 184 - nvmet_req_complete(req, blk_to_nvme_status(req, bio->bi_status)); 185 nvmet_req_bio_put(req, bio); 186 } 187 188 #ifdef CONFIG_BLK_DEV_INTEGRITY
··· 180 static void nvmet_bio_done(struct bio *bio) 181 { 182 struct nvmet_req *req = bio->bi_private; 183 + blk_status_t blk_status = bio->bi_status; 184 185 nvmet_req_bio_put(req, bio); 186 + nvmet_req_complete(req, blk_to_nvme_status(req, blk_status)); 187 } 188 189 #ifdef CONFIG_BLK_DEV_INTEGRITY