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

isofs: stop using ioctl_by_bdev

Instead just call the CDROM layer functionality directly, and turn the
hot mess in isofs_get_last_session into remotely readable code.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Damien Le Moal <damien.lemoal@wdc.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>

authored by

Christoph Hellwig and committed by
Jens Axboe
11aa40a0 f252fa33

+26 -28
+26 -28
fs/isofs/inode.c
··· 544 544 545 545 static unsigned int isofs_get_last_session(struct super_block *sb, s32 session) 546 546 { 547 - struct cdrom_multisession ms_info; 548 - unsigned int vol_desc_start; 549 - struct block_device *bdev = sb->s_bdev; 550 - int i; 547 + struct cdrom_device_info *cdi = disk_to_cdi(sb->s_bdev->bd_disk); 548 + unsigned int vol_desc_start = 0; 551 549 552 - vol_desc_start=0; 553 - ms_info.addr_format=CDROM_LBA; 554 550 if (session > 0) { 555 - struct cdrom_tocentry Te; 556 - Te.cdte_track=session; 557 - Te.cdte_format=CDROM_LBA; 558 - i = ioctl_by_bdev(bdev, CDROMREADTOCENTRY, (unsigned long) &Te); 559 - if (!i) { 551 + struct cdrom_tocentry te; 552 + 553 + if (!cdi) 554 + return 0; 555 + 556 + te.cdte_track = session; 557 + te.cdte_format = CDROM_LBA; 558 + if (cdrom_read_tocentry(cdi, &te) == 0) { 560 559 printk(KERN_DEBUG "ISOFS: Session %d start %d type %d\n", 561 - session, Te.cdte_addr.lba, 562 - Te.cdte_ctrl&CDROM_DATA_TRACK); 563 - if ((Te.cdte_ctrl&CDROM_DATA_TRACK) == 4) 564 - return Te.cdte_addr.lba; 560 + session, te.cdte_addr.lba, 561 + te.cdte_ctrl & CDROM_DATA_TRACK); 562 + if ((te.cdte_ctrl & CDROM_DATA_TRACK) == 4) 563 + return te.cdte_addr.lba; 565 564 } 566 565 567 566 printk(KERN_ERR "ISOFS: Invalid session number or type of track\n"); 568 567 } 569 - i = ioctl_by_bdev(bdev, CDROMMULTISESSION, (unsigned long) &ms_info); 570 - if (session > 0) 571 - printk(KERN_ERR "ISOFS: Invalid session number\n"); 572 - #if 0 573 - printk(KERN_DEBUG "isofs.inode: CDROMMULTISESSION: rc=%d\n",i); 574 - if (i==0) { 575 - printk(KERN_DEBUG "isofs.inode: XA disk: %s\n",ms_info.xa_flag?"yes":"no"); 576 - printk(KERN_DEBUG "isofs.inode: vol_desc_start = %d\n", ms_info.addr.lba); 577 - } 578 - #endif 579 - if (i==0) 568 + 569 + if (cdi) { 570 + struct cdrom_multisession ms_info; 571 + 572 + ms_info.addr_format = CDROM_LBA; 573 + if (cdrom_multisession(cdi, &ms_info) == 0) { 580 574 #if WE_OBEY_THE_WRITTEN_STANDARDS 581 - if (ms_info.xa_flag) /* necessary for a valid ms_info.addr */ 575 + /* necessary for a valid ms_info.addr */ 576 + if (ms_info.xa_flag) 582 577 #endif 583 - vol_desc_start=ms_info.addr.lba; 578 + vol_desc_start = ms_info.addr.lba; 579 + } 580 + } 581 + 584 582 return vol_desc_start; 585 583 } 586 584