From 6daeac33038b710e4be33f7eb7c6a75e9312475e Mon Sep 17 00:00:00 2001 From: phk Date: Sun, 16 Jan 2000 09:25:34 +0000 Subject: [PATCH] Cleanup some more remaining bdev fluff. --- sys/kern/subr_diskslice.c | 88 ++++++++------------------------------- sys/sys/diskslice.h | 10 ++--- 2 files changed, 21 insertions(+), 77 deletions(-) diff --git a/sys/kern/subr_diskslice.c b/sys/kern/subr_diskslice.c index 09e1dd924be..fb39f3d635b 100644 --- a/sys/kern/subr_diskslice.c +++ b/sys/kern/subr_diskslice.c @@ -323,15 +323,7 @@ dsclose(dev, mode, ssp) sp = &ssp->dss_slices[dkslice(dev)]; mask = 1 << dkpart(dev); - switch (mode) { - case S_IFBLK: - sp->ds_bopenmask &= ~mask; - break; - case S_IFCHR: - sp->ds_copenmask &= ~mask; - break; - } - sp->ds_openmask = sp->ds_bopenmask | sp->ds_copenmask; + sp->ds_openmask &= ~mask; } void @@ -345,10 +337,8 @@ dsgone(sspp) for (slice = 0, ssp = *sspp; slice < ssp->dss_nslices; slice++) { sp = &ssp->dss_slices[slice]; #ifdef DEVFS - if (sp->ds_bdev != NULL) - devfs_remove_dev(sp->ds_bdev); - if (sp->ds_cdev != NULL) - devfs_remove_dev(sp->ds_cdev); + if (sp->ds_dev != NULL) + devfs_remove_dev(sp->ds_dev); #endif free_ds_label(ssp, slice); } @@ -473,10 +463,7 @@ dsioctl(dev, cmd, data, flags, sspp) *sspp = NULL; lp = malloc(sizeof *lp, M_DEVBUF, M_WAITOK); *lp = *ssp->dss_slices[WHOLE_DISK_SLICE].ds_label; - error = dsopen(dev, - ssp->dss_slices[WHOLE_DISK_SLICE].ds_copenmask - & (1 << RAW_PART) ? S_IFCHR : S_IFBLK, - ssp->dss_oflags, sspp, lp); + error = dsopen(dev, S_IFCHR, ssp->dss_oflags, sspp, lp); if (error != 0) { free(lp, M_DEVBUF); *sspp = ssp; @@ -489,23 +476,7 @@ dsioctl(dev, cmd, data, flags, sspp) * if anything fails. */ for (slice = 0; slice < ssp->dss_nslices; slice++) { - for (openmask = ssp->dss_slices[slice].ds_bopenmask, - part = 0; openmask; openmask >>= 1, part++) { - if (!(openmask & 1)) - continue; - error = dsopen(dkmodslice(dkmodpart(dev, part), - slice), - S_IFBLK, ssp->dss_oflags, sspp, - lp); - if (error != 0) { - /* XXX should free devfs toks. */ - free(lp, M_DEVBUF); - /* XXX should restore devfs toks. */ - *sspp = ssp; - return (EBUSY); - } - } - for (openmask = ssp->dss_slices[slice].ds_copenmask, + for (openmask = ssp->dss_slices[slice].ds_openmask, part = 0; openmask; openmask >>= 1, part++) { if (!(openmask & 1)) continue; @@ -762,14 +733,10 @@ dsopen(dev, mode, flags, sspp, lp) dev1 = dkmodslice(dkmodpart(dev, RAW_PART), slice); sname = dsname(dev, unit, slice, RAW_PART, partname); #ifdef DEVFS - if (slice != COMPATIBILITY_SLICE && sp->ds_bdev == NULL + if (slice != COMPATIBILITY_SLICE && sp->ds_dev == NULL && sp->ds_size != 0) { mynor = minor(dev1); - sp->ds_bdev = - devfs_add_devswf(devsw(dev1), mynor, DV_BLK, - UID_ROOT, GID_OPERATOR, 0640, - "%s", sname); - sp->ds_cdev = + sp->ds_dev = devfs_add_devswf(devsw(dev1), mynor, DV_CHR, UID_ROOT, GID_OPERATOR, 0640, "r%s", sname); @@ -816,15 +783,7 @@ dsopen(dev, mode, flags, sspp, lp) && (sp->ds_label == NULL || part >= sp->ds_label->d_npartitions)) return (EINVAL); /* XXX needs translation */ mask = 1 << part; - switch (mode) { - case S_IFBLK: - sp->ds_bopenmask |= mask; - break; - case S_IFCHR: - sp->ds_copenmask |= mask; - break; - } - sp->ds_openmask = sp->ds_bopenmask | sp->ds_copenmask; + sp->ds_openmask |= mask; return (0); } @@ -842,11 +801,11 @@ dssize(dev, sspp) part = dkpart(dev); ssp = *sspp; if (ssp == NULL || slice >= ssp->dss_nslices - || !(ssp->dss_slices[slice].ds_bopenmask & (1 << part))) { - if (devsw(dev)->d_open(dev, FREAD, S_IFBLK, + || !(ssp->dss_slices[slice].ds_openmask & (1 << part))) { + if (devsw(dev)->d_open(dev, FREAD, S_IFCHR, (struct proc *)NULL) != 0) return (-1); - devsw(dev)->d_close(dev, FREAD, S_IFBLK, (struct proc *)NULL); + devsw(dev)->d_close(dev, FREAD, S_IFCHR, (struct proc *)NULL); ssp = *sspp; } lp = ssp->dss_slices[slice].ds_label; @@ -893,13 +852,9 @@ free_ds_labeldevs(ssp, slice) if (lp == NULL) return; for (part = 0; part < lp->d_npartitions; part++) { - if (sp->ds_bdevs[part] != NULL) { - devfs_remove_dev(sp->ds_bdevs[part]); - sp->ds_bdevs[part] = NULL; - } - if (sp->ds_cdevs[part] != NULL) { - devfs_remove_dev(sp->ds_cdevs[part]); - sp->ds_cdevs[part] = NULL; + if (sp->ds_devs[part] != NULL) { + devfs_remove_dev(sp->ds_devs[part]); + sp->ds_devs[part] = NULL; } } } @@ -1070,20 +1025,13 @@ set_ds_labeldevs_unaliased(dev, ssp) if (pp->p_size == 0) continue; sname = dsname(dev, dkunit(dev), slice, part, partname); - if (part == RAW_PART && sp->ds_bdev != NULL) { - sp->ds_bdevs[part] = - devfs_makelink(sp->ds_bdev, - "%s%s", sname, partname); - sp->ds_cdevs[part] = - devfs_makelink(sp->ds_cdev, + if (part == RAW_PART && sp->ds_dev != NULL) { + sp->ds_devs[part] = + devfs_makelink(sp->ds_dev, "r%s%s", sname, partname); } else { mynor = minor(dkmodpart(dev, part)); - sp->ds_bdevs[part] = - devfs_add_devswf(devsw(dev), mynor, DV_BLK, - UID_ROOT, GID_OPERATOR, 0640, - "%s%s", sname, partname); - sp->ds_cdevs[part] = + sp->ds_devs[part] = devfs_add_devswf(devsw(dev), mynor, DV_CHR, UID_ROOT, GID_OPERATOR, 0640, "r%s%s", sname, partname); diff --git a/sys/sys/diskslice.h b/sys/sys/diskslice.h index 8efb1a3238a..00318576140 100644 --- a/sys/sys/diskslice.h +++ b/sys/sys/diskslice.h @@ -50,8 +50,7 @@ struct diskslice { u_char ds_name[16]; /* slice name */ #endif struct disklabel *ds_label; /* BSD label, if any */ - void *ds_bdev; /* devfs token for whole slice */ - void *ds_cdev; /* devfs token for raw whole slice */ + void *ds_dev; /* devfs token for raw whole slice */ #ifdef MAXPARTITIONS /* XXX don't depend on disklabel.h */ #if MAXPARTITIONS != 8 /* but check consistency if possible */ #error "inconsistent MAXPARTITIONS" @@ -59,11 +58,8 @@ struct diskslice { #else #define MAXPARTITIONS 8 #endif - void *ds_bdevs[MAXPARTITIONS]; /* XXX s.b. in label */ - void *ds_cdevs[MAXPARTITIONS]; /* XXX s.b. in label */ - u_char ds_bopenmask; /* bdevs open */ - u_char ds_copenmask; /* cdevs open */ - u_char ds_openmask; /* [bc]devs open */ + void *ds_devs[MAXPARTITIONS]; /* XXX s.b. in label */ + u_char ds_openmask; /* devs open */ u_char ds_wlabel; /* nonzero if label is writable */ }; -- 2.45.2