NO_GEOM cleanup:
Retire the "dev_t" centric version of the disk mini-layer. Remove now unneeded linkage field in dev_t and struct disk.
This commit is contained in:
parent
3e7b60db4b
commit
98bbd7aa59
sys
@ -96,7 +96,6 @@ static int
|
|||||||
g_disk_access(struct g_provider *pp, int r, int w, int e)
|
g_disk_access(struct g_provider *pp, int r, int w, int e)
|
||||||
{
|
{
|
||||||
struct disk *dp;
|
struct disk *dp;
|
||||||
dev_t dev;
|
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
g_trace(G_T_ACCESS, "g_disk_access(%s, %d, %d, %d)",
|
g_trace(G_T_ACCESS, "g_disk_access(%s, %d, %d, %d)",
|
||||||
@ -106,15 +105,11 @@ g_disk_access(struct g_provider *pp, int r, int w, int e)
|
|||||||
w += pp->acw;
|
w += pp->acw;
|
||||||
e += pp->ace;
|
e += pp->ace;
|
||||||
dp = pp->geom->softc;
|
dp = pp->geom->softc;
|
||||||
dev = dp->d_dev;
|
|
||||||
error = 0;
|
error = 0;
|
||||||
if ((pp->acr + pp->acw + pp->ace) == 0 && (r + w + e) > 0) {
|
if ((pp->acr + pp->acw + pp->ace) == 0 && (r + w + e) > 0) {
|
||||||
if (dp->d_open != NULL || dp->d_copen != NULL) {
|
if (dp->d_open != NULL) {
|
||||||
g_disk_lock_giant(dp);
|
g_disk_lock_giant(dp);
|
||||||
if (dp->d_open != NULL)
|
error = dp->d_open(dp);
|
||||||
error = dp->d_open(dp);
|
|
||||||
else
|
|
||||||
error = dp->d_copen(dev, FREAD|FWRITE, 0, NULL);
|
|
||||||
if (error != 0)
|
if (error != 0)
|
||||||
printf("Opened disk %s -> %d\n",
|
printf("Opened disk %s -> %d\n",
|
||||||
pp->name, error);
|
pp->name, error);
|
||||||
@ -123,20 +118,15 @@ g_disk_access(struct g_provider *pp, int r, int w, int e)
|
|||||||
pp->mediasize = dp->d_mediasize;
|
pp->mediasize = dp->d_mediasize;
|
||||||
pp->sectorsize = dp->d_sectorsize;
|
pp->sectorsize = dp->d_sectorsize;
|
||||||
dp->d_flags |= DISKFLAG_OPEN;
|
dp->d_flags |= DISKFLAG_OPEN;
|
||||||
if (dp->d_maxsize == 0 && dp->d_dev->si_iosize_max != 0)
|
|
||||||
dp->d_maxsize = dp->d_dev->si_iosize_max;
|
|
||||||
if (dp->d_maxsize == 0) {
|
if (dp->d_maxsize == 0) {
|
||||||
printf("WARNING: Disk drive %s%d has no d_maxsize\n",
|
printf("WARNING: Disk drive %s%d has no d_maxsize\n",
|
||||||
dp->d_name, dp->d_unit);
|
dp->d_name, dp->d_unit);
|
||||||
dp->d_maxsize = DFLTPHYS;
|
dp->d_maxsize = DFLTPHYS;
|
||||||
}
|
}
|
||||||
} else if ((pp->acr + pp->acw + pp->ace) > 0 && (r + w + e) == 0) {
|
} else if ((pp->acr + pp->acw + pp->ace) > 0 && (r + w + e) == 0) {
|
||||||
if (dp->d_close != NULL || dp->d_cclose != NULL) {
|
if (dp->d_close != NULL) {
|
||||||
g_disk_lock_giant(dp);
|
g_disk_lock_giant(dp);
|
||||||
if (dp->d_close != NULL)
|
error = dp->d_close(dp);
|
||||||
error = dp->d_close(dp);
|
|
||||||
else
|
|
||||||
error = dp->d_cclose(dev, FREAD|FWRITE, 0, NULL);
|
|
||||||
if (error != 0)
|
if (error != 0)
|
||||||
printf("Closed disk %s -> %d\n",
|
printf("Closed disk %s -> %d\n",
|
||||||
pp->name, error);
|
pp->name, error);
|
||||||
@ -184,14 +174,12 @@ static void
|
|||||||
g_disk_start(struct bio *bp)
|
g_disk_start(struct bio *bp)
|
||||||
{
|
{
|
||||||
struct bio *bp2, *bp3;
|
struct bio *bp2, *bp3;
|
||||||
dev_t dev;
|
|
||||||
struct disk *dp;
|
struct disk *dp;
|
||||||
struct g_ioctl *gio;
|
struct g_ioctl *gio;
|
||||||
int error;
|
int error;
|
||||||
off_t off;
|
off_t off;
|
||||||
|
|
||||||
dp = bp->bio_to->geom->softc;
|
dp = bp->bio_to->geom->softc;
|
||||||
dev = dp->d_dev;
|
|
||||||
error = EJUSTRETURN;
|
error = EJUSTRETURN;
|
||||||
switch(bp->bio_cmd) {
|
switch(bp->bio_cmd) {
|
||||||
case BIO_DELETE:
|
case BIO_DELETE:
|
||||||
@ -232,7 +220,6 @@ g_disk_start(struct bio *bp)
|
|||||||
bp2->bio_blkno = bp2->bio_offset >> DEV_BSHIFT;
|
bp2->bio_blkno = bp2->bio_offset >> DEV_BSHIFT;
|
||||||
bp2->bio_pblkno = bp2->bio_offset / dp->d_sectorsize;
|
bp2->bio_pblkno = bp2->bio_offset / dp->d_sectorsize;
|
||||||
bp2->bio_bcount = bp2->bio_length;
|
bp2->bio_bcount = bp2->bio_length;
|
||||||
bp2->bio_dev = dev;
|
|
||||||
bp2->bio_disk = dp;
|
bp2->bio_disk = dp;
|
||||||
g_disk_lock_giant(dp);
|
g_disk_lock_giant(dp);
|
||||||
dp->d_strategy(bp2);
|
dp->d_strategy(bp2);
|
||||||
@ -250,30 +237,18 @@ g_disk_start(struct bio *bp)
|
|||||||
break;
|
break;
|
||||||
else if (!strcmp(bp->bio_attribute, "GEOM::kerneldump"))
|
else if (!strcmp(bp->bio_attribute, "GEOM::kerneldump"))
|
||||||
g_disk_kerneldump(bp, dp);
|
g_disk_kerneldump(bp, dp);
|
||||||
else if ((dp->d_ioctl != NULL || dp->d_cioctl != NULL) &&
|
else if ((dp->d_ioctl != NULL) &&
|
||||||
!strcmp(bp->bio_attribute, "GEOM::ioctl") &&
|
!strcmp(bp->bio_attribute, "GEOM::ioctl") &&
|
||||||
bp->bio_length == sizeof *gio) {
|
bp->bio_length == sizeof *gio) {
|
||||||
gio = (struct g_ioctl *)bp->bio_data;
|
gio = (struct g_ioctl *)bp->bio_data;
|
||||||
if (dp->d_ioctl != NULL) {
|
gio->dev = dp;
|
||||||
gio->func = (d_ioctl_t *)(dp->d_ioctl);
|
gio->func = (d_ioctl_t *)(dp->d_ioctl);
|
||||||
gio->dev = dp;
|
|
||||||
} else {
|
|
||||||
gio->func = dp->d_cioctl;
|
|
||||||
gio->dev = dp->d_dev;
|
|
||||||
}
|
|
||||||
error = EDIRIOCTL;
|
error = EDIRIOCTL;
|
||||||
} else
|
} else
|
||||||
error = ENOIOCTL;
|
error = ENOIOCTL;
|
||||||
break;
|
break;
|
||||||
case BIO_SETATTR:
|
case BIO_SETATTR:
|
||||||
if (!strcmp(bp->bio_attribute, "GEOM::ioctl") &&
|
error = ENOIOCTL;
|
||||||
bp->bio_length == sizeof *gio) {
|
|
||||||
gio = (struct g_ioctl *)bp->bio_data;
|
|
||||||
gio->func = devsw(dp->d_dev)->d_ioctl;
|
|
||||||
gio->dev = dp->d_dev;
|
|
||||||
error = EDIRIOCTL;
|
|
||||||
} else
|
|
||||||
error = ENOIOCTL;
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
error = EOPNOTSUPP;
|
error = EOPNOTSUPP;
|
||||||
@ -332,35 +307,17 @@ g_disk_create(void *arg)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
dev_t
|
void
|
||||||
disk_create(int unit, struct disk *dp, int flags, struct cdevsw *cdevsw, void * unused __unused)
|
disk_create(int unit, struct disk *dp, int flags, void *unused __unused, void * unused2 __unused)
|
||||||
{
|
{
|
||||||
dev_t dev;
|
|
||||||
|
|
||||||
dev = g_malloc(sizeof *dev, M_WAITOK | M_ZERO);
|
|
||||||
dp->d_unit = unit;
|
dp->d_unit = unit;
|
||||||
dp->d_dev = dev;
|
|
||||||
dp->d_flags = flags;
|
dp->d_flags = flags;
|
||||||
dp->d_devsw = cdevsw;
|
|
||||||
dev->si_devsw = cdevsw;
|
|
||||||
if (cdevsw != NULL) {
|
|
||||||
dp->d_copen = cdevsw->d_open;
|
|
||||||
dp->d_cclose = cdevsw->d_close;
|
|
||||||
dp->d_cioctl = cdevsw->d_ioctl;
|
|
||||||
dp->d_strategy = cdevsw->d_strategy;
|
|
||||||
dp->d_dump = cdevsw->d_dump;
|
|
||||||
dp->d_name = cdevsw->d_name;
|
|
||||||
}
|
|
||||||
KASSERT(dp->d_strategy != NULL, ("disk_create need d_strategy"));
|
KASSERT(dp->d_strategy != NULL, ("disk_create need d_strategy"));
|
||||||
KASSERT(dp->d_name != NULL, ("disk_create need d_name"));
|
KASSERT(dp->d_name != NULL, ("disk_create need d_name"));
|
||||||
KASSERT(*dp->d_name != 0, ("disk_create need d_name"));
|
KASSERT(*dp->d_name != 0, ("disk_create need d_name"));
|
||||||
KASSERT(strlen(dp->d_name) < SPECNAMELEN - 4, ("disk name too long"));
|
KASSERT(strlen(dp->d_name) < SPECNAMELEN - 4, ("disk name too long"));
|
||||||
dev->si_disk = dp;
|
|
||||||
dev->si_udev = 0x10002; /* XXX: Needed ? */
|
|
||||||
dev->si_name = dev->__si_namebuf;
|
|
||||||
sprintf(dev->si_name, "%s%d", dp->d_name, unit);
|
|
||||||
g_call_me(g_disk_create, dp);
|
g_call_me(g_disk_create, dp);
|
||||||
return (dev);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -369,7 +326,6 @@ disk_destroy(struct disk *dp)
|
|||||||
struct g_geom *gp;
|
struct g_geom *gp;
|
||||||
|
|
||||||
gp = dp->d_geom;
|
gp = dp->d_geom;
|
||||||
g_free(dp->d_dev);
|
|
||||||
gp->flags |= G_GEOM_WITHER;
|
gp->flags |= G_GEOM_WITHER;
|
||||||
gp->softc = NULL;
|
gp->softc = NULL;
|
||||||
g_orphan_provider(LIST_FIRST(&gp->provider), ENXIO);
|
g_orphan_provider(LIST_FIRST(&gp->provider), ENXIO);
|
||||||
|
@ -89,7 +89,6 @@ struct cdev {
|
|||||||
struct tty *__sit_tty;
|
struct tty *__sit_tty;
|
||||||
} __si_tty;
|
} __si_tty;
|
||||||
struct {
|
struct {
|
||||||
struct disk *__sid_disk;
|
|
||||||
struct mount *__sid_mountpoint;
|
struct mount *__sid_mountpoint;
|
||||||
int __sid_bsize_phys; /* min physical block size */
|
int __sid_bsize_phys; /* min physical block size */
|
||||||
int __sid_bsize_best; /* optimal block size */
|
int __sid_bsize_best; /* optimal block size */
|
||||||
@ -103,7 +102,6 @@ struct cdev {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#define si_tty __si_u.__si_tty.__sit_tty
|
#define si_tty __si_u.__si_tty.__sit_tty
|
||||||
#define si_disk __si_u.__si_disk.__sid_disk
|
|
||||||
#define si_mountpoint __si_u.__si_disk.__sid_mountpoint
|
#define si_mountpoint __si_u.__si_disk.__sid_mountpoint
|
||||||
#define si_bsize_phys __si_u.__si_disk.__sid_bsize_phys
|
#define si_bsize_phys __si_u.__si_disk.__sid_bsize_phys
|
||||||
#define si_bsize_best __si_u.__si_disk.__sid_bsize_best
|
#define si_bsize_best __si_u.__si_disk.__sid_bsize_best
|
||||||
|
@ -34,17 +34,12 @@ struct g_geom;
|
|||||||
|
|
||||||
struct disk {
|
struct disk {
|
||||||
/* Fields which are private to geom_disk */
|
/* Fields which are private to geom_disk */
|
||||||
struct cdevsw *d_devsw;
|
|
||||||
d_open_t *d_copen; /* Compat */
|
|
||||||
d_close_t *d_cclose; /* Compat */
|
|
||||||
d_ioctl_t *d_cioctl; /* Compat */
|
|
||||||
struct g_geom *d_geom;
|
struct g_geom *d_geom;
|
||||||
|
|
||||||
/* Shared fields */
|
/* Shared fields */
|
||||||
u_int d_flags;
|
u_int d_flags;
|
||||||
const char *d_name;
|
const char *d_name;
|
||||||
u_int d_unit;
|
u_int d_unit;
|
||||||
dev_t d_dev; /* Compat */
|
|
||||||
|
|
||||||
/* Disk methods */
|
/* Disk methods */
|
||||||
disk_open_t *d_open;
|
disk_open_t *d_open;
|
||||||
@ -70,7 +65,7 @@ struct disk {
|
|||||||
#define DISKFLAG_OPEN 0x2
|
#define DISKFLAG_OPEN 0x2
|
||||||
#define DISKFLAG_CANDELETE 0x4
|
#define DISKFLAG_CANDELETE 0x4
|
||||||
|
|
||||||
dev_t disk_create(int unit, struct disk *disk, int flags, struct cdevsw *cdevsw, void *unused);
|
void disk_create(int unit, struct disk *disk, int flags, void *unused, void *unused2);
|
||||||
void disk_destroy(struct disk *disk);
|
void disk_destroy(struct disk *disk);
|
||||||
struct disk *disk_enumerate(struct disk *disk);
|
struct disk *disk_enumerate(struct disk *disk);
|
||||||
void disk_err(struct bio *bp, const char *what, int blkdone, int nl);
|
void disk_err(struct bio *bp, const char *what, int blkdone, int nl);
|
||||||
|
@ -89,7 +89,6 @@ struct cdev {
|
|||||||
struct tty *__sit_tty;
|
struct tty *__sit_tty;
|
||||||
} __si_tty;
|
} __si_tty;
|
||||||
struct {
|
struct {
|
||||||
struct disk *__sid_disk;
|
|
||||||
struct mount *__sid_mountpoint;
|
struct mount *__sid_mountpoint;
|
||||||
int __sid_bsize_phys; /* min physical block size */
|
int __sid_bsize_phys; /* min physical block size */
|
||||||
int __sid_bsize_best; /* optimal block size */
|
int __sid_bsize_best; /* optimal block size */
|
||||||
@ -103,7 +102,6 @@ struct cdev {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#define si_tty __si_u.__si_tty.__sit_tty
|
#define si_tty __si_u.__si_tty.__sit_tty
|
||||||
#define si_disk __si_u.__si_disk.__sid_disk
|
|
||||||
#define si_mountpoint __si_u.__si_disk.__sid_mountpoint
|
#define si_mountpoint __si_u.__si_disk.__sid_mountpoint
|
||||||
#define si_bsize_phys __si_u.__si_disk.__sid_bsize_phys
|
#define si_bsize_phys __si_u.__si_disk.__sid_bsize_phys
|
||||||
#define si_bsize_best __si_u.__si_disk.__sid_bsize_best
|
#define si_bsize_best __si_u.__si_disk.__sid_bsize_best
|
||||||
|
Loading…
x
Reference in New Issue
Block a user