diff options
| author | fvdl <fvdl@NetBSD.org> | 2001-01-07 18:09:01 +0000 |
|---|---|---|
| committer | fvdl <fvdl@NetBSD.org> | 2001-01-07 18:09:01 +0000 |
| commit | e2d1c1f9260d2b660b926af81048b6d3dd126647 (patch) | |
| tree | 3b66e8d284f221438a4106ec04ad40084a4ceb8e /sys/dev/raidframe | |
| parent | 3947143db72a2a03d66dfd677e0d69f715460460 (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.c | 59 |
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; } |
