summaryrefslogtreecommitdiff
path: root/sys/dev/raidframe
diff options
context:
space:
mode:
authorfvdl <fvdl@NetBSD.org>2001-01-07 18:09:01 +0000
committerfvdl <fvdl@NetBSD.org>2001-01-07 18:09:01 +0000
commite2d1c1f9260d2b660b926af81048b6d3dd126647 (patch)
tree3b66e8d284f221438a4106ec04ad40084a4ceb8e /sys/dev/raidframe
parent3947143db72a2a03d66dfd677e0d69f715460460 (diff)
Adapt all disk devices in MI directories to handle ODIOC* calls
for ports that have bumped MAXPARTITIONS (and thus define __HAVE_OLD_DISKLABEL).
Diffstat (limited to 'sys/dev/raidframe')
-rw-r--r--sys/dev/raidframe/rf_netbsdkintf.c59
1 files changed, 54 insertions, 5 deletions
diff --git a/sys/dev/raidframe/rf_netbsdkintf.c b/sys/dev/raidframe/rf_netbsdkintf.c
index 888d53e2d7e..7a71df1cffd 100644
--- a/sys/dev/raidframe/rf_netbsdkintf.c
+++ b/sys/dev/raidframe/rf_netbsdkintf.c
@@ -1,4 +1,4 @@
-/* $NetBSD: rf_netbsdkintf.c,v 1.101 2000/12/05 01:35:56 oster Exp $ */
+/* $NetBSD: rf_netbsdkintf.c,v 1.102 2001/01/07 18:09:02 fvdl Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998 The NetBSD Foundation, Inc.
* All rights reserved.
@@ -784,6 +784,9 @@ raidioctl(dev, cmd, data, flag, p)
RF_SingleComponent_t component;
RF_ProgressInfo_t progressInfo, **progressInfoPtr;
int i, j, d;
+#ifdef __HAVE_OLD_DISKLABEL
+ struct disklabel newlabel;
+#endif
if (unit >= numraid)
return (ENXIO);
@@ -797,6 +800,10 @@ raidioctl(dev, cmd, data, flag, p)
switch (cmd) {
case DIOCSDINFO:
case DIOCWDINFO:
+#ifdef __HAVE_OLD_DISKLABEL
+ case ODIOCWDINFO:
+ case ODIOCSDINFO:
+#endif
case DIOCWLABEL:
if ((flag & FWRITE) == 0)
return (EBADF);
@@ -807,6 +814,12 @@ raidioctl(dev, cmd, data, flag, p)
case DIOCGDINFO:
case DIOCSDINFO:
case DIOCWDINFO:
+#ifdef __HAVE_OLD_DISKLABEL
+ case ODIOCGDINFO:
+ case ODIOCWDINFO:
+ case ODIOCSDINFO:
+ case ODIOCGDEFLABEL:
+#endif
case DIOCGPART:
case DIOCWLABEL:
case DIOCGDEFLABEL:
@@ -1442,6 +1455,14 @@ raidioctl(dev, cmd, data, flag, p)
case DIOCGDINFO:
*(struct disklabel *) data = *(rs->sc_dkdev.dk_label);
break;
+#ifdef __HAVE_OLD_DISKLABEL
+ case ODIOCGDINFO:
+ newlabel = *(rs->sc_dkdev.dk_label);
+ if (newlabel.d_npartitions > OLDMAXPARTITIONS)
+ newlabel.d_npartitions = OLDMAXPARTITIONS;
+ memcpy(data, &newlabel, sizeof (struct olddisklabel));
+ break;
+#endif
case DIOCGPART:
((struct partinfo *) data)->disklab = rs->sc_dkdev.dk_label;
@@ -1451,15 +1472,34 @@ raidioctl(dev, cmd, data, flag, p)
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, data, sizeof (struct olddisklabel));
+ lp = &newlabel;
+ } else
+#endif
+ lp = (struct disklabel *)data;
+
if ((error = raidlock(rs)) != 0)
return (error);
rs->sc_flags |= RAIDF_LABELLING;
error = setdisklabel(rs->sc_dkdev.dk_label,
- (struct disklabel *) data, 0, rs->sc_dkdev.dk_cpulabel);
+ lp, 0, rs->sc_dkdev.dk_cpulabel);
if (error == 0) {
- if (cmd == DIOCWDINFO)
+ if (cmd == DIOCWDINFO
+#ifdef __HAVE_OLD_DISKLABEL
+ || cmd == ODIOCWDINFO
+#endif
+ )
error = writedisklabel(RAIDLABELDEV(dev),
raidstrategy, rs->sc_dkdev.dk_label,
rs->sc_dkdev.dk_cpulabel);
@@ -1471,6 +1511,7 @@ raidioctl(dev, cmd, data, flag, p)
if (error)
return (error);
break;
+ }
case DIOCWLABEL:
if (*(int *) data != 0)
@@ -1480,10 +1521,18 @@ raidioctl(dev, cmd, data, flag, p)
break;
case DIOCGDEFLABEL:
- raidgetdefaultlabel(raidPtr, rs,
- (struct disklabel *) data);
+ raidgetdefaultlabel(raidPtr, rs, (struct disklabel *) data);
break;
+#ifdef __HAVE_OLD_DISKLABEL
+ case ODIOCGDEFLABEL:
+ raidgetdefaultlabel(raidPtr, rs, &newlabel);
+ if (newlabel.d_npartitions > OLDMAXPARTITIONS)
+ newlabel.d_npartitions = OLDMAXPARTITIONS;
+ memcpy(data, &newlabel, sizeof (struct olddisklabel));
+ break;
+#endif
+
default:
retcode = ENOTTY;
}