Lines Matching refs:sidp

165 static int snap_getchunk(struct snapshot_id *sidp, chunknumber_t chunk,
436 struct snapshot_id *sidp, *sidnextp;
449 for (sidp = snapshot; sidp != NULL; sidp = sidnextp) {
450 ASSERT(SID_AVAILABLE(sidp) &&
451 !RW_LOCK_HELD(&sidp->sid_rwlock));
452 sidnextp = sidp->sid_next;
453 rw_destroy(&sidp->sid_rwlock);
454 kmem_free(sidp, sizeof (struct snapshot_id));
484 struct snapshot_id **sidpp, *sidp;
512 sidp = *sidpp;
513 rw_enter(&sidp->sid_rwlock, RW_WRITER);
515 if ((flag & FEXCL) && SID_BUSY(sidp)) {
516 rw_exit(&sidp->sid_rwlock);
520 ASSERT(sidpp != NULL && sidp != NULL);
522 if (SID_INACTIVE(sidp)) {
525 rw_exit(&sidp->sid_rwlock);
531 sidp->sid_flags |= SID_CHAR_BUSY;
534 sidp->sid_flags |= SID_BLOCK_BUSY;
537 rw_exit(&sidp->sid_rwlock);
541 rw_exit(&sidp->sid_rwlock);
561 struct snapshot_id **sidpp, *sidp;
581 sidp = *sidpp;
583 rw_enter(&sidp->sid_rwlock, RW_WRITER);
588 sidp->sid_flags &= ~(SID_CHAR_BUSY);
591 sidp->sid_flags &= ~(SID_BLOCK_BUSY);
595 rw_exit(&sidp->sid_rwlock);
599 if (SID_AVAILABLE(sidp)) {
610 sidp->sid_snapnumber);
613 sidp->sid_snapnumber);
617 ddi_soft_state_free(statep, sidp->sid_snapnumber);
622 rw_exit(&sidp->sid_rwlock);
660 struct snapshot_id **sidpp, *sidp;
688 sidp = *sidpp;
689 ASSERT(sidp);
690 rw_enter(&sidp->sid_rwlock, RW_READER);
692 if (SID_INACTIVE(sidp)) {
696 rw_exit(&sidp->sid_rwlock);
707 chunksz = sidp->sid_cowinfo->cow_map.cmap_chunksz;
715 chunk = dbtocowchunk(&sidp->sid_cowinfo->cow_map, reqptr);
720 if ((error = snap_getchunk(sidp, chunk, off, len, buf)) != 0) {
735 rw_exit(&sidp->sid_rwlock);
746 rw_exit(&sidp->sid_rwlock);
772 snap_getchunk(struct snapshot_id *sidp, chunknumber_t chunk, int offset,
775 cow_map_t *cmap = &sidp->sid_cowinfo->cow_map;
783 ASSERT(RW_READ_HELD(&sidp->sid_rwlock));
833 snapbuf->b_edev = sidp->sid_fvp->v_vfsp->vfs_dev;
904 (sidp->sid_cowinfo->cow_backfile_array)[bf_index],
1070 snapshot_id_t *sidp = NULL;
1101 for (sidp = snapshot; sidp != NULL; sidp = sidnextp) {
1102 rw_enter(&sidp->sid_rwlock, RW_READER);
1103 sidnextp = sidp->sid_next;
1107 if (sidp->sid_snapnumber == (uint_t)minor &&
1108 sidp->sid_fvp) {
1110 vp = sidp->sid_fvp;
1112 rw_exit(&sidp->sid_rwlock);
1117 if (sidp->sid_fvp == vp) {
1118 minor = sidp->sid_snapnumber;
1119 rw_exit(&sidp->sid_rwlock);
1123 rw_exit(&sidp->sid_rwlock);
1336 struct snapshot_id *sidp;
1358 sidp = *sidpp;
1364 if (sidp == NULL) {
1373 rw_enter(&sidp->sid_rwlock, RW_READER);
1380 if (sidp->sid_flags & SID_DELETE) {
1381 rw_exit(&sidp->sid_rwlock);
1394 if (sidp != *sidpp || SID_INACTIVE(sidp)) {
1395 rw_exit(&sidp->sid_rwlock);
1412 if (sidp != *sidpp || SID_INACTIVE(sidp)) {
1413 rw_exit(&sidp->sid_rwlock);
1420 rw_exit(&sidp->sid_rwlock);
1444 snapshot_id_t *sidp = *sidpp;
1446 struct cow_info *cowp = sidp->sid_cowinfo;
1454 ASSERT(RW_READ_HELD(&sidp->sid_rwlock));
1546 rw_exit(&sidp->sid_rwlock);
1550 rw_enter(&sidp->sid_rwlock, RW_READER);
1556 if (sidp != *sidpp || SID_INACTIVE(sidp)) {
1600 "%lld, size %lu, error %d.", sidp->sid_snapnumber,
1622 cmn->cmn_sid = sidp;
1659 snapshot_id_t *sidp = cmn->cmn_sid;
1660 cow_info_t *cowp = sidp->sid_cowinfo;
1674 rw_enter(&sidp->sid_rwlock, RW_READER);
1675 if (SID_INACTIVE(sidp)) {
1676 rw_exit(&sidp->sid_rwlock);
1681 rw_exit(&sidp->sid_rwlock);
1689 "bytes) and will be deleted.", sidp->sid_snapnumber,
1694 atomic_or_uint(&sidp->sid_flags, SID_DELETE);
1707 "%s, offset %llu bytes, error %d.", sidp->sid_snapnumber,
1712 atomic_or_uint(&sidp->sid_flags, SID_DELETE);
1755 struct snapshot_id *sidp;
1776 for (sidp = snapshot; sidp != NULL; sidp = sidp->sid_next) {
1777 if (sidp->sid_snapnumber > lastsnap)
1778 lastsnap = sidp->sid_snapnumber;
1785 rw_enter(&sidp->sid_rwlock, RW_READER);
1793 if (SID_AVAILABLE(sidp))
1795 rw_exit(&sidp->sid_rwlock);
1803 if (sidp) {
1804 if (rw_tryupgrade(&sidp->sid_rwlock) == 0) {
1806 rw_exit(&sidp->sid_rwlock);
1811 sidp = kmem_alloc(sizeof (struct snapshot_id), KM_SLEEP);
1812 rw_init(&sidp->sid_rwlock, NULL, RW_DEFAULT, NULL);
1813 rw_enter(&sidp->sid_rwlock, RW_WRITER);
1814 sidp->sid_snapnumber = (snapshot == NULL) ? 0 : lastsnap + 1;
1815 sidp->sid_cowinfo = NULL;
1816 sidp->sid_flags = 0;
1817 sidp->sid_next = snapshot;
1818 snapshot = sidp;
1821 ASSERT(RW_WRITE_HELD(&sidp->sid_rwlock));
1822 ASSERT(sidp->sid_cowinfo == NULL);
1823 ASSERT(sidp->sid_snapnumber <= (lastsnap + 1));
1825 sidp->sid_flags |= SID_CREATING;
1828 sidp->sid_fvp = fsvp;
1845 sidp->sid_snapnumber);
1871 sidp->sid_cowinfo = cowp;
1875 fssnap_create_kstats(sidp, sidp->sid_snapnumber,
1885 return (sidp);
1941 struct snapshot_id **sidpp, *sidp = snapshot_id;
1948 ASSERT(sidp);
1949 ASSERT(RW_WRITE_HELD(&sidp->sid_rwlock));
1950 ASSERT(sidp->sid_cowinfo);
1952 cowp = sidp->sid_cowinfo;
1957 sidp->sid_flags &= ~(SID_CREATING | SID_DISABLED);
1958 snapnumber = sidp->sid_snapnumber;
1970 *sidpp = sidp;
1992 rw_exit(&sidp->sid_rwlock);
2022 struct snapshot_id *sidp;
2031 * sidp is guaranteed to be valid if sidpp is valid because
2038 sidp = *sidpp;
2039 rw_enter(&sidp->sid_rwlock, RW_WRITER);
2041 ASSERT(RW_WRITE_HELD(&sidp->sid_rwlock));
2047 rw_exit(&sidp->sid_rwlock);
2058 sidp->sid_flags |= SID_DISABLING;
2059 if (sidp->sid_flags & SID_DELETE) {
2061 sidp->sid_snapnumber);
2062 sidp->sid_flags &= ~(SID_DELETE);
2075 cowp = sidp->sid_cowinfo;
2077 rw_exit(&sidp->sid_rwlock);
2080 rw_exit(&sidp->sid_rwlock);
2096 sidp->sid_cowinfo = NULL;
2124 statesidpp = ddi_get_soft_state(statep, sidp->sid_snapnumber);
2128 sidp->sid_snapnumber);
2130 ASSERT(*statesidpp == sidp);
2138 rw_enter(&sidp->sid_rwlock, RW_WRITER);
2139 sidp->sid_flags &= ~(SID_DISABLING);
2140 sidp->sid_flags |= SID_DISABLED;
2141 VN_RELE(sidp->sid_fvp);
2142 sidp->sid_fvp = NULL;
2143 snapnumber = sidp->sid_snapnumber;
2150 if (SID_AVAILABLE(sidp)) {
2154 sidp->sid_snapnumber);
2157 sidp->sid_snapnumber);
2161 ddi_soft_state_free(statep, sidp->sid_snapnumber);
2166 rw_exit(&sidp->sid_rwlock);
2176 fssnap_create_kstats(snapshot_id_t *sidp, int snapnum,
2181 struct cow_info *cowp = sidp->sid_cowinfo;
2254 num->ks_private = sidp;
2282 snapshot_id_t *sidp = (snapshot_id_t *)ksp->ks_private;
2283 struct cow_info *cowp = sidp->sid_cowinfo;
2290 if (sidp->sid_flags & SID_CREATING)
2292 else if (SID_INACTIVE(sidp))
2294 else if (SID_BUSY(sidp))