Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/netbsd-1-5]: src/sys/dev/scsipi Pull up revisions 1.167-1.168 (requested...
details: https://anonhg.NetBSD.org/src/rev/6a20805c64c1
branches: netbsd-1-5
changeset: 491535:6a20805c64c1
user: he <he%NetBSD.org@localhost>
date: Tue May 01 12:27:41 2001 +0000
description:
Pull up revisions 1.167-1.168 (requested by fvdl):
Increase the number of BSD disklabel partitions on i386 to 16.
diffstat:
sys/dev/scsipi/sd.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 48 insertions(+), 4 deletions(-)
diffs (110 lines):
diff -r 0a5635716d97 -r 6a20805c64c1 sys/dev/scsipi/sd.c
--- a/sys/dev/scsipi/sd.c Tue May 01 12:27:37 2001 +0000
+++ b/sys/dev/scsipi/sd.c Tue May 01 12:27:41 2001 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: sd.c,v 1.163.2.1 2001/03/11 22:25:30 he Exp $ */
+/* $NetBSD: sd.c,v 1.163.2.2 2001/05/01 12:27:41 he Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -821,7 +821,9 @@
* ancient device gets confused by length == 0. A length of 0
* in a 10-byte read/write actually means 0 blocks.
*/
- if (sd->flags & SDF_ANCIENT) {
+ if ((sd->flags & SDF_ANCIENT) &&
+ ((sd->sc_link->flags & (SDEV_REMOVABLE | SDEV_MEDIA_LOADED)) !=
+ SDEV_REMOVABLE)) {
max = sd->sc_dk.dk_label->d_secsize * 0xff;
if (bp->b_bcount > max)
@@ -866,6 +868,9 @@
struct sd_softc *sd = sd_cd.cd_devs[SDUNIT(dev)];
int part = SDPART(dev);
int error;
+#ifdef __HAVE_OLD_DISKLABEL
+ struct disklabel newlabel;
+#endif
SC_DEBUG(sd->sc_link, SDEV_DB2, ("sdioctl 0x%lx ", cmd));
@@ -903,6 +908,15 @@
*(struct disklabel *)addr = *(sd->sc_dk.dk_label);
return (0);
+#ifdef __HAVE_OLD_DISKLABEL
+ case ODIOCGDINFO:
+ newlabel = *(sd->sc_dk.dk_label);
+ if (newlabel.d_npartitions > OLDMAXPARTITIONS)
+ newlabel.d_npartitions = OLDMAXPARTITIONS;
+ memcpy(addr, &newlabel, sizeof (struct olddisklabel));
+ return (0);
+#endif
+
case DIOCGPART:
((struct partinfo *)addr)->disklab = sd->sc_dk.dk_label;
((struct partinfo *)addr)->part =
@@ -911,6 +925,22 @@
case DIOCWDINFO:
case DIOCSDINFO:
+#ifdef __HAVE_OLD_DISKLABEL
+ case ODIOCWDINFO:
+ case ODIOCSDINFO:
+#endif
+ {
+ struct disklabel *lp;
+
+#ifdef __HAVE_OLD_DISKLABEL
+ if (cmd == ODIOCSDINFO || cmd == ODIOCWDINFO) {
+ memset(&newlabel, 0, sizeof newlabel);
+ memcpy(&newlabel, addr, sizeof (struct olddisklabel));
+ lp = &newlabel;
+ } else
+#endif
+ lp = (struct disklabel *)addr;
+
if ((flag & FWRITE) == 0)
return (EBADF);
@@ -919,10 +949,14 @@
sd->flags |= SDF_LABELLING;
error = setdisklabel(sd->sc_dk.dk_label,
- (struct disklabel *)addr, /*sd->sc_dk.dk_openmask : */0,
+ lp, /*sd->sc_dk.dk_openmask : */0,
sd->sc_dk.dk_cpulabel);
if (error == 0) {
- if (cmd == DIOCWDINFO)
+ if (cmd == DIOCWDINFO
+#ifdef __HAVE_OLD_DISKLABEL
+ || cmd == ODIOCWDINFO
+#endif
+ )
error = writedisklabel(SDLABELDEV(dev),
sdstrategy, sd->sc_dk.dk_label,
sd->sc_dk.dk_cpulabel);
@@ -931,6 +965,7 @@
sd->flags &= ~SDF_LABELLING;
sdunlock(sd);
return (error);
+ }
case DIOCKLABEL:
if (*(int *)addr)
@@ -980,6 +1015,15 @@
sdgetdefaultlabel(sd, (struct disklabel *)addr);
return (0);
+#ifdef __HAVE_OLD_DISKLABEL
+ case ODIOCGDEFLABEL:
+ sdgetdefaultlabel(sd, &newlabel);
+ if (newlabel.d_npartitions > OLDMAXPARTITIONS)
+ newlabel.d_npartitions = OLDMAXPARTITIONS;
+ memcpy(addr, &newlabel, sizeof (struct olddisklabel));
+ return (0);
+#endif
+
default:
if (part != RAW_PART)
return (ENOTTY);
Home |
Main Index |
Thread Index |
Old Index