Lines Matching refs:vol
125 static void g_raid_destroy_provider(struct g_raid_volume *vol);
128 static int g_raid_update_volume(struct g_raid_volume *vol, u_int event);
590 g_raid_change_volume_state(struct g_raid_volume *vol, int state) in g_raid_change_volume_state() argument
593 G_RAID_DEBUG1(0, vol->v_softc, in g_raid_change_volume_state()
595 vol->v_name, in g_raid_change_volume_state()
596 g_raid_volume_state2str(vol->v_state), in g_raid_change_volume_state()
598 vol->v_state = state; in g_raid_change_volume_state()
726 g_raid_nsubdisks(struct g_raid_volume *vol, int state) in g_raid_nsubdisks() argument
732 sc = vol->v_softc; in g_raid_nsubdisks()
736 for (i = 0; i < vol->v_disks_count; i++) { in g_raid_nsubdisks()
737 subdisk = &vol->v_subdisks[i]; in g_raid_nsubdisks()
751 g_raid_get_subdisk(struct g_raid_volume *vol, int state) in g_raid_get_subdisk() argument
757 sc = vol->v_softc; in g_raid_get_subdisk()
760 for (i = 0; i < vol->v_disks_count; i++) { in g_raid_get_subdisk()
761 sd = &vol->v_subdisks[i]; in g_raid_get_subdisk()
815 struct g_raid_volume *vol; in g_raid_nopens() local
819 TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { in g_raid_nopens()
820 if (vol->v_provider_open != 0) in g_raid_nopens()
913 g_raid_clean(struct g_raid_volume *vol, int acw) in g_raid_clean() argument
918 sc = vol->v_softc; in g_raid_clean()
924 if (!vol->v_dirty) in g_raid_clean()
926 if (vol->v_writes > 0) in g_raid_clean()
929 vol->v_provider != NULL && vol->v_provider->acw > 0)) { in g_raid_clean()
930 timeout = g_raid_clean_time - (time_uptime - vol->v_last_write); in g_raid_clean()
934 vol->v_dirty = 0; in g_raid_clean()
936 vol->v_name); in g_raid_clean()
937 g_raid_write_metadata(sc, vol, NULL, NULL); in g_raid_clean()
941 g_raid_dirty(struct g_raid_volume *vol) in g_raid_dirty() argument
945 sc = vol->v_softc; in g_raid_dirty()
951 vol->v_dirty = 1; in g_raid_dirty()
953 vol->v_name); in g_raid_dirty()
954 g_raid_write_metadata(sc, vol, NULL, NULL); in g_raid_dirty()
960 struct g_raid_volume *vol; in g_raid_tr_flush_common() local
966 vol = tr->tro_volume; in g_raid_tr_flush_common()
973 for (i = 0; i < vol->v_disks_count; i++) { in g_raid_tr_flush_common()
974 sd = &vol->v_subdisks[i]; in g_raid_tr_flush_common()
1010 struct g_raid_volume *vol; in g_raid_tr_kerneldump_common() local
1013 vol = tr->tro_volume; in g_raid_tr_kerneldump_common()
1014 sc = vol->v_softc; in g_raid_tr_kerneldump_common()
1023 bp.bio_to = vol->v_provider; in g_raid_tr_kerneldump_common()
1038 struct g_raid_volume *vol; in g_raid_dump() local
1041 vol = (struct g_raid_volume *)arg; in g_raid_dump()
1042 G_RAID_DEBUG1(3, vol->v_softc, "Dumping at off %llu len %llu.", in g_raid_dump()
1045 error = G_RAID_TR_KERNELDUMP(vol->v_tr, virtual, offset, length); in g_raid_dump()
1054 struct g_raid_volume *vol; in g_raid_kerneldump() local
1058 vol = pp->private; in g_raid_kerneldump()
1062 gkd->di.priv = vol; in g_raid_kerneldump()
1063 gkd->di.blocksize = vol->v_sectorsize; in g_raid_kerneldump()
1066 if ((gkd->offset + gkd->length) > vol->v_mediasize) in g_raid_kerneldump()
1067 gkd->length = vol->v_mediasize - gkd->offset; in g_raid_kerneldump()
1076 struct g_raid_volume *vol; in g_raid_candelete() local
1081 vol = pp->private; in g_raid_candelete()
1082 for (i = 0; i < vol->v_disks_count; i++) { in g_raid_candelete()
1083 sd = &vol->v_subdisks[i]; in g_raid_candelete()
1089 val = i < vol->v_disks_count; in g_raid_candelete()
1166 g_raid_is_in_locked_range(struct g_raid_volume *vol, const struct bio *bp) in g_raid_is_in_locked_range() argument
1170 sx_assert(&vol->v_softc->sc_lock, SX_LOCKED); in g_raid_is_in_locked_range()
1172 LIST_FOREACH(lp, &vol->v_locks, l_next) { in g_raid_is_in_locked_range()
1183 struct g_raid_volume *vol; in g_raid_start_request() local
1187 vol = bp->bio_to->private; in g_raid_start_request()
1197 g_raid_is_in_locked_range(vol, bp)) { in g_raid_start_request()
1199 bioq_insert_tail(&vol->v_locked, bp); in g_raid_start_request()
1208 if (!vol->v_dirty) in g_raid_start_request()
1209 g_raid_dirty(vol); in g_raid_start_request()
1210 vol->v_writes++; in g_raid_start_request()
1218 bioq_insert_tail(&vol->v_inflight, bp); in g_raid_start_request()
1220 G_RAID_TR_IOSTART(vol->v_tr, bp); in g_raid_start_request()
1224 g_raid_finish_with_locked_ranges(struct g_raid_volume *vol, struct bio *bp) in g_raid_finish_with_locked_ranges() argument
1230 vol->v_pending_lock = 0; in g_raid_finish_with_locked_ranges()
1231 LIST_FOREACH(lp, &vol->v_locks, l_next) { in g_raid_finish_with_locked_ranges()
1236 TAILQ_FOREACH(nbp, &vol->v_inflight.queue, bio_queue) { in g_raid_finish_with_locked_ranges()
1241 vol->v_pending_lock = 1; in g_raid_finish_with_locked_ranges()
1242 G_RAID_DEBUG1(4, vol->v_softc, in g_raid_finish_with_locked_ranges()
1248 G_RAID_DEBUG1(4, vol->v_softc, in g_raid_finish_with_locked_ranges()
1251 G_RAID_TR_LOCKED(vol->v_tr, lp->l_callback_arg); in g_raid_finish_with_locked_ranges()
1260 struct g_raid_volume *vol; in g_raid_iodone() local
1264 vol = bp->bio_to->private; in g_raid_iodone()
1269 vol->v_writes--; in g_raid_iodone()
1270 vol->v_last_write = time_uptime; in g_raid_iodone()
1273 bioq_remove(&vol->v_inflight, bp); in g_raid_iodone()
1274 if (vol->v_pending_lock && g_raid_is_in_locked_range(vol, bp)) in g_raid_iodone()
1275 g_raid_finish_with_locked_ranges(vol, bp); in g_raid_iodone()
1276 getmicrouptime(&vol->v_last_done); in g_raid_iodone()
1281 g_raid_lock_range(struct g_raid_volume *vol, off_t off, off_t len, in g_raid_lock_range() argument
1288 sc = vol->v_softc; in g_raid_lock_range()
1290 LIST_INSERT_HEAD(&vol->v_locks, lp, l_next); in g_raid_lock_range()
1296 TAILQ_FOREACH(bp, &vol->v_inflight.queue, bio_queue) { in g_raid_lock_range()
1306 vol->v_pending_lock = 1; in g_raid_lock_range()
1313 G_RAID_TR_LOCKED(vol->v_tr, lp->l_callback_arg); in g_raid_lock_range()
1318 g_raid_unlock_range(struct g_raid_volume *vol, off_t off, off_t len) in g_raid_unlock_range() argument
1324 sc = vol->v_softc; in g_raid_unlock_range()
1325 LIST_FOREACH(lp, &vol->v_locks, l_next) { in g_raid_unlock_range()
1339 while ((bp = bioq_takefirst(&vol->v_locked)) != NULL) in g_raid_unlock_range()
1444 struct g_raid_volume *vol; in g_raid_disk_done_request() local
1451 vol = sd->sd_volume; in g_raid_disk_done_request()
1460 G_RAID_TR_IODONE(vol->v_tr, sd, bp); in g_raid_disk_done_request()
1496 struct g_raid_volume *vol; in g_raid_worker() local
1514 vol = NULL; in g_raid_worker()
1524 TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { in g_raid_worker()
1525 if (bioq_first(&vol->v_inflight) == NULL && in g_raid_worker()
1526 vol->v_tr && in g_raid_worker()
1527 timevalcmp(&vol->v_last_done, &t, < )) in g_raid_worker()
1528 t = vol->v_last_done; in g_raid_worker()
1562 TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { in g_raid_worker()
1563 g_raid_clean(vol, -1); in g_raid_worker()
1564 if (bioq_first(&vol->v_inflight) == NULL && in g_raid_worker()
1565 vol->v_tr) { in g_raid_worker()
1568 timevaladd(&t, &vol->v_last_done); in g_raid_worker()
1571 G_RAID_TR_IDLE(vol->v_tr); in g_raid_worker()
1572 vol->v_last_done = now; in g_raid_worker()
1615 g_raid_launch_provider(struct g_raid_volume *vol) in g_raid_launch_provider() argument
1625 sc = vol->v_softc; in g_raid_launch_provider()
1630 snprintf(name, sizeof(name), "raid/%s", vol->v_name); in g_raid_launch_provider()
1631 if (g_raid_name_format == 0 || vol->v_name[0] == 0 || in g_raid_launch_provider()
1634 snprintf(name, sizeof(name), "raid/r%d", vol->v_global_id); in g_raid_launch_provider()
1639 if (vol->v_tr->tro_class->trc_accept_unmapped) { in g_raid_launch_provider()
1641 for (i = 0; i < vol->v_disks_count; i++) { in g_raid_launch_provider()
1642 sd = &vol->v_subdisks[i]; in g_raid_launch_provider()
1650 pp->private = vol; in g_raid_launch_provider()
1651 pp->mediasize = vol->v_mediasize; in g_raid_launch_provider()
1652 pp->sectorsize = vol->v_sectorsize; in g_raid_launch_provider()
1655 if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1 || in g_raid_launch_provider()
1656 vol->v_raid_level == G_RAID_VOLUME_RL_RAID3 || in g_raid_launch_provider()
1657 vol->v_raid_level == G_RAID_VOLUME_RL_SINGLE || in g_raid_launch_provider()
1658 vol->v_raid_level == G_RAID_VOLUME_RL_CONCAT) { in g_raid_launch_provider()
1659 if ((disk = vol->v_subdisks[0].sd_disk) != NULL && in g_raid_launch_provider()
1664 pp->stripeoffset = off + vol->v_subdisks[0].sd_offset; in g_raid_launch_provider()
1668 if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID3) { in g_raid_launch_provider()
1669 pp->stripesize *= (vol->v_disks_count - 1); in g_raid_launch_provider()
1670 pp->stripeoffset *= (vol->v_disks_count - 1); in g_raid_launch_provider()
1673 pp->stripesize = vol->v_strip_size; in g_raid_launch_provider()
1674 vol->v_provider = pp; in g_raid_launch_provider()
1678 pp->name, vol->v_name); in g_raid_launch_provider()
1682 g_raid_destroy_provider(struct g_raid_volume *vol) in g_raid_destroy_provider() argument
1689 sc = vol->v_softc; in g_raid_destroy_provider()
1690 pp = vol->v_provider; in g_raid_destroy_provider()
1691 KASSERT(pp != NULL, ("NULL provider (volume=%s).", vol->v_name)); in g_raid_destroy_provider()
1704 pp->name, vol->v_name); in g_raid_destroy_provider()
1707 vol->v_provider = NULL; in g_raid_destroy_provider()
1714 g_raid_update_volume(struct g_raid_volume *vol, u_int event) in g_raid_update_volume() argument
1718 sc = vol->v_softc; in g_raid_update_volume()
1723 vol->v_name); in g_raid_update_volume()
1726 if (vol->v_provider != NULL) in g_raid_update_volume()
1727 g_raid_destroy_provider(vol); in g_raid_update_volume()
1730 if (vol->v_provider == NULL) in g_raid_update_volume()
1731 g_raid_launch_provider(vol); in g_raid_update_volume()
1734 if (vol->v_tr) in g_raid_update_volume()
1735 G_RAID_TR_START(vol->v_tr); in g_raid_update_volume()
1739 G_RAID_MD_VOLUME_EVENT(sc->sc_md, vol, event); in g_raid_update_volume()
1744 if (vol->v_starting) { in g_raid_update_volume()
1745 vol->v_starting = 0; in g_raid_update_volume()
1746 G_RAID_DEBUG1(1, sc, "root_mount_rel %p", vol->v_rootmount); in g_raid_update_volume()
1747 root_mount_rel(vol->v_rootmount); in g_raid_update_volume()
1748 vol->v_rootmount = NULL; in g_raid_update_volume()
1750 if (vol->v_stopping && vol->v_provider_open == 0) in g_raid_update_volume()
1751 g_raid_destroy_volume(vol); in g_raid_update_volume()
1762 struct g_raid_volume *vol; in g_raid_update_subdisk() local
1765 vol = sd->sd_volume; in g_raid_update_subdisk()
1770 vol->v_name, sd->sd_pos, in g_raid_update_subdisk()
1772 if (vol->v_tr) in g_raid_update_subdisk()
1773 G_RAID_TR_EVENT(vol->v_tr, sd, event); in g_raid_update_subdisk()
1819 struct g_raid_volume *vol; in g_raid_access() local
1825 vol = pp->private; in g_raid_access()
1827 KASSERT(vol != NULL, ("NULL volume (provider=%s).", pp->name)); in g_raid_access()
1841 if (vol->v_read_only && acw > 0) { in g_raid_access()
1846 g_raid_clean(vol, dcw); in g_raid_access()
1847 vol->v_provider_open += acr + acw + ace; in g_raid_access()
1850 vol->v_provider_open == 0) { in g_raid_access()
1860 if (vol->v_stopping && vol->v_provider_open == 0) in g_raid_access()
1861 g_raid_destroy_volume(vol); in g_raid_access()
1914 struct g_raid_volume *vol, *vol1; in g_raid_create_volume() local
1918 vol = malloc(sizeof(*vol), M_RAID, M_WAITOK | M_ZERO); in g_raid_create_volume()
1919 vol->v_softc = sc; in g_raid_create_volume()
1920 strlcpy(vol->v_name, name, G_RAID_MAX_VOLUMENAME); in g_raid_create_volume()
1921 vol->v_state = G_RAID_VOLUME_S_STARTING; in g_raid_create_volume()
1922 vol->v_raid_level = G_RAID_VOLUME_RL_UNKNOWN; in g_raid_create_volume()
1923 vol->v_raid_level_qualifier = G_RAID_VOLUME_RLQ_UNKNOWN; in g_raid_create_volume()
1924 vol->v_rotate_parity = 1; in g_raid_create_volume()
1925 bioq_init(&vol->v_inflight); in g_raid_create_volume()
1926 bioq_init(&vol->v_locked); in g_raid_create_volume()
1927 LIST_INIT(&vol->v_locks); in g_raid_create_volume()
1929 vol->v_subdisks[i].sd_softc = sc; in g_raid_create_volume()
1930 vol->v_subdisks[i].sd_volume = vol; in g_raid_create_volume()
1931 vol->v_subdisks[i].sd_pos = i; in g_raid_create_volume()
1932 vol->v_subdisks[i].sd_state = G_RAID_DISK_S_NONE; in g_raid_create_volume()
1937 vol1 = vol; in g_raid_create_volume()
1954 vol->v_global_id = id; in g_raid_create_volume()
1955 LIST_INSERT_HEAD(&g_raid_volumes, vol, v_global_next); in g_raid_create_volume()
1959 vol->v_rootmount = root_mount_hold("GRAID"); in g_raid_create_volume()
1960 G_RAID_DEBUG1(1, sc, "root_mount_hold %p", vol->v_rootmount); in g_raid_create_volume()
1961 vol->v_starting = 1; in g_raid_create_volume()
1962 TAILQ_INSERT_TAIL(&sc->sc_volumes, vol, v_next); in g_raid_create_volume()
1963 return (vol); in g_raid_create_volume()
1980 int g_raid_start_volume(struct g_raid_volume *vol) in g_raid_start_volume() argument
1986 G_RAID_DEBUG1(2, vol->v_softc, "Starting volume %s.", vol->v_name); in g_raid_start_volume()
1990 G_RAID_DEBUG1(2, vol->v_softc, in g_raid_start_volume()
1992 vol->v_name, class->name); in g_raid_start_volume()
1996 obj->tro_volume = vol; in g_raid_start_volume()
1997 status = G_RAID_TR_TASTE(obj, vol); in g_raid_start_volume()
2003 G_RAID_DEBUG1(0, vol->v_softc, in g_raid_start_volume()
2005 vol->v_name); in g_raid_start_volume()
2006 vol->v_tr = NULL; in g_raid_start_volume()
2007 g_raid_change_volume_state(vol, G_RAID_VOLUME_S_UNSUPPORTED); in g_raid_start_volume()
2008 g_raid_event_send(vol, G_RAID_VOLUME_E_DOWN, in g_raid_start_volume()
2012 G_RAID_DEBUG1(2, vol->v_softc, in g_raid_start_volume()
2014 class->name, vol->v_name); in g_raid_start_volume()
2015 vol->v_tr = obj; in g_raid_start_volume()
2022 struct g_raid_volume *vol, *tmpv; in g_raid_destroy_node() local
2027 TAILQ_FOREACH_SAFE(vol, &sc->sc_volumes, v_next, tmpv) { in g_raid_destroy_node()
2028 if (g_raid_destroy_volume(vol)) in g_raid_destroy_node()
2071 g_raid_destroy_volume(struct g_raid_volume *vol) in g_raid_destroy_volume() argument
2077 sc = vol->v_softc; in g_raid_destroy_volume()
2078 G_RAID_DEBUG1(2, sc, "Destroying volume %s.", vol->v_name); in g_raid_destroy_volume()
2079 vol->v_stopping = 1; in g_raid_destroy_volume()
2080 if (vol->v_state != G_RAID_VOLUME_S_STOPPED) { in g_raid_destroy_volume()
2081 if (vol->v_tr) { in g_raid_destroy_volume()
2082 G_RAID_TR_STOP(vol->v_tr); in g_raid_destroy_volume()
2085 vol->v_state = G_RAID_VOLUME_S_STOPPED; in g_raid_destroy_volume()
2087 if (g_raid_event_check(sc, vol) != 0) in g_raid_destroy_volume()
2089 if (vol->v_provider != NULL) in g_raid_destroy_volume()
2091 if (vol->v_provider_open != 0) in g_raid_destroy_volume()
2093 if (vol->v_tr) { in g_raid_destroy_volume()
2094 G_RAID_TR_FREE(vol->v_tr); in g_raid_destroy_volume()
2095 kobj_delete((kobj_t)vol->v_tr, M_RAID); in g_raid_destroy_volume()
2096 vol->v_tr = NULL; in g_raid_destroy_volume()
2098 if (vol->v_rootmount) in g_raid_destroy_volume()
2099 root_mount_rel(vol->v_rootmount); in g_raid_destroy_volume()
2101 LIST_REMOVE(vol, v_global_next); in g_raid_destroy_volume()
2103 TAILQ_REMOVE(&sc->sc_volumes, vol, v_next); in g_raid_destroy_volume()
2105 g_raid_event_cancel(sc, &vol->v_subdisks[i]); in g_raid_destroy_volume()
2106 disk = vol->v_subdisks[i].sd_disk; in g_raid_destroy_volume()
2109 TAILQ_REMOVE(&disk->d_subdisks, &vol->v_subdisks[i], sd_next); in g_raid_destroy_volume()
2111 G_RAID_DEBUG1(2, sc, "Volume %s destroyed.", vol->v_name); in g_raid_destroy_volume()
2113 G_RAID_MD_FREE_VOLUME(sc->sc_md, vol); in g_raid_destroy_volume()
2114 g_raid_event_cancel(sc, vol); in g_raid_destroy_volume()
2115 free(vol, M_RAID); in g_raid_destroy_volume()
2300 void g_raid_write_metadata(struct g_raid_softc *sc, struct g_raid_volume *vol, in g_raid_write_metadata() argument
2307 G_RAID_MD_WRITE(sc->sc_md, vol, sd, disk); in g_raid_write_metadata()
2334 struct g_raid_volume *vol; in g_raid_dumpconf() local
2345 vol = pp->private; in g_raid_dumpconf()
2350 g_raid_volume_level2str(vol->v_raid_level, in g_raid_dumpconf()
2351 vol->v_raid_level_qualifier)); in g_raid_dumpconf()
2353 vol->v_name); in g_raid_dumpconf()
2355 g_raid_volume_level2str(vol->v_raid_level, in g_raid_dumpconf()
2356 vol->v_raid_level_qualifier)); in g_raid_dumpconf()
2359 vol->v_tr ? vol->v_tr->tro_class->name : "NONE"); in g_raid_dumpconf()
2361 vol->v_disks_count); in g_raid_dumpconf()
2363 vol->v_strip_size); in g_raid_dumpconf()
2365 g_raid_volume_state2str(vol->v_state)); in g_raid_dumpconf()
2367 vol->v_dirty ? "Yes" : "No"); in g_raid_dumpconf()
2369 for (i = 0; i < vol->v_disks_count; i++) { in g_raid_dumpconf()
2370 sd = &vol->v_subdisks[i]; in g_raid_dumpconf()
2387 if (i + 1 < vol->v_disks_count) in g_raid_dumpconf()
2441 TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { in g_raid_dumpconf()
2442 if (vol->v_state < s) in g_raid_dumpconf()
2443 s = vol->v_state; in g_raid_dumpconf()
2459 struct g_raid_volume *vol; in g_raid_shutdown_post_sync() local
2472 TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) in g_raid_shutdown_post_sync()
2473 g_raid_clean(vol, -1); in g_raid_shutdown_post_sync()