static int g_mbr_start(struct bio *bp) { struct g_provider *pp; struct g_geom *gp; struct g_mbr_softc *mp; struct g_slicer *gsp; int idx; pp = bp->bio_to; idx = pp->index; gp = pp->geom; gsp = gp->softc; mp = gsp->softc; if (bp->bio_cmd == BIO_GETATTR) { if (g_handleattr_int(bp, "MBR::type", mp->type[idx])) return (1); if (g_handleattr_off_t(bp, "MBR::offset", gsp->slices[idx].offset)) return (1); if (g_handleattr(bp, "MBR::slicesum", mp->slicesum, sizeof(mp->slicesum))) return (1); } return (0); }
static int g_mbr_start(struct bio *bp) { struct g_provider *pp; struct g_geom *gp; struct g_mbr_softc *mp; struct g_slicer *gsp; struct g_ioctl *gio; int idx, error; pp = bp->bio_to; idx = pp->index; gp = pp->geom; gsp = gp->softc; mp = gsp->softc; if (bp->bio_cmd == BIO_GETATTR) { if (g_handleattr_int(bp, "MBR::type", mp->type[idx])) return (1); if (g_handleattr_off_t(bp, "MBR::offset", gsp->slices[idx].offset)) return (1); } /* We only handle ioctl(2) requests of the right format. */ if (strcmp(bp->bio_attribute, "GEOM::ioctl")) return (0); else if (bp->bio_length != sizeof(*gio)) return (0); /* Get hold of the ioctl parameters. */ gio = (struct g_ioctl *)bp->bio_data; switch (gio->cmd) { case DIOCGMBR: /* Return a copy of the disklabel to userland. */ bcopy(mp->sec0, gio->data, 512); g_io_deliver(bp, 0); return (1); case DIOCSMBR: /* * These we cannot do without the topology lock and some * some I/O requests. Ask the event-handler to schedule * us in a less restricted environment. */ error = g_call_me(g_mbr_ioctl, bp); if (error) g_io_deliver(bp, error); /* * We must return non-zero to indicate that we will deal * with this bio, even though we have not done so yet. */ return (1); default: return (0); } return (0); }
static int g_apple_start(struct bio *bp) { struct g_provider *pp; struct g_geom *gp; struct g_apm_softc *mp; struct g_slicer *gsp; pp = bp->bio_to; gp = pp->geom; gsp = gp->softc; mp = gsp->softc; if (bp->bio_cmd == BIO_GETATTR) { if (g_handleattr_off_t(bp, "APM::offset", gsp->slices[pp->index].offset)) return (1); } return (0); }