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);