Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

pktcdvd: Convert to bdev_open_by_dev()

Convert pktcdvd to use bdev_open_by_dev().

Acked-by: Christoph Hellwig <hch@lst.de>
Acked-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20230927093442.25915-5-jack@suse.cz
Signed-off-by: Christian Brauner <brauner@kernel.org>

authored by

Jan Kara and committed by
Christian Brauner
7ac86df8 75e27d37

+44 -36
+41 -35
drivers/block/pktcdvd.c
··· 340 340 n += sysfs_emit_at(data, n, "%s %u:%u %u:%u\n", 341 341 pd->disk->disk_name, 342 342 MAJOR(pd->pkt_dev), MINOR(pd->pkt_dev), 343 - MAJOR(pd->bdev->bd_dev), 344 - MINOR(pd->bdev->bd_dev)); 343 + MAJOR(pd->bdev_handle->bdev->bd_dev), 344 + MINOR(pd->bdev_handle->bdev->bd_dev)); 345 345 } 346 346 mutex_unlock(&ctl_mutex); 347 347 return n; ··· 437 437 char *msg; 438 438 int states[PACKET_NUM_STATES]; 439 439 440 - seq_printf(m, "Writer %s mapped to %pg:\n", pd->disk->disk_name, pd->bdev); 440 + seq_printf(m, "Writer %s mapped to %pg:\n", pd->disk->disk_name, 441 + pd->bdev_handle->bdev); 441 442 442 443 seq_printf(m, "\nSettings:\n"); 443 444 seq_printf(m, "\tpacket size:\t\t%dkB\n", pd->settings.size / 2); ··· 715 714 */ 716 715 static int pkt_generic_packet(struct pktcdvd_device *pd, struct packet_command *cgc) 717 716 { 718 - struct request_queue *q = bdev_get_queue(pd->bdev); 717 + struct request_queue *q = bdev_get_queue(pd->bdev_handle->bdev); 719 718 struct scsi_cmnd *scmd; 720 719 struct request *rq; 721 720 int ret = 0; ··· 1048 1047 continue; 1049 1048 1050 1049 bio = pkt->r_bios[f]; 1051 - bio_init(bio, pd->bdev, bio->bi_inline_vecs, 1, REQ_OP_READ); 1050 + bio_init(bio, pd->bdev_handle->bdev, bio->bi_inline_vecs, 1, 1051 + REQ_OP_READ); 1052 1052 bio->bi_iter.bi_sector = pkt->sector + f * (CD_FRAMESIZE >> 9); 1053 1053 bio->bi_end_io = pkt_end_io_read; 1054 1054 bio->bi_private = pkt; ··· 1264 1262 struct device *ddev = disk_to_dev(pd->disk); 1265 1263 int f; 1266 1264 1267 - bio_init(pkt->w_bio, pd->bdev, pkt->w_bio->bi_inline_vecs, pkt->frames, 1268 - REQ_OP_WRITE); 1265 + bio_init(pkt->w_bio, pd->bdev_handle->bdev, pkt->w_bio->bi_inline_vecs, 1266 + pkt->frames, REQ_OP_WRITE); 1269 1267 pkt->w_bio->bi_iter.bi_sector = pkt->sector; 1270 1268 pkt->w_bio->bi_end_io = pkt_end_io_packet_write; 1271 1269 pkt->w_bio->bi_private = pkt; ··· 2162 2160 int ret; 2163 2161 long lba; 2164 2162 struct request_queue *q; 2165 - struct block_device *bdev; 2163 + struct bdev_handle *bdev_handle; 2166 2164 2167 2165 /* 2168 2166 * We need to re-open the cdrom device without O_NONBLOCK to be able 2169 2167 * to read/write from/to it. It is already opened in O_NONBLOCK mode 2170 2168 * so open should not fail. 2171 2169 */ 2172 - bdev = blkdev_get_by_dev(pd->bdev->bd_dev, BLK_OPEN_READ, pd, NULL); 2173 - if (IS_ERR(bdev)) { 2174 - ret = PTR_ERR(bdev); 2170 + bdev_handle = bdev_open_by_dev(pd->bdev_handle->bdev->bd_dev, 2171 + BLK_OPEN_READ, pd, NULL); 2172 + if (IS_ERR(bdev_handle)) { 2173 + ret = PTR_ERR(bdev_handle); 2175 2174 goto out; 2176 2175 } 2176 + pd->open_bdev_handle = bdev_handle; 2177 2177 2178 2178 ret = pkt_get_last_written(pd, &lba); 2179 2179 if (ret) { ··· 2184 2180 } 2185 2181 2186 2182 set_capacity(pd->disk, lba << 2); 2187 - set_capacity_and_notify(pd->bdev->bd_disk, lba << 2); 2183 + set_capacity_and_notify(pd->bdev_handle->bdev->bd_disk, lba << 2); 2188 2184 2189 - q = bdev_get_queue(pd->bdev); 2185 + q = bdev_get_queue(pd->bdev_handle->bdev); 2190 2186 if (write) { 2191 2187 ret = pkt_open_write(pd); 2192 2188 if (ret) ··· 2218 2214 return 0; 2219 2215 2220 2216 out_putdev: 2221 - blkdev_put(bdev, pd); 2217 + bdev_release(bdev_handle); 2222 2218 out: 2223 2219 return ret; 2224 2220 } ··· 2237 2233 pkt_lock_door(pd, 0); 2238 2234 2239 2235 pkt_set_speed(pd, MAX_SPEED, MAX_SPEED); 2240 - blkdev_put(pd->bdev, pd); 2236 + bdev_release(pd->open_bdev_handle); 2237 + pd->open_bdev_handle = NULL; 2241 2238 2242 2239 pkt_shrink_pktlist(pd); 2243 2240 } ··· 2326 2321 2327 2322 static void pkt_make_request_read(struct pktcdvd_device *pd, struct bio *bio) 2328 2323 { 2329 - struct bio *cloned_bio = 2330 - bio_alloc_clone(pd->bdev, bio, GFP_NOIO, &pkt_bio_set); 2324 + struct bio *cloned_bio = bio_alloc_clone(pd->bdev_handle->bdev, bio, 2325 + GFP_NOIO, &pkt_bio_set); 2331 2326 struct packet_stacked_data *psd = mempool_alloc(&psd_pool, GFP_NOIO); 2332 2327 2333 2328 psd->pd = pd; ··· 2497 2492 { 2498 2493 struct device *ddev = disk_to_dev(pd->disk); 2499 2494 int i; 2500 - struct block_device *bdev; 2495 + struct bdev_handle *bdev_handle; 2501 2496 struct scsi_device *sdev; 2502 2497 2503 2498 if (pd->pkt_dev == dev) { ··· 2508 2503 struct pktcdvd_device *pd2 = pkt_devs[i]; 2509 2504 if (!pd2) 2510 2505 continue; 2511 - if (pd2->bdev->bd_dev == dev) { 2512 - dev_err(ddev, "%pg already setup\n", pd2->bdev); 2506 + if (pd2->bdev_handle->bdev->bd_dev == dev) { 2507 + dev_err(ddev, "%pg already setup\n", 2508 + pd2->bdev_handle->bdev); 2513 2509 return -EBUSY; 2514 2510 } 2515 2511 if (pd2->pkt_dev == dev) { ··· 2519 2513 } 2520 2514 } 2521 2515 2522 - bdev = blkdev_get_by_dev(dev, BLK_OPEN_READ | BLK_OPEN_NDELAY, NULL, 2523 - NULL); 2524 - if (IS_ERR(bdev)) 2525 - return PTR_ERR(bdev); 2526 - sdev = scsi_device_from_queue(bdev->bd_disk->queue); 2516 + bdev_handle = bdev_open_by_dev(dev, BLK_OPEN_READ | BLK_OPEN_NDELAY, 2517 + NULL, NULL); 2518 + if (IS_ERR(bdev_handle)) 2519 + return PTR_ERR(bdev_handle); 2520 + sdev = scsi_device_from_queue(bdev_handle->bdev->bd_disk->queue); 2527 2521 if (!sdev) { 2528 - blkdev_put(bdev, NULL); 2522 + bdev_release(bdev_handle); 2529 2523 return -EINVAL; 2530 2524 } 2531 2525 put_device(&sdev->sdev_gendev); ··· 2533 2527 /* This is safe, since we have a reference from open(). */ 2534 2528 __module_get(THIS_MODULE); 2535 2529 2536 - pd->bdev = bdev; 2537 - set_blocksize(bdev, CD_FRAMESIZE); 2530 + pd->bdev_handle = bdev_handle; 2531 + set_blocksize(bdev_handle->bdev, CD_FRAMESIZE); 2538 2532 2539 2533 pkt_init_queue(pd); 2540 2534 ··· 2546 2540 } 2547 2541 2548 2542 proc_create_single_data(pd->disk->disk_name, 0, pkt_proc, pkt_seq_show, pd); 2549 - dev_notice(ddev, "writer mapped to %pg\n", bdev); 2543 + dev_notice(ddev, "writer mapped to %pg\n", bdev_handle->bdev); 2550 2544 return 0; 2551 2545 2552 2546 out_mem: 2553 - blkdev_put(bdev, NULL); 2547 + bdev_release(bdev_handle); 2554 2548 /* This is safe: open() is still holding a reference. */ 2555 2549 module_put(THIS_MODULE); 2556 2550 return -ENOMEM; ··· 2605 2599 2606 2600 if (!pd) 2607 2601 return 0; 2608 - if (!pd->bdev) 2602 + if (!pd->bdev_handle) 2609 2603 return 0; 2610 - attached_disk = pd->bdev->bd_disk; 2604 + attached_disk = pd->bdev_handle->bdev->bd_disk; 2611 2605 if (!attached_disk || !attached_disk->fops->check_events) 2612 2606 return 0; 2613 2607 return attached_disk->fops->check_events(attached_disk, clearing); ··· 2692 2686 goto out_mem2; 2693 2687 2694 2688 /* inherit events of the host device */ 2695 - disk->events = pd->bdev->bd_disk->events; 2689 + disk->events = pd->bdev_handle->bdev->bd_disk->events; 2696 2690 2697 2691 ret = add_disk(disk); 2698 2692 if (ret) ··· 2757 2751 pkt_debugfs_dev_remove(pd); 2758 2752 pkt_sysfs_dev_remove(pd); 2759 2753 2760 - blkdev_put(pd->bdev, NULL); 2754 + bdev_release(pd->bdev_handle); 2761 2755 2762 2756 remove_proc_entry(pd->disk->disk_name, pkt_proc); 2763 2757 dev_notice(ddev, "writer unmapped\n"); ··· 2784 2778 2785 2779 pd = pkt_find_dev_from_minor(ctrl_cmd->dev_index); 2786 2780 if (pd) { 2787 - ctrl_cmd->dev = new_encode_dev(pd->bdev->bd_dev); 2781 + ctrl_cmd->dev = new_encode_dev(pd->bdev_handle->bdev->bd_dev); 2788 2782 ctrl_cmd->pkt_dev = new_encode_dev(pd->pkt_dev); 2789 2783 } else { 2790 2784 ctrl_cmd->dev = 0;
+3 -1
include/linux/pktcdvd.h
··· 154 154 155 155 struct pktcdvd_device 156 156 { 157 - struct block_device *bdev; /* dev attached */ 157 + struct bdev_handle *bdev_handle; /* dev attached */ 158 + /* handle acquired for bdev during pkt_open_dev() */ 159 + struct bdev_handle *open_bdev_handle; 158 160 dev_t pkt_dev; /* our dev */ 159 161 struct packet_settings settings; 160 162 struct packet_stats stats;