Deleted Added
full compact
28c28
< __FBSDID("$FreeBSD: head/sys/geom/vinum/geom_vinum_drive.c 143259 2005-03-07 19:58:58Z le $");
---
> __FBSDID("$FreeBSD: head/sys/geom/vinum/geom_vinum_drive.c 146325 2005-05-17 16:38:30Z le $");
49a50
> static void gv_drive_dead(void *, int);
114a116,118
> if (d->state != GV_DRIVE_UP)
> return;
>
129c133
< printf("NULL hdr!!!\n");
---
> printf("GEOM_VINUM: drive %s has NULL hdr\n", d->name);
142c146,147
< printf("g_access failed: %d\n", error);
---
> printf("GEOM_VINUM: g_access failed on drive %s, errno %d\n",
> d->name, error);
143a149
> g_free(vhdr);
151c157,158
< printf("writing vhdr failed: %d", error);
---
> printf("GEOM_VINUM: writing vhdr failed on drive %s, "
> "errno %d", d->name, error);
158c165,166
< printf("writing first config copy failed: %d", error);
---
> printf("GEOM_VINUM: writing first config copy failed "
> "on drive %s, errno %d", d->name, error);
165c173,174
< printf("writing second config copy failed: %d", error);
---
> printf("GEOM_VINUM: writing second config copy failed "
> "on drive %s, errno %d", d->name, error);
193a203,204
> if (d == NULL)
> return (0);
209,210c220
< if ((pp->acw + dw) > 0 && pp2->ace > 0) {
< printf("FOOO: permission denied - e\n");
---
> if ((pp->acw + dw) > 0 && pp2->ace > 0)
212,214c222
< }
< if ((pp->ace + de) > 0 && pp2->acw > 0) {
< printf("FOOO: permission denied - w\n");
---
> if ((pp->ace + de) > 0 && pp2->acw > 0)
216d223
< }
219,226d225
< #if 0
< /* On first open, grab an extra "exclusive" bit */
< if (cp->acr == 0 && cp->acw == 0 && cp->ace == 0)
< de++;
< /* ... and let go of it on last close */
< if ((cp->acr + dr) == 0 && (cp->acw + dw) == 0 && (cp->ace + de) == 1)
< de--;
< #endif
228,230d226
< if (error) {
< printf("FOOO: g_access failed: %d\n", error);
< }
336d331
< g_wither_geom(d->geom, ENXIO);
337a333,334
> g_post_event(gv_drive_dead, d, M_WAITOK, d,
> NULL);
396,397d392
< struct gv_sd *s;
< int error;
402,410d396
< if (cp->acr != 0 || cp->acw != 0 || cp->ace != 0)
< g_access(cp, -cp->acr, -cp->acw, -cp->ace);
< error = cp->provider->error;
< if (error == 0)
< error = ENXIO;
< g_detach(cp);
< g_destroy_consumer(cp);
< if (!LIST_EMPTY(&gp->consumer))
< return;
413,419d398
< printf("gvinum: lost drive '%s'\n", d->name);
< d->geom = NULL;
< LIST_FOREACH(s, &d->subdisks, from_drive) {
< s->provider = NULL;
< s->consumer = NULL;
< }
< gv_kill_drive_thread(d);
422,424c401,403
< }
< gp->softc = NULL;
< g_wither_geom(gp, error);
---
> g_post_event(gv_drive_dead, d, M_WAITOK, d, NULL);
> } else
> g_wither_geom(gp, ENXIO);
596d574
< int nsd;
608d585
< nsd = 0;
621a599,646
> static void
> gv_drive_dead(void *arg, int flag)
> {
> struct g_geom *gp;
> struct g_consumer *cp;
> struct gv_drive *d;
> struct gv_sd *s;
>
> g_topology_assert();
> KASSERT(arg != NULL, ("gv_drive_dead: NULL arg"));
>
> if (flag == EV_CANCEL)
> return;
>
> d = arg;
> if (d->state != GV_DRIVE_DOWN)
> return;
>
> g_trace(G_T_TOPOLOGY, "gv_drive_dead(%s)", d->name);
>
> gp = d->geom;
> if (gp == NULL)
> return;
>
> LIST_FOREACH(cp, &gp->consumer, consumer) {
> if (cp->nstart != cp->nend) {
> printf("GEOM_VINUM: dead drive '%s' has still "
> "active requests, can't detach consumer\n",
> d->name);
> g_post_event(gv_drive_dead, d, M_WAITOK, d,
> NULL);
> return;
> }
> if (cp->acr != 0 || cp->acw != 0 || cp->ace != 0)
> g_access(cp, -cp->acr, -cp->acw, -cp->ace);
> }
>
> printf("GEOM_VINUM: lost drive '%s'\n", d->name);
> d->geom = NULL;
> LIST_FOREACH(s, &d->subdisks, from_drive) {
> s->provider = NULL;
> s->consumer = NULL;
> }
> gv_kill_drive_thread(d);
> gp->softc = NULL;
> g_wither_geom(gp, ENXIO);
> }
>