Module Name: src Committed By: mlelstv Date: Sat Feb 8 10:49:45 UTC 2025
Modified Files: src/sys/kern: subr_disk_mbr.c Log Message: Handle reading larger sectors (including 2k CD-ROM blocks). Fall back to scan for ISO9660 sessions when MMC code fails. disklabel now reports ISO/UDF partitions again for cd(4). To generate a diff of this commit: cvs rdiff -u -r1.58 -r1.59 src/sys/kern/subr_disk_mbr.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/subr_disk_mbr.c diff -u src/sys/kern/subr_disk_mbr.c:1.58 src/sys/kern/subr_disk_mbr.c:1.59 --- src/sys/kern/subr_disk_mbr.c:1.58 Mon Apr 3 18:03:24 2023 +++ src/sys/kern/subr_disk_mbr.c Sat Feb 8 10:49:45 2025 @@ -1,4 +1,4 @@ -/* $NetBSD: subr_disk_mbr.c,v 1.58 2023/04/03 18:03:24 gutteridge Exp $ */ +/* $NetBSD: subr_disk_mbr.c,v 1.59 2025/02/08 10:49:45 mlelstv Exp $ */ /* * Copyright (c) 1982, 1986, 1988 Regents of the University of California. @@ -54,7 +54,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: subr_disk_mbr.c,v 1.58 2023/04/03 18:03:24 gutteridge Exp $"); +__KERNEL_RCSID(0, "$NetBSD: subr_disk_mbr.c,v 1.59 2025/02/08 10:49:45 mlelstv Exp $"); #ifdef _KERNEL_OPT #include "opt_mbr.h" @@ -258,10 +258,9 @@ scan_iso_vrs_session(mbr_args_t *a, uint struct vrs_desc *vrsd; uint64_t vrs; int sector_size; - int blks, inc; + int inc; sector_size = a->lp->d_secsize; - blks = sector_size / DEV_BSIZE; inc = MAX(1, 2048 / sector_size); /* by definition */ @@ -269,7 +268,7 @@ scan_iso_vrs_session(mbr_args_t *a, uint + first_sector; /* read first vrs sector */ - if (read_sector(a, vrs * blks, 1)) + if (read_sector(a, vrs, 1)) return; /* skip all CD001 records */ @@ -280,7 +279,7 @@ scan_iso_vrs_session(mbr_args_t *a, uint *is_iso9660 = first_sector; vrs += inc; - if (read_sector(a, vrs * blks, 1)) + if (read_sector(a, vrs, 1)) return; } @@ -292,7 +291,7 @@ scan_iso_vrs_session(mbr_args_t *a, uint /* read successor */ vrs += inc; - if (read_sector(a, vrs * blks, 1)) + if (read_sector(a, vrs, 1)) return; /* check for NSR[23] */ @@ -328,7 +327,7 @@ scan_iso_vrs(mbr_args_t *a) dev = a->bp->b_dev; error = bdev_ioctl(dev, MMCGETDISCINFO, &di, FKIOCTL, curlwp); if (error) - return SCAN_CONTINUE; + goto notmmc; /* go through all (data) tracks */ sessionnr = -1; @@ -339,7 +338,7 @@ scan_iso_vrs(mbr_args_t *a) error = bdev_ioctl(dev, MMCGETTRACKINFO, &ti, FKIOCTL, curlwp); if (error) - return SCAN_CONTINUE; + goto notmmc; new_session = (ti.sessionnr != sessionnr); sessionnr = ti.sessionnr; if (new_session) { @@ -353,6 +352,7 @@ scan_iso_vrs(mbr_args_t *a) } } } else { +notmmc: /* try start of disc */ sector = 0; scan_iso_vrs_session(a, sector, &is_iso9660, &is_udf);