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

hfsplus: stop using ioctl_by_bdev

Instead just call the CDROM layer functionality directly.

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

authored by

Christoph Hellwig and committed by
Jens Axboe
f252fa33 eaf8e3e4

+18 -15
+18 -15
fs/hfsplus/wrapper.c
··· 127 127 static int hfsplus_get_last_session(struct super_block *sb, 128 128 sector_t *start, sector_t *size) 129 129 { 130 - struct cdrom_multisession ms_info; 131 - struct cdrom_tocentry te; 132 - int res; 130 + struct cdrom_device_info *cdi = disk_to_cdi(sb->s_bdev->bd_disk); 133 131 134 132 /* default values */ 135 133 *start = 0; 136 134 *size = i_size_read(sb->s_bdev->bd_inode) >> 9; 137 135 138 136 if (HFSPLUS_SB(sb)->session >= 0) { 137 + struct cdrom_tocentry te; 138 + 139 + if (!cdi) 140 + return -EINVAL; 141 + 139 142 te.cdte_track = HFSPLUS_SB(sb)->session; 140 143 te.cdte_format = CDROM_LBA; 141 - res = ioctl_by_bdev(sb->s_bdev, 142 - CDROMREADTOCENTRY, (unsigned long)&te); 143 - if (!res && (te.cdte_ctrl & CDROM_DATA_TRACK) == 4) { 144 - *start = (sector_t)te.cdte_addr.lba << 2; 145 - return 0; 144 + if (cdrom_read_tocentry(cdi, &te) || 145 + (te.cdte_ctrl & CDROM_DATA_TRACK) != 4) { 146 + pr_err("invalid session number or type of track\n"); 147 + return -EINVAL; 146 148 } 147 - pr_err("invalid session number or type of track\n"); 148 - return -EINVAL; 149 + *start = (sector_t)te.cdte_addr.lba << 2; 150 + } else if (cdi) { 151 + struct cdrom_multisession ms_info; 152 + 153 + ms_info.addr_format = CDROM_LBA; 154 + if (cdrom_multisession(cdi, &ms_info) == 0 && ms_info.xa_flag) 155 + *start = (sector_t)ms_info.addr.lba << 2; 149 156 } 150 - ms_info.addr_format = CDROM_LBA; 151 - res = ioctl_by_bdev(sb->s_bdev, CDROMMULTISESSION, 152 - (unsigned long)&ms_info); 153 - if (!res && ms_info.xa_flag) 154 - *start = (sector_t)ms_info.addr.lba << 2; 157 + 155 158 return 0; 156 159 } 157 160