Date: Wed, 4 Jul 2007 18:16:33 GMT From: Ulf Lilleengen <lulf@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 122871 for review Message-ID: <200707041816.l64IGXug010496@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=122871 Change 122871 by lulf@lulf_carrot on 2007/07/04 18:15:53 - Remember to take into account that size (although highly unlikely) can be lower than GV_DFLT_SYNCSIZE. - Make gv_sync update plex->synced when a plex is synced. This means we can keep track on where we lost our last sync if we did. - Modify list to show how far a sync has come when displaying plexes. - Make plexes go up automatically when finished syncing. Affected files ... .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_init.c#13 edit .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_list.c#2 edit .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_volume.c#12 edit Differences ... ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_init.c#13 (text+ko) ==== @@ -202,10 +202,12 @@ if (p->flags & GV_PLEX_SYNCING) { return (EINPROGRESS); } + p->synced = 0; p->flags |= GV_PLEX_SYNCING; printf("VINUM: starting sync of plex %s\n", p->name); - error = gv_sync_request(up, p, 0, GV_DFLT_SYNCSIZE, BIO_READ, - NULL); + error = gv_sync_request(up, p, p->synced, + MIN(GV_DFLT_SYNCSIZE, up->size - p->synced), + BIO_READ, NULL); if (error) { printf("VINUM: error syncing plex %s\n", p->name); break; ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_list.c#2 (text+ko) ==== @@ -294,8 +294,14 @@ sbuf_printf(sb, "Plex %s:\tSize:\t%9jd bytes (%jd MB)\n", p->name, (intmax_t)p->size, (intmax_t)p->size / MEGABYTE); sbuf_printf(sb, "\t\tSubdisks: %8d\n", p->sdcount); - sbuf_printf(sb, "\t\tState: %s\n\t\tOrganization: %s", - gv_plexstate(p->state), gv_plexorg(p->org)); + sbuf_printf(sb, "\t\tState: %s\n", gv_plexstate(p->state)); + if (p->flags & GV_PLEX_SYNCING) { + sbuf_printf(sb, "\t\tSynced: "); + sbuf_printf(sb, "%16jd bytes (%d%%)\n", + (intmax_t)p->synced, + (int)((p->synced * 100) / p->size)); + } + printf("\t\tOrganization: %s", gv_plexorg(p->org)); if (gv_is_striped(p)) { sbuf_printf(sb, "\tStripe size: %s\n", gv_roughlength(p->stripesize, 1)); @@ -305,9 +311,15 @@ sbuf_printf(sb, "\t\tPart of volume %s\n", p->volume); } } else { - sbuf_printf(sb, "P %-18s %2s State: %s\tSubdisks: %5d" - "\tSize: %s\n", p->name, gv_plexorg_short(p->org), - gv_plexstate(p->state), p->sdcount, + sbuf_printf(sb, "P %-18s %2s State: ", p->name, + gv_plexorg_short(p->org)); + if (p->flags & GV_PLEX_SYNCING) { + sbuf_printf(sb, "S %d%%\t", (int)((p->synced * 100) / + p->size)); + } else { + sbuf_printf(sb, "%s\t", gv_plexstate(p->state)); + } + sbuf_printf(sb, "Subdisks: %5d\tSize: %s\n", p->sdcount, gv_roughlength(p->size, 0)); } ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_volume.c#12 (text+ko) ==== @@ -185,14 +185,16 @@ } else if (bp->bio_cmd == BIO_WRITE) { if (bp->bio_cflags & GV_BIO_MALLOC) g_free(bp->bio_data); + to->synced += bp->bio_length; /* If we're finished, clean up. */ if (bp->bio_offset + bp->bio_length >= from->size) { printf("VINUM: syncing of %s from %s completed\n", to->name, from->name); to->flags &= ~GV_PLEX_SYNCING; + to->synced = 0; /* Update our state. */ LIST_FOREACH(s, &to->subdisks, in_plex) - gv_update_sd_state(s); + gv_set_sd_state(s, GV_SD_UP, 0); } else { offset = bp->bio_offset + bp->bio_length; err = gv_sync_request(from, to, offset,
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200707041816.l64IGXug010496>