From 9fa718d2f477620f14e3f2948dd03e3470add804 Mon Sep 17 00:00:00 2001 From: Madhav Suresh Date: Tue, 31 Jul 2012 06:38:31 -0700 Subject: 3006 VERIFY[S,U,P] and ASSERT[S,U,P] frequently check if first argument is zero Reviewed by: Matt Ahrens Reviewed by: George Wilson Approved by: Garrett D'Amore --- usr/src/lib/libc/port/threads/assfail.c | 4 +- usr/src/lib/libzpool/Makefile.com | 5 ++- usr/src/lib/libzpool/common/sys/zfs_context.h | 56 +-------------------------- 3 files changed, 6 insertions(+), 59 deletions(-) (limited to 'usr/src/lib') diff --git a/usr/src/lib/libc/port/threads/assfail.c b/usr/src/lib/libc/port/threads/assfail.c index 7cf0ea98e6..7a98884f4b 100644 --- a/usr/src/lib/libc/port/threads/assfail.c +++ b/usr/src/lib/libc/port/threads/assfail.c @@ -452,11 +452,11 @@ assfail3(const char *assertion, uintmax_t lv, const char *op, uintmax_t rv, { char buf[1000]; (void) strcpy(buf, assertion); - (void) strcat(buf, " (0x"); + (void) strcat(buf, " ("); ultos((uint64_t)lv, 16, buf + strlen(buf)); (void) strcat(buf, " "); (void) strcat(buf, op); - (void) strcat(buf, " 0x"); + (void) strcat(buf, " "); ultos((uint64_t)rv, 16, buf + strlen(buf)); (void) strcat(buf, ")"); __assfail(buf, filename, line_num); diff --git a/usr/src/lib/libzpool/Makefile.com b/usr/src/lib/libzpool/Makefile.com index 571881a47e..2485f7350f 100644 --- a/usr/src/lib/libzpool/Makefile.com +++ b/usr/src/lib/libzpool/Makefile.com @@ -20,6 +20,7 @@ # # # Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2012 by Delphix. All rights reserved. # LIBRARY= libzpool.a @@ -57,9 +58,9 @@ C99MODE= -xc99=%all C99LMODE= -Xc99=%all CFLAGS += -g $(CCVERBOSE) $(CNOGLOBAL) -CFLAGS64 += -g $(CCVERBOSE) $(CNOGLOBAL) +CFLAGS64 += -g $(CCVERBOSE) $(CNOGLOBAL) LDLIBS += -lcmdutils -lumem -lavl -lnvpair -lz -lc -lsysevent -lmd -CPPFLAGS += $(INCS) +CPPFLAGS += $(INCS) -DDEBUG .KEEP_STATE: diff --git a/usr/src/lib/libzpool/common/sys/zfs_context.h b/usr/src/lib/libzpool/common/sys/zfs_context.h index 39af927f71..fcde793514 100644 --- a/usr/src/lib/libzpool/common/sys/zfs_context.h +++ b/usr/src/lib/libzpool/common/sys/zfs_context.h @@ -36,7 +36,6 @@ extern "C" { #define _SYS_RWLOCK_H #define _SYS_CONDVAR_H #define _SYS_SYSTM_H -#define _SYS_DEBUG_H #define _SYS_T_LOCK_H #define _SYS_VNODE_H #define _SYS_VFS_H @@ -78,6 +77,7 @@ extern "C" { #include #include #include +#include /* * Debugging @@ -110,60 +110,6 @@ extern void vpanic(const char *, __va_list); extern int aok; -/* This definition is copied from assert.h. */ -#if defined(__STDC__) -#if __STDC_VERSION__ - 0 >= 199901L -#define zverify(EX) (void)((EX) || (aok) || \ - (__assert_c99(#EX, __FILE__, __LINE__, __func__), 0)) -#else -#define zverify(EX) (void)((EX) || (aok) || \ - (__assert(#EX, __FILE__, __LINE__), 0)) -#endif /* __STDC_VERSION__ - 0 >= 199901L */ -#else -#define zverify(EX) (void)((EX) || (aok) || \ - (_assert("EX", __FILE__, __LINE__), 0)) -#endif /* __STDC__ */ - - -#define VERIFY zverify -#define ASSERT zverify -#undef assert -#define assert zverify - -extern void __assert(const char *, const char *, int); - -#ifdef lint -#define VERIFY3_IMPL(x, y, z, t) if (x == z) ((void)0) -#else -/* BEGIN CSTYLED */ -#define VERIFY3_IMPL(LEFT, OP, RIGHT, TYPE) do { \ - const TYPE __left = (TYPE)(LEFT); \ - const TYPE __right = (TYPE)(RIGHT); \ - if (!(__left OP __right) && (!aok)) { \ - char *__buf = alloca(256); \ - (void) snprintf(__buf, 256, "%s %s %s (0x%llx %s 0x%llx)", \ - #LEFT, #OP, #RIGHT, \ - (u_longlong_t)__left, #OP, (u_longlong_t)__right); \ - __assert(__buf, __FILE__, __LINE__); \ - } \ -_NOTE(CONSTCOND) } while (0) -/* END CSTYLED */ -#endif /* lint */ - -#define VERIFY3S(x, y, z) VERIFY3_IMPL(x, y, z, int64_t) -#define VERIFY3U(x, y, z) VERIFY3_IMPL(x, y, z, uint64_t) -#define VERIFY3P(x, y, z) VERIFY3_IMPL(x, y, z, uintptr_t) - -#ifdef NDEBUG -#define ASSERT3S(x, y, z) ((void)0) -#define ASSERT3U(x, y, z) ((void)0) -#define ASSERT3P(x, y, z) ((void)0) -#else -#define ASSERT3S(x, y, z) VERIFY3S(x, y, z) -#define ASSERT3U(x, y, z) VERIFY3U(x, y, z) -#define ASSERT3P(x, y, z) VERIFY3P(x, y, z) -#endif - /* * DTrace SDT probes have different signatures in userland than they do in * kernel. If they're being used in kernel code, re-define them out of -- cgit v1.2.3 From b420f3adeb349714478d1a7813d2c0e069d41555 Mon Sep 17 00:00:00 2001 From: Richard Lowe Date: Wed, 1 Aug 2012 16:40:39 -0400 Subject: backout 3006: causes 3046 (panics after mounting root) --- usr/src/cmd/zdb/Makefile.com | 8 +- usr/src/cmd/zdb/zdb.c | 6 +- usr/src/cmd/zhack/Makefile.com | 2 +- usr/src/cmd/zhack/zhack.c | 4 +- usr/src/cmd/ztest/Makefile.com | 6 +- usr/src/cmd/ztest/ztest.c | 112 +++++++++++++------------ usr/src/common/nvpair/fnvpair.c | 116 +++++++++++++------------- usr/src/lib/libc/port/threads/assfail.c | 4 +- usr/src/lib/libzpool/Makefile.com | 5 +- usr/src/lib/libzpool/common/sys/zfs_context.h | 56 ++++++++++++- usr/src/uts/common/disp/sysdc.c | 7 +- usr/src/uts/common/fs/zfs/arc.c | 10 +-- usr/src/uts/common/fs/zfs/bpobj.c | 30 +++---- usr/src/uts/common/fs/zfs/bptree.c | 20 ++--- usr/src/uts/common/fs/zfs/dbuf.c | 6 +- usr/src/uts/common/fs/zfs/dmu_objset.c | 8 +- usr/src/uts/common/fs/zfs/dmu_send.c | 6 +- usr/src/uts/common/fs/zfs/dmu_traverse.c | 2 +- usr/src/uts/common/fs/zfs/dmu_tx.c | 2 +- usr/src/uts/common/fs/zfs/dnode.c | 76 ++++++++--------- usr/src/uts/common/fs/zfs/dnode_sync.c | 8 +- usr/src/uts/common/fs/zfs/dsl_dataset.c | 53 ++++++------ usr/src/uts/common/fs/zfs/dsl_deadlist.c | 46 +++++----- usr/src/uts/common/fs/zfs/dsl_dir.c | 12 +-- usr/src/uts/common/fs/zfs/dsl_pool.c | 22 ++--- usr/src/uts/common/fs/zfs/dsl_scan.c | 22 ++--- usr/src/uts/common/fs/zfs/dsl_synctask.c | 2 +- usr/src/uts/common/fs/zfs/metaslab.c | 2 +- usr/src/uts/common/fs/zfs/spa.c | 12 +-- usr/src/uts/common/fs/zfs/space_map.c | 11 +-- usr/src/uts/common/fs/zfs/vdev.c | 14 ++-- usr/src/uts/common/fs/zfs/vdev_raidz.c | 6 +- usr/src/uts/common/fs/zfs/zap.c | 10 +-- usr/src/uts/common/fs/zfs/zap_micro.c | 4 +- usr/src/uts/common/fs/zfs/zfeature.c | 6 +- usr/src/uts/common/fs/zfs/zfs_debug.c | 6 +- usr/src/uts/common/fs/zfs/zfs_dir.c | 9 +- usr/src/uts/common/fs/zfs/zfs_ioctl.c | 2 +- usr/src/uts/common/fs/zfs/zfs_rlock.c | 12 +-- usr/src/uts/common/fs/zfs/zfs_vfsops.c | 2 +- usr/src/uts/common/fs/zfs/zfs_vnops.c | 14 ++-- usr/src/uts/common/fs/zfs/zfs_znode.c | 10 +-- usr/src/uts/common/fs/zfs/zil.c | 4 +- usr/src/uts/common/fs/zfs/zio.c | 2 +- usr/src/uts/common/sys/debug.h | 8 -- 45 files changed, 405 insertions(+), 380 deletions(-) (limited to 'usr/src/lib') diff --git a/usr/src/cmd/zdb/Makefile.com b/usr/src/cmd/zdb/Makefile.com index 19f351bf70..259e32accb 100644 --- a/usr/src/cmd/zdb/Makefile.com +++ b/usr/src/cmd/zdb/Makefile.com @@ -23,8 +23,6 @@ # Copyright 2009 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # -# Copyright (c) 2012 by Delphix. All rights reserved. -# PROG:sh= cd ..; basename `pwd` SRCS= ../$(PROG).c ../zdb_il.c @@ -44,11 +42,11 @@ C99LMODE= -Xc99=%all CFLAGS += $(CCVERBOSE) CFLAGS64 += $(CCVERBOSE) -CPPFLAGS += -D_LARGEFILE64_SOURCE=1 -D_REENTRANT $(INCS) -DDEBUG +CPPFLAGS += -D_LARGEFILE64_SOURCE=1 -D_REENTRANT $(INCS) # lint complains about unused _umem_* functions -LINTFLAGS += -xerroff=E_NAME_DEF_NOT_USED2 -LINTFLAGS64 += -xerroff=E_NAME_DEF_NOT_USED2 +LINTFLAGS += -xerroff=E_NAME_DEF_NOT_USED2 +LINTFLAGS64 += -xerroff=E_NAME_DEF_NOT_USED2 .KEEP_STATE: diff --git a/usr/src/cmd/zdb/zdb.c b/usr/src/cmd/zdb/zdb.c index 6ccc1f6b8d..d462d3f18e 100644 --- a/usr/src/cmd/zdb/zdb.c +++ b/usr/src/cmd/zdb/zdb.c @@ -529,7 +529,7 @@ dump_spacemap(objset_t *os, space_map_obj_t *smo, space_map_t *sm) */ alloc = 0; for (offset = 0; offset < smo->smo_objsize; offset += sizeof (entry)) { - VERIFY0(dmu_read(os, smo->smo_object, offset, + VERIFY3U(0, ==, dmu_read(os, smo->smo_object, offset, sizeof (entry), &entry, DMU_READ_PREFETCH)); if (SM_DEBUG_DECODE(entry)) { (void) printf("\t [%6llu] %s: txg %llu, pass %llu\n", @@ -1188,7 +1188,7 @@ dump_bptree(objset_t *os, uint64_t obj, char *name) if (dump_opt['d'] < 3) return; - VERIFY0(dmu_bonus_hold(os, obj, FTAG, &db)); + VERIFY3U(0, ==, dmu_bonus_hold(os, obj, FTAG, &db)); bt = db->db_data; zdb_nicenum(bt->bt_bytes, bytes); (void) printf("\n %s: %llu datasets, %s\n", @@ -2273,7 +2273,7 @@ dump_block_stats(spa_t *spa) count_block_cb, &zcb, NULL); if (spa_feature_is_active(spa, &spa_feature_table[SPA_FEATURE_ASYNC_DESTROY])) { - VERIFY0(bptree_iterate(spa->spa_meta_objset, + VERIFY3U(0, ==, bptree_iterate(spa->spa_meta_objset, spa->spa_dsl_pool->dp_bptree_obj, B_FALSE, count_block_cb, &zcb, NULL)); } diff --git a/usr/src/cmd/zhack/Makefile.com b/usr/src/cmd/zhack/Makefile.com index d691fd4929..b22aa347b5 100644 --- a/usr/src/cmd/zhack/Makefile.com +++ b/usr/src/cmd/zhack/Makefile.com @@ -46,7 +46,7 @@ C99LMODE= -Xc99=%all CFLAGS += $(CCVERBOSE) CFLAGS64 += $(CCVERBOSE) -CPPFLAGS += -D_LARGEFILE64_SOURCE=1 -D_REENTRANT -DDEBUG $(INCS) +CPPFLAGS += -D_LARGEFILE64_SOURCE=1 -D_REENTRANT $(INCS) .KEEP_STATE: diff --git a/usr/src/cmd/zhack/zhack.c b/usr/src/cmd/zhack/zhack.c index ea11b9d244..7cc83d2dc0 100644 --- a/usr/src/cmd/zhack/zhack.c +++ b/usr/src/cmd/zhack/zhack.c @@ -344,7 +344,7 @@ zhack_do_feature_enable(int argc, char **argv) if (0 == zap_contains(mos, spa->spa_feat_desc_obj, feature.fi_guid)) fatal("feature already enabled: %s", feature.fi_guid); - VERIFY0(dsl_sync_task_do(spa->spa_dsl_pool, NULL, + VERIFY3U(0, ==, dsl_sync_task_do(spa->spa_dsl_pool, NULL, feature_enable_sync, spa, &feature, 5)); spa_close(spa, FTAG); @@ -442,7 +442,7 @@ zhack_do_feature_ref(int argc, char **argv) if (decr && !spa_feature_is_active(spa, &feature)) fatal("feature refcount already 0: %s", feature.fi_guid); - VERIFY0(dsl_sync_task_do(spa->spa_dsl_pool, NULL, + VERIFY3U(0, ==, dsl_sync_task_do(spa->spa_dsl_pool, NULL, decr ? feature_decr_sync : feature_incr_sync, spa, &feature, 5)); spa_close(spa, FTAG); diff --git a/usr/src/cmd/ztest/Makefile.com b/usr/src/cmd/ztest/Makefile.com index 0f308ab2e3..0199a68b1e 100644 --- a/usr/src/cmd/ztest/Makefile.com +++ b/usr/src/cmd/ztest/Makefile.com @@ -40,11 +40,11 @@ C99MODE= -xc99=%all C99LMODE= -Xc99=%all CFLAGS += -g $(CCVERBOSE) CFLAGS64 += -g $(CCVERBOSE) -CPPFLAGS += -D_LARGEFILE64_SOURCE=1 -D_REENTRANT $(INCS) -DDEBUG +CPPFLAGS += -D_LARGEFILE64_SOURCE=1 -D_REENTRANT $(INCS) # lint complains about unused _umem_* functions -LINTFLAGS += -xerroff=E_NAME_DEF_NOT_USED2 -LINTFLAGS64 += -xerroff=E_NAME_DEF_NOT_USED2 +LINTFLAGS += -xerroff=E_NAME_DEF_NOT_USED2 +LINTFLAGS64 += -xerroff=E_NAME_DEF_NOT_USED2 .KEEP_STATE: diff --git a/usr/src/cmd/ztest/ztest.c b/usr/src/cmd/ztest/ztest.c index 6d4da807e8..63acd0c3aa 100644 --- a/usr/src/cmd/ztest/ztest.c +++ b/usr/src/cmd/ztest/ztest.c @@ -972,7 +972,7 @@ ztest_dsl_prop_set_uint64(char *osname, zfs_prop_t prop, uint64_t value, ztest_record_enospc(FTAG); return (error); } - ASSERT0(error); + ASSERT3U(error, ==, 0); VERIFY3U(dsl_prop_get(osname, propname, sizeof (curval), 1, &curval, setpoint), ==, 0); @@ -1004,7 +1004,7 @@ ztest_spa_prop_set_uint64(zpool_prop_t prop, uint64_t value) ztest_record_enospc(FTAG); return (error); } - ASSERT0(error); + ASSERT3U(error, ==, 0); return (error); } @@ -1412,16 +1412,16 @@ ztest_replay_create(ztest_ds_t *zd, lr_create_t *lr, boolean_t byteswap) ASSERT(lr->lr_foid != 0); if (lr->lrz_type != DMU_OT_ZAP_OTHER) - VERIFY0(dmu_object_set_blocksize(os, lr->lr_foid, + VERIFY3U(0, ==, dmu_object_set_blocksize(os, lr->lr_foid, lr->lrz_blocksize, lr->lrz_ibshift, tx)); - VERIFY0(dmu_bonus_hold(os, lr->lr_foid, FTAG, &db)); + VERIFY3U(0, ==, dmu_bonus_hold(os, lr->lr_foid, FTAG, &db)); bbt = ztest_bt_bonus(db); dmu_buf_will_dirty(db, tx); ztest_bt_generate(bbt, os, lr->lr_foid, -1ULL, lr->lr_gen, txg, txg); dmu_buf_rele(db, FTAG); - VERIFY0(zap_add(os, lr->lr_doid, name, sizeof (uint64_t), 1, + VERIFY3U(0, ==, zap_add(os, lr->lr_doid, name, sizeof (uint64_t), 1, &lr->lr_foid, tx)); (void) ztest_log_create(zd, tx, lr); @@ -1446,13 +1446,13 @@ ztest_replay_remove(ztest_ds_t *zd, lr_remove_t *lr, boolean_t byteswap) ASSERT(lr->lr_doid == ZTEST_DIROBJ); ASSERT(name[0] != '\0'); - VERIFY0( + VERIFY3U(0, ==, zap_lookup(os, lr->lr_doid, name, sizeof (object), 1, &object)); ASSERT(object != 0); ztest_object_lock(zd, object, RL_WRITER); - VERIFY0(dmu_object_info(os, object, &doi)); + VERIFY3U(0, ==, dmu_object_info(os, object, &doi)); tx = dmu_tx_create(os); @@ -1466,12 +1466,12 @@ ztest_replay_remove(ztest_ds_t *zd, lr_remove_t *lr, boolean_t byteswap) } if (doi.doi_type == DMU_OT_ZAP_OTHER) { - VERIFY0(zap_destroy(os, object, tx)); + VERIFY3U(0, ==, zap_destroy(os, object, tx)); } else { - VERIFY0(dmu_object_free(os, object, tx)); + VERIFY3U(0, ==, dmu_object_free(os, object, tx)); } - VERIFY0(zap_remove(os, lr->lr_doid, name, tx)); + VERIFY3U(0, ==, zap_remove(os, lr->lr_doid, name, tx)); (void) ztest_log_remove(zd, tx, lr, object); @@ -1521,7 +1521,7 @@ ztest_replay_write(ztest_ds_t *zd, lr_write_t *lr, boolean_t byteswap) ztest_object_lock(zd, lr->lr_foid, RL_READER); rl = ztest_range_lock(zd, lr->lr_foid, offset, length, RL_WRITER); - VERIFY0(dmu_bonus_hold(os, lr->lr_foid, FTAG, &db)); + VERIFY3U(0, ==, dmu_bonus_hold(os, lr->lr_foid, FTAG, &db)); dmu_object_info_from_db(db, &doi); @@ -1660,7 +1660,7 @@ ztest_replay_setattr(ztest_ds_t *zd, lr_setattr_t *lr, boolean_t byteswap) ztest_object_lock(zd, lr->lr_foid, RL_WRITER); - VERIFY0(dmu_bonus_hold(os, lr->lr_foid, FTAG, &db)); + VERIFY3U(0, ==, dmu_bonus_hold(os, lr->lr_foid, FTAG, &db)); tx = dmu_tx_create(os); dmu_tx_hold_bonus(tx, lr->lr_foid); @@ -1701,7 +1701,7 @@ ztest_replay_setattr(ztest_ds_t *zd, lr_setattr_t *lr, boolean_t byteswap) ASSERT3U(lr->lr_size, >=, sizeof (*bbt)); ASSERT3U(lr->lr_size, <=, db->db_size); - VERIFY0(dmu_set_bonus(db, lr->lr_size, tx)); + VERIFY3U(dmu_set_bonus(db, lr->lr_size, tx), ==, 0); bbt = ztest_bt_bonus(db); ztest_bt_generate(bbt, os, lr->lr_foid, -1ULL, lr->lr_mode, txg, crtxg); @@ -1893,7 +1893,7 @@ ztest_lookup(ztest_ds_t *zd, ztest_od_t *od, int count) ASSERT(missing == 0); /* there should be no gaps */ ztest_object_lock(zd, od->od_object, RL_READER); - VERIFY0(dmu_bonus_hold(zd->zd_os, + VERIFY3U(0, ==, dmu_bonus_hold(zd->zd_os, od->od_object, FTAG, &db)); dmu_object_info_from_db(db, &doi); bbt = ztest_bt_bonus(db); @@ -2271,7 +2271,7 @@ ztest_spa_create_destroy(ztest_ds_t *zd, uint64_t id) nvroot = make_vdev_root("/dev/bogus", NULL, 0, 0, 0, 0, 0, 1); VERIFY3U(EEXIST, ==, spa_create(zo->zo_pool, nvroot, NULL, NULL)); nvlist_free(nvroot); - VERIFY0(spa_open(zo->zo_pool, &spa, FTAG)); + VERIFY3U(0, ==, spa_open(zo->zo_pool, &spa, FTAG)); VERIFY3U(EBUSY, ==, spa_destroy(zo->zo_pool)); spa_close(spa, FTAG); @@ -3030,11 +3030,11 @@ ztest_objset_destroy_cb(const char *name, void *arg) /* * Verify that the dataset contains a directory object. */ - VERIFY0(dmu_objset_hold(name, FTAG, &os)); + VERIFY3U(0, ==, dmu_objset_hold(name, FTAG, &os)); error = dmu_object_info(os, ZTEST_DIROBJ, &doi); if (error != ENOENT) { /* We could have crashed in the middle of destroying it */ - ASSERT0(error); + ASSERT3U(error, ==, 0); ASSERT3U(doi.doi_type, ==, DMU_OT_ZAP_OTHER); ASSERT3S(doi.doi_physical_blocks_512, >=, 0); } @@ -3043,7 +3043,7 @@ ztest_objset_destroy_cb(const char *name, void *arg) /* * Destroy the dataset. */ - VERIFY0(dmu_objset_destroy(name, B_FALSE)); + VERIFY3U(0, ==, dmu_objset_destroy(name, B_FALSE)); return (0); } @@ -3136,7 +3136,8 @@ ztest_dmu_objset_create_destroy(ztest_ds_t *zd, uint64_t id) fatal(0, "dmu_objset_create(%s) = %d", name, error); } - VERIFY0(dmu_objset_own(name, DMU_OST_OTHER, B_FALSE, FTAG, &os)); + VERIFY3U(0, ==, + dmu_objset_own(name, DMU_OST_OTHER, B_FALSE, FTAG, &os)); ztest_zd_init(&zdtmp, NULL, os); @@ -3165,7 +3166,7 @@ ztest_dmu_objset_create_destroy(ztest_ds_t *zd, uint64_t id) /* * Verify that we can hold an objset that is also owned. */ - VERIFY0(dmu_objset_hold(name, FTAG, &os2)); + VERIFY3U(0, ==, dmu_objset_hold(name, FTAG, &os2)); dmu_objset_rele(os2, FTAG); /* @@ -3442,10 +3443,10 @@ ztest_dmu_read_write(ztest_ds_t *zd, uint64_t id) */ error = dmu_read(os, packobj, packoff, packsize, packbuf, DMU_READ_PREFETCH); - ASSERT0(error); + ASSERT3U(error, ==, 0); error = dmu_read(os, bigobj, bigoff, bigsize, bigbuf, DMU_READ_PREFETCH); - ASSERT0(error); + ASSERT3U(error, ==, 0); /* * Get a tx for the mods to both packobj and bigobj. @@ -3685,7 +3686,7 @@ ztest_dmu_read_write_zcopy(ztest_ds_t *zd, uint64_t id) packbuf = umem_zalloc(packsize, UMEM_NOFAIL); bigbuf = umem_zalloc(bigsize, UMEM_NOFAIL); - VERIFY0(dmu_bonus_hold(os, bigobj, FTAG, &bonus_db)); + VERIFY3U(0, ==, dmu_bonus_hold(os, bigobj, FTAG, &bonus_db)); bigbuf_arcbufs = umem_zalloc(2 * s * sizeof (arc_buf_t *), UMEM_NOFAIL); @@ -3755,10 +3756,10 @@ ztest_dmu_read_write_zcopy(ztest_ds_t *zd, uint64_t id) if (i != 0 || ztest_random(2) != 0) { error = dmu_read(os, packobj, packoff, packsize, packbuf, DMU_READ_PREFETCH); - ASSERT0(error); + ASSERT3U(error, ==, 0); error = dmu_read(os, bigobj, bigoff, bigsize, bigbuf, DMU_READ_PREFETCH); - ASSERT0(error); + ASSERT3U(error, ==, 0); } compare_and_update_pbbufs(s, packbuf, bigbuf, bigsize, n, chunksize, txg); @@ -3937,18 +3938,19 @@ ztest_zap(ztest_ds_t *zd, uint64_t id) return; for (i = 0; i < 2; i++) { value[i] = i; - VERIFY0(zap_add(os, object, hc[i], sizeof (uint64_t), + VERIFY3U(0, ==, zap_add(os, object, hc[i], sizeof (uint64_t), 1, &value[i], tx)); } for (i = 0; i < 2; i++) { VERIFY3U(EEXIST, ==, zap_add(os, object, hc[i], sizeof (uint64_t), 1, &value[i], tx)); - VERIFY0(zap_length(os, object, hc[i], &zl_intsize, &zl_ints)); + VERIFY3U(0, ==, + zap_length(os, object, hc[i], &zl_intsize, &zl_ints)); ASSERT3U(zl_intsize, ==, sizeof (uint64_t)); ASSERT3U(zl_ints, ==, 1); } for (i = 0; i < 2; i++) { - VERIFY0(zap_remove(os, object, hc[i], tx)); + VERIFY3U(0, ==, zap_remove(os, object, hc[i], tx)); } dmu_tx_commit(tx); @@ -4009,9 +4011,9 @@ ztest_zap(ztest_ds_t *zd, uint64_t id) for (i = 0; i < ints; i++) value[i] = txg + object + i; - VERIFY0(zap_update(os, object, txgname, sizeof (uint64_t), + VERIFY3U(0, ==, zap_update(os, object, txgname, sizeof (uint64_t), 1, &txg, tx)); - VERIFY0(zap_update(os, object, propname, sizeof (uint64_t), + VERIFY3U(0, ==, zap_update(os, object, propname, sizeof (uint64_t), ints, value, tx)); dmu_tx_commit(tx); @@ -4028,15 +4030,15 @@ ztest_zap(ztest_ds_t *zd, uint64_t id) if (error == ENOENT) return; - ASSERT0(error); + ASSERT3U(error, ==, 0); tx = dmu_tx_create(os); dmu_tx_hold_zap(tx, object, B_TRUE, NULL); txg = ztest_tx_assign(tx, TXG_MIGHTWAIT, FTAG); if (txg == 0) return; - VERIFY0(zap_remove(os, object, txgname, tx)); - VERIFY0(zap_remove(os, object, propname, tx)); + VERIFY3U(0, ==, zap_remove(os, object, txgname, tx)); + VERIFY3U(0, ==, zap_remove(os, object, propname, tx)); dmu_tx_commit(tx); } @@ -4224,7 +4226,7 @@ ztest_commit_callback(void *arg, int error) data->zcd_called = B_TRUE; if (error == ECANCELED) { - ASSERT0(data->zcd_txg); + ASSERT3U(data->zcd_txg, ==, 0); ASSERT(!data->zcd_added); /* @@ -4429,7 +4431,7 @@ ztest_spa_prop_get_set(ztest_ds_t *zd, uint64_t id) (void) ztest_spa_prop_set_uint64(ZPOOL_PROP_DEDUPDITTO, ZIO_DEDUPDITTO_MIN + ztest_random(ZIO_DEDUPDITTO_MIN)); - VERIFY0(spa_prop_get(ztest_spa, &props)); + VERIFY3U(spa_prop_get(ztest_spa, &props), ==, 0); if (ztest_opts.zo_verbose >= 6) dump_nvlist(props, 4); @@ -4885,7 +4887,7 @@ ztest_spa_rename(ztest_ds_t *zd, uint64_t id) /* * Do the rename */ - VERIFY0(spa_rename(oldname, newname)); + VERIFY3U(0, ==, spa_rename(oldname, newname)); /* * Try to open it under the old name, which shouldn't exist @@ -4895,7 +4897,7 @@ ztest_spa_rename(ztest_ds_t *zd, uint64_t id) /* * Open it under the new name and make sure it's still the same spa_t. */ - VERIFY0(spa_open(newname, &spa, FTAG)); + VERIFY3U(0, ==, spa_open(newname, &spa, FTAG)); ASSERT(spa == ztest_spa); spa_close(spa, FTAG); @@ -4903,12 +4905,12 @@ ztest_spa_rename(ztest_ds_t *zd, uint64_t id) /* * Rename it back to the original */ - VERIFY0(spa_rename(newname, oldname)); + VERIFY3U(0, ==, spa_rename(newname, oldname)); /* * Make sure it can still be opened */ - VERIFY0(spa_open(oldname, &spa, FTAG)); + VERIFY3U(0, ==, spa_open(oldname, &spa, FTAG)); ASSERT(spa == ztest_spa); spa_close(spa, FTAG); @@ -5008,7 +5010,7 @@ ztest_spa_import_export(char *oldname, char *newname) /* * Get the pool's configuration and guid. */ - VERIFY0(spa_open(oldname, &spa, FTAG)); + VERIFY3U(0, ==, spa_open(oldname, &spa, FTAG)); /* * Kick off a scrub to tickle scrub/export races. @@ -5024,7 +5026,7 @@ ztest_spa_import_export(char *oldname, char *newname) /* * Export it. */ - VERIFY0(spa_export(oldname, &config, B_FALSE, B_FALSE)); + VERIFY3U(0, ==, spa_export(oldname, &config, B_FALSE, B_FALSE)); ztest_walk_pool_directory("pools after export"); @@ -5038,7 +5040,7 @@ ztest_spa_import_export(char *oldname, char *newname) /* * Import it under the new name. */ - VERIFY0(spa_import(newname, config, NULL, 0)); + VERIFY3U(0, ==, spa_import(newname, config, NULL, 0)); ztest_walk_pool_directory("pools after import"); @@ -5060,7 +5062,7 @@ ztest_spa_import_export(char *oldname, char *newname) /* * Verify that we can open and close the pool using the new name. */ - VERIFY0(spa_open(newname, &spa, FTAG)); + VERIFY3U(0, ==, spa_open(newname, &spa, FTAG)); ASSERT(pool_guid == spa_guid(spa)); spa_close(spa, FTAG); @@ -5218,7 +5220,7 @@ ztest_dataset_dirobj_verify(ztest_ds_t *zd) * That's because zap_count() returns the open-context value, * while dmu_objset_space() returns the rootbp fill count. */ - VERIFY0(zap_count(zd->zd_os, ZTEST_DIROBJ, &dirobjs)); + VERIFY3U(0, ==, zap_count(zd->zd_os, ZTEST_DIROBJ, &dirobjs)); dmu_objset_space(zd->zd_os, &scratch, &scratch, &usedobjs, &scratch); ASSERT3U(dirobjs + 1, ==, usedobjs); } @@ -5245,7 +5247,7 @@ ztest_dataset_open(int d) } ASSERT(error == 0 || error == EEXIST); - VERIFY0(dmu_objset_hold(name, zd, &os)); + VERIFY3U(dmu_objset_hold(name, zd, &os), ==, 0); (void) rw_unlock(&ztest_name_lock); ztest_zd_init(zd, ZTEST_GET_SHARED_DS(d), os); @@ -5334,7 +5336,7 @@ ztest_run(ztest_shared_t *zs) spa->spa_debug = B_TRUE; ztest_spa = spa; - VERIFY0(dmu_objset_hold(ztest_opts.zo_pool, FTAG, &os)); + VERIFY3U(0, ==, dmu_objset_hold(ztest_opts.zo_pool, FTAG, &os)); zs->zs_guid = dmu_objset_fsid_guid(os); dmu_objset_rele(os, FTAG); @@ -5476,8 +5478,8 @@ ztest_freeze(void) (void) printf("testing spa_freeze()...\n"); kernel_init(FREAD | FWRITE); - VERIFY0(spa_open(ztest_opts.zo_pool, &spa, FTAG)); - VERIFY0(ztest_dataset_open(0)); + VERIFY3U(0, ==, spa_open(ztest_opts.zo_pool, &spa, FTAG)); + VERIFY3U(0, ==, ztest_dataset_open(0)); /* * Force the first log block to be transactionally allocated. @@ -5528,8 +5530,8 @@ ztest_freeze(void) * Open and close the pool and dataset to induce log replay. */ kernel_init(FREAD | FWRITE); - VERIFY0(spa_open(ztest_opts.zo_pool, &spa, FTAG)); - VERIFY0(ztest_dataset_open(0)); + VERIFY3U(0, ==, spa_open(ztest_opts.zo_pool, &spa, FTAG)); + VERIFY3U(0, ==, ztest_dataset_open(0)); ztest_dataset_close(0); spa_close(spa, FTAG); kernel_fini(); @@ -5602,12 +5604,12 @@ ztest_init(ztest_shared_t *zs) char buf[1024]; (void) snprintf(buf, sizeof (buf), "feature@%s", spa_feature_table[i].fi_uname); - VERIFY0(nvlist_add_uint64(props, buf, 0)); + VERIFY3U(0, ==, nvlist_add_uint64(props, buf, 0)); } - VERIFY0(spa_create(ztest_opts.zo_pool, nvroot, props, NULL)); + VERIFY3U(0, ==, spa_create(ztest_opts.zo_pool, nvroot, props, NULL)); nvlist_free(nvroot); - VERIFY0(spa_open(ztest_opts.zo_pool, &spa, FTAG)); + VERIFY3U(0, ==, spa_open(ztest_opts.zo_pool, &spa, FTAG)); zs->zs_metaslab_sz = 1ULL << spa->spa_root_vdev->vdev_child[0]->vdev_ms_shift; @@ -5664,7 +5666,7 @@ setup_hdr(void) PROT_READ | PROT_WRITE, MAP_SHARED, ZTEST_FD_DATA, 0); ASSERT(hdr != MAP_FAILED); - VERIFY0(ftruncate(ZTEST_FD_DATA, sizeof (ztest_shared_hdr_t))); + VERIFY3U(0, ==, ftruncate(ZTEST_FD_DATA, sizeof (ztest_shared_hdr_t))); hdr->zh_hdr_size = sizeof (ztest_shared_hdr_t); hdr->zh_opts_size = sizeof (ztest_shared_opts_t); @@ -5675,7 +5677,7 @@ setup_hdr(void) hdr->zh_ds_count = ztest_opts.zo_datasets; size = shared_data_size(hdr); - VERIFY0(ftruncate(ZTEST_FD_DATA, size)); + VERIFY3U(0, ==, ftruncate(ZTEST_FD_DATA, size)); (void) munmap((caddr_t)hdr, P2ROUNDUP(sizeof (*hdr), getpagesize())); } diff --git a/usr/src/common/nvpair/fnvpair.c b/usr/src/common/nvpair/fnvpair.c index 8c5591c0b2..8d1bb98be3 100644 --- a/usr/src/common/nvpair/fnvpair.c +++ b/usr/src/common/nvpair/fnvpair.c @@ -50,7 +50,7 @@ nvlist_t * fnvlist_alloc(void) { nvlist_t *nvl; - VERIFY0(nvlist_alloc(&nvl, NV_UNIQUE_NAME, KM_SLEEP)); + VERIFY3U(nvlist_alloc(&nvl, NV_UNIQUE_NAME, KM_SLEEP), ==, 0); return (nvl); } @@ -64,7 +64,7 @@ size_t fnvlist_size(nvlist_t *nvl) { size_t size; - VERIFY0(nvlist_size(nvl, &size, NV_ENCODE_NATIVE)); + VERIFY3U(nvlist_size(nvl, &size, NV_ENCODE_NATIVE), ==, 0); return (size); } @@ -96,7 +96,7 @@ nvlist_t * fnvlist_unpack(char *buf, size_t buflen) { nvlist_t *rv; - VERIFY0(nvlist_unpack(buf, buflen, &rv, KM_SLEEP)); + VERIFY3U(nvlist_unpack(buf, buflen, &rv, KM_SLEEP), ==, 0); return (rv); } @@ -104,195 +104,195 @@ nvlist_t * fnvlist_dup(nvlist_t *nvl) { nvlist_t *rv; - VERIFY0(nvlist_dup(nvl, &rv, KM_SLEEP)); + VERIFY3U(nvlist_dup(nvl, &rv, KM_SLEEP), ==, 0); return (rv); } void fnvlist_merge(nvlist_t *dst, nvlist_t *src) { - VERIFY0(nvlist_merge(dst, src, KM_SLEEP)); + VERIFY3U(nvlist_merge(dst, src, KM_SLEEP), ==, 0); } void fnvlist_add_boolean(nvlist_t *nvl, const char *name) { - VERIFY0(nvlist_add_boolean(nvl, name)); + VERIFY3U(nvlist_add_boolean(nvl, name), ==, 0); } void fnvlist_add_boolean_value(nvlist_t *nvl, const char *name, boolean_t val) { - VERIFY0(nvlist_add_boolean_value(nvl, name, val)); + VERIFY3U(nvlist_add_boolean_value(nvl, name, val), ==, 0); } void fnvlist_add_byte(nvlist_t *nvl, const char *name, uchar_t val) { - VERIFY0(nvlist_add_byte(nvl, name, val)); + VERIFY3U(nvlist_add_byte(nvl, name, val), ==, 0); } void fnvlist_add_int8(nvlist_t *nvl, const char *name, int8_t val) { - VERIFY0(nvlist_add_int8(nvl, name, val)); + VERIFY3U(nvlist_add_int8(nvl, name, val), ==, 0); } void fnvlist_add_uint8(nvlist_t *nvl, const char *name, uint8_t val) { - VERIFY0(nvlist_add_uint8(nvl, name, val)); + VERIFY3U(nvlist_add_uint8(nvl, name, val), ==, 0); } void fnvlist_add_int16(nvlist_t *nvl, const char *name, int16_t val) { - VERIFY0(nvlist_add_int16(nvl, name, val)); + VERIFY3U(nvlist_add_int16(nvl, name, val), ==, 0); } void fnvlist_add_uint16(nvlist_t *nvl, const char *name, uint16_t val) { - VERIFY0(nvlist_add_uint16(nvl, name, val)); + VERIFY3U(nvlist_add_uint16(nvl, name, val), ==, 0); } void fnvlist_add_int32(nvlist_t *nvl, const char *name, int32_t val) { - VERIFY0(nvlist_add_int32(nvl, name, val)); + VERIFY3U(nvlist_add_int32(nvl, name, val), ==, 0); } void fnvlist_add_uint32(nvlist_t *nvl, const char *name, uint32_t val) { - VERIFY0(nvlist_add_uint32(nvl, name, val)); + VERIFY3U(nvlist_add_uint32(nvl, name, val), ==, 0); } void fnvlist_add_int64(nvlist_t *nvl, const char *name, int64_t val) { - VERIFY0(nvlist_add_int64(nvl, name, val)); + VERIFY3U(nvlist_add_int64(nvl, name, val), ==, 0); } void fnvlist_add_uint64(nvlist_t *nvl, const char *name, uint64_t val) { - VERIFY0(nvlist_add_uint64(nvl, name, val)); + VERIFY3U(nvlist_add_uint64(nvl, name, val), ==, 0); } void fnvlist_add_string(nvlist_t *nvl, const char *name, const char *val) { - VERIFY0(nvlist_add_string(nvl, name, val)); + VERIFY3U(nvlist_add_string(nvl, name, val), ==, 0); } void fnvlist_add_nvlist(nvlist_t *nvl, const char *name, nvlist_t *val) { - VERIFY0(nvlist_add_nvlist(nvl, name, val)); + VERIFY3U(nvlist_add_nvlist(nvl, name, val), ==, 0); } void fnvlist_add_nvpair(nvlist_t *nvl, nvpair_t *pair) { - VERIFY0(nvlist_add_nvpair(nvl, pair)); + VERIFY3U(nvlist_add_nvpair(nvl, pair), ==, 0); } void fnvlist_add_boolean_array(nvlist_t *nvl, const char *name, boolean_t *val, uint_t n) { - VERIFY0(nvlist_add_boolean_array(nvl, name, val, n)); + VERIFY3U(nvlist_add_boolean_array(nvl, name, val, n), ==, 0); } void fnvlist_add_byte_array(nvlist_t *nvl, const char *name, uchar_t *val, uint_t n) { - VERIFY0(nvlist_add_byte_array(nvl, name, val, n)); + VERIFY3U(nvlist_add_byte_array(nvl, name, val, n), ==, 0); } void fnvlist_add_int8_array(nvlist_t *nvl, const char *name, int8_t *val, uint_t n) { - VERIFY0(nvlist_add_int8_array(nvl, name, val, n)); + VERIFY3U(nvlist_add_int8_array(nvl, name, val, n), ==, 0); } void fnvlist_add_uint8_array(nvlist_t *nvl, const char *name, uint8_t *val, uint_t n) { - VERIFY0(nvlist_add_uint8_array(nvl, name, val, n)); + VERIFY3U(nvlist_add_uint8_array(nvl, name, val, n), ==, 0); } void fnvlist_add_int16_array(nvlist_t *nvl, const char *name, int16_t *val, uint_t n) { - VERIFY0(nvlist_add_int16_array(nvl, name, val, n)); + VERIFY3U(nvlist_add_int16_array(nvl, name, val, n), ==, 0); } void fnvlist_add_uint16_array(nvlist_t *nvl, const char *name, uint16_t *val, uint_t n) { - VERIFY0(nvlist_add_uint16_array(nvl, name, val, n)); + VERIFY3U(nvlist_add_uint16_array(nvl, name, val, n), ==, 0); } void fnvlist_add_int32_array(nvlist_t *nvl, const char *name, int32_t *val, uint_t n) { - VERIFY0(nvlist_add_int32_array(nvl, name, val, n)); + VERIFY3U(nvlist_add_int32_array(nvl, name, val, n), ==, 0); } void fnvlist_add_uint32_array(nvlist_t *nvl, const char *name, uint32_t *val, uint_t n) { - VERIFY0(nvlist_add_uint32_array(nvl, name, val, n)); + VERIFY3U(nvlist_add_uint32_array(nvl, name, val, n), ==, 0); } void fnvlist_add_int64_array(nvlist_t *nvl, const char *name, int64_t *val, uint_t n) { - VERIFY0(nvlist_add_int64_array(nvl, name, val, n)); + VERIFY3U(nvlist_add_int64_array(nvl, name, val, n), ==, 0); } void fnvlist_add_uint64_array(nvlist_t *nvl, const char *name, uint64_t *val, uint_t n) { - VERIFY0(nvlist_add_uint64_array(nvl, name, val, n)); + VERIFY3U(nvlist_add_uint64_array(nvl, name, val, n), ==, 0); } void fnvlist_add_string_array(nvlist_t *nvl, const char *name, char * const *val, uint_t n) { - VERIFY0(nvlist_add_string_array(nvl, name, val, n)); + VERIFY3U(nvlist_add_string_array(nvl, name, val, n), ==, 0); } void fnvlist_add_nvlist_array(nvlist_t *nvl, const char *name, nvlist_t **val, uint_t n) { - VERIFY0(nvlist_add_nvlist_array(nvl, name, val, n)); + VERIFY3U(nvlist_add_nvlist_array(nvl, name, val, n), ==, 0); } void fnvlist_remove(nvlist_t *nvl, const char *name) { - VERIFY0(nvlist_remove_all(nvl, name)); + VERIFY3U(nvlist_remove_all(nvl, name), ==, 0); } void fnvlist_remove_nvpair(nvlist_t *nvl, nvpair_t *pair) { - VERIFY0(nvlist_remove_nvpair(nvl, pair)); + VERIFY3U(nvlist_remove_nvpair(nvl, pair), ==, 0); } nvpair_t * fnvlist_lookup_nvpair(nvlist_t *nvl, const char *name) { nvpair_t *rv; - VERIFY0(nvlist_lookup_nvpair(nvl, name, &rv)); + VERIFY3U(nvlist_lookup_nvpair(nvl, name, &rv), ==, 0); return (rv); } @@ -307,7 +307,7 @@ boolean_t fnvlist_lookup_boolean_value(nvlist_t *nvl, const char *name) { boolean_t rv; - VERIFY0(nvlist_lookup_boolean_value(nvl, name, &rv)); + VERIFY3U(nvlist_lookup_boolean_value(nvl, name, &rv), ==, 0); return (rv); } @@ -315,7 +315,7 @@ uchar_t fnvlist_lookup_byte(nvlist_t *nvl, const char *name) { uchar_t rv; - VERIFY0(nvlist_lookup_byte(nvl, name, &rv)); + VERIFY3U(nvlist_lookup_byte(nvl, name, &rv), ==, 0); return (rv); } @@ -323,7 +323,7 @@ int8_t fnvlist_lookup_int8(nvlist_t *nvl, const char *name) { int8_t rv; - VERIFY0(nvlist_lookup_int8(nvl, name, &rv)); + VERIFY3U(nvlist_lookup_int8(nvl, name, &rv), ==, 0); return (rv); } @@ -331,7 +331,7 @@ int16_t fnvlist_lookup_int16(nvlist_t *nvl, const char *name) { int16_t rv; - VERIFY0(nvlist_lookup_int16(nvl, name, &rv)); + VERIFY3U(nvlist_lookup_int16(nvl, name, &rv), ==, 0); return (rv); } @@ -339,7 +339,7 @@ int32_t fnvlist_lookup_int32(nvlist_t *nvl, const char *name) { int32_t rv; - VERIFY0(nvlist_lookup_int32(nvl, name, &rv)); + VERIFY3U(nvlist_lookup_int32(nvl, name, &rv), ==, 0); return (rv); } @@ -347,7 +347,7 @@ int64_t fnvlist_lookup_int64(nvlist_t *nvl, const char *name) { int64_t rv; - VERIFY0(nvlist_lookup_int64(nvl, name, &rv)); + VERIFY3U(nvlist_lookup_int64(nvl, name, &rv), ==, 0); return (rv); } @@ -355,7 +355,7 @@ uint8_t fnvlist_lookup_uint8_t(nvlist_t *nvl, const char *name) { uint8_t rv; - VERIFY0(nvlist_lookup_uint8(nvl, name, &rv)); + VERIFY3U(nvlist_lookup_uint8(nvl, name, &rv), ==, 0); return (rv); } @@ -363,7 +363,7 @@ uint16_t fnvlist_lookup_uint16(nvlist_t *nvl, const char *name) { uint16_t rv; - VERIFY0(nvlist_lookup_uint16(nvl, name, &rv)); + VERIFY3U(nvlist_lookup_uint16(nvl, name, &rv), ==, 0); return (rv); } @@ -371,7 +371,7 @@ uint32_t fnvlist_lookup_uint32(nvlist_t *nvl, const char *name) { uint32_t rv; - VERIFY0(nvlist_lookup_uint32(nvl, name, &rv)); + VERIFY3U(nvlist_lookup_uint32(nvl, name, &rv), ==, 0); return (rv); } @@ -379,7 +379,7 @@ uint64_t fnvlist_lookup_uint64(nvlist_t *nvl, const char *name) { uint64_t rv; - VERIFY0(nvlist_lookup_uint64(nvl, name, &rv)); + VERIFY3U(nvlist_lookup_uint64(nvl, name, &rv), ==, 0); return (rv); } @@ -387,7 +387,7 @@ char * fnvlist_lookup_string(nvlist_t *nvl, const char *name) { char *rv; - VERIFY0(nvlist_lookup_string(nvl, name, &rv)); + VERIFY3U(nvlist_lookup_string(nvl, name, &rv), ==, 0); return (rv); } @@ -395,7 +395,7 @@ nvlist_t * fnvlist_lookup_nvlist(nvlist_t *nvl, const char *name) { nvlist_t *rv; - VERIFY0(nvlist_lookup_nvlist(nvl, name, &rv)); + VERIFY3U(nvlist_lookup_nvlist(nvl, name, &rv), ==, 0); return (rv); } @@ -403,7 +403,7 @@ boolean_t fnvpair_value_boolean_value(nvpair_t *nvp) { boolean_t rv; - VERIFY0(nvpair_value_boolean_value(nvp, &rv)); + VERIFY3U(nvpair_value_boolean_value(nvp, &rv), ==, 0); return (rv); } @@ -411,7 +411,7 @@ uchar_t fnvpair_value_byte(nvpair_t *nvp) { uchar_t rv; - VERIFY0(nvpair_value_byte(nvp, &rv)); + VERIFY3U(nvpair_value_byte(nvp, &rv), ==, 0); return (rv); } @@ -419,7 +419,7 @@ int8_t fnvpair_value_int8(nvpair_t *nvp) { int8_t rv; - VERIFY0(nvpair_value_int8(nvp, &rv)); + VERIFY3U(nvpair_value_int8(nvp, &rv), ==, 0); return (rv); } @@ -427,7 +427,7 @@ int16_t fnvpair_value_int16(nvpair_t *nvp) { int16_t rv; - VERIFY0(nvpair_value_int16(nvp, &rv)); + VERIFY3U(nvpair_value_int16(nvp, &rv), ==, 0); return (rv); } @@ -435,7 +435,7 @@ int32_t fnvpair_value_int32(nvpair_t *nvp) { int32_t rv; - VERIFY0(nvpair_value_int32(nvp, &rv)); + VERIFY3U(nvpair_value_int32(nvp, &rv), ==, 0); return (rv); } @@ -443,7 +443,7 @@ int64_t fnvpair_value_int64(nvpair_t *nvp) { int64_t rv; - VERIFY0(nvpair_value_int64(nvp, &rv)); + VERIFY3U(nvpair_value_int64(nvp, &rv), ==, 0); return (rv); } @@ -451,7 +451,7 @@ uint8_t fnvpair_value_uint8_t(nvpair_t *nvp) { uint8_t rv; - VERIFY0(nvpair_value_uint8(nvp, &rv)); + VERIFY3U(nvpair_value_uint8(nvp, &rv), ==, 0); return (rv); } @@ -459,7 +459,7 @@ uint16_t fnvpair_value_uint16(nvpair_t *nvp) { uint16_t rv; - VERIFY0(nvpair_value_uint16(nvp, &rv)); + VERIFY3U(nvpair_value_uint16(nvp, &rv), ==, 0); return (rv); } @@ -467,7 +467,7 @@ uint32_t fnvpair_value_uint32(nvpair_t *nvp) { uint32_t rv; - VERIFY0(nvpair_value_uint32(nvp, &rv)); + VERIFY3U(nvpair_value_uint32(nvp, &rv), ==, 0); return (rv); } @@ -475,7 +475,7 @@ uint64_t fnvpair_value_uint64(nvpair_t *nvp) { uint64_t rv; - VERIFY0(nvpair_value_uint64(nvp, &rv)); + VERIFY3U(nvpair_value_uint64(nvp, &rv), ==, 0); return (rv); } @@ -483,7 +483,7 @@ char * fnvpair_value_string(nvpair_t *nvp) { char *rv; - VERIFY0(nvpair_value_string(nvp, &rv)); + VERIFY3U(nvpair_value_string(nvp, &rv), ==, 0); return (rv); } @@ -491,6 +491,6 @@ nvlist_t * fnvpair_value_nvlist(nvpair_t *nvp) { nvlist_t *rv; - VERIFY0(nvpair_value_nvlist(nvp, &rv)); + VERIFY3U(nvpair_value_nvlist(nvp, &rv), ==, 0); return (rv); } diff --git a/usr/src/lib/libc/port/threads/assfail.c b/usr/src/lib/libc/port/threads/assfail.c index 7a98884f4b..7cf0ea98e6 100644 --- a/usr/src/lib/libc/port/threads/assfail.c +++ b/usr/src/lib/libc/port/threads/assfail.c @@ -452,11 +452,11 @@ assfail3(const char *assertion, uintmax_t lv, const char *op, uintmax_t rv, { char buf[1000]; (void) strcpy(buf, assertion); - (void) strcat(buf, " ("); + (void) strcat(buf, " (0x"); ultos((uint64_t)lv, 16, buf + strlen(buf)); (void) strcat(buf, " "); (void) strcat(buf, op); - (void) strcat(buf, " "); + (void) strcat(buf, " 0x"); ultos((uint64_t)rv, 16, buf + strlen(buf)); (void) strcat(buf, ")"); __assfail(buf, filename, line_num); diff --git a/usr/src/lib/libzpool/Makefile.com b/usr/src/lib/libzpool/Makefile.com index 2485f7350f..571881a47e 100644 --- a/usr/src/lib/libzpool/Makefile.com +++ b/usr/src/lib/libzpool/Makefile.com @@ -20,7 +20,6 @@ # # # Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. -# Copyright (c) 2012 by Delphix. All rights reserved. # LIBRARY= libzpool.a @@ -58,9 +57,9 @@ C99MODE= -xc99=%all C99LMODE= -Xc99=%all CFLAGS += -g $(CCVERBOSE) $(CNOGLOBAL) -CFLAGS64 += -g $(CCVERBOSE) $(CNOGLOBAL) +CFLAGS64 += -g $(CCVERBOSE) $(CNOGLOBAL) LDLIBS += -lcmdutils -lumem -lavl -lnvpair -lz -lc -lsysevent -lmd -CPPFLAGS += $(INCS) -DDEBUG +CPPFLAGS += $(INCS) .KEEP_STATE: diff --git a/usr/src/lib/libzpool/common/sys/zfs_context.h b/usr/src/lib/libzpool/common/sys/zfs_context.h index fcde793514..39af927f71 100644 --- a/usr/src/lib/libzpool/common/sys/zfs_context.h +++ b/usr/src/lib/libzpool/common/sys/zfs_context.h @@ -36,6 +36,7 @@ extern "C" { #define _SYS_RWLOCK_H #define _SYS_CONDVAR_H #define _SYS_SYSTM_H +#define _SYS_DEBUG_H #define _SYS_T_LOCK_H #define _SYS_VNODE_H #define _SYS_VFS_H @@ -77,7 +78,6 @@ extern "C" { #include #include #include -#include /* * Debugging @@ -110,6 +110,60 @@ extern void vpanic(const char *, __va_list); extern int aok; +/* This definition is copied from assert.h. */ +#if defined(__STDC__) +#if __STDC_VERSION__ - 0 >= 199901L +#define zverify(EX) (void)((EX) || (aok) || \ + (__assert_c99(#EX, __FILE__, __LINE__, __func__), 0)) +#else +#define zverify(EX) (void)((EX) || (aok) || \ + (__assert(#EX, __FILE__, __LINE__), 0)) +#endif /* __STDC_VERSION__ - 0 >= 199901L */ +#else +#define zverify(EX) (void)((EX) || (aok) || \ + (_assert("EX", __FILE__, __LINE__), 0)) +#endif /* __STDC__ */ + + +#define VERIFY zverify +#define ASSERT zverify +#undef assert +#define assert zverify + +extern void __assert(const char *, const char *, int); + +#ifdef lint +#define VERIFY3_IMPL(x, y, z, t) if (x == z) ((void)0) +#else +/* BEGIN CSTYLED */ +#define VERIFY3_IMPL(LEFT, OP, RIGHT, TYPE) do { \ + const TYPE __left = (TYPE)(LEFT); \ + const TYPE __right = (TYPE)(RIGHT); \ + if (!(__left OP __right) && (!aok)) { \ + char *__buf = alloca(256); \ + (void) snprintf(__buf, 256, "%s %s %s (0x%llx %s 0x%llx)", \ + #LEFT, #OP, #RIGHT, \ + (u_longlong_t)__left, #OP, (u_longlong_t)__right); \ + __assert(__buf, __FILE__, __LINE__); \ + } \ +_NOTE(CONSTCOND) } while (0) +/* END CSTYLED */ +#endif /* lint */ + +#define VERIFY3S(x, y, z) VERIFY3_IMPL(x, y, z, int64_t) +#define VERIFY3U(x, y, z) VERIFY3_IMPL(x, y, z, uint64_t) +#define VERIFY3P(x, y, z) VERIFY3_IMPL(x, y, z, uintptr_t) + +#ifdef NDEBUG +#define ASSERT3S(x, y, z) ((void)0) +#define ASSERT3U(x, y, z) ((void)0) +#define ASSERT3P(x, y, z) ((void)0) +#else +#define ASSERT3S(x, y, z) VERIFY3S(x, y, z) +#define ASSERT3U(x, y, z) VERIFY3U(x, y, z) +#define ASSERT3P(x, y, z) VERIFY3P(x, y, z) +#endif + /* * DTrace SDT probes have different signatures in userland than they do in * kernel. If they're being used in kernel code, re-define them out of diff --git a/usr/src/uts/common/disp/sysdc.c b/usr/src/uts/common/disp/sysdc.c index c5d67deff5..e295eaf323 100644 --- a/usr/src/uts/common/disp/sysdc.c +++ b/usr/src/uts/common/disp/sysdc.c @@ -20,7 +20,6 @@ */ /* * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2012 by Delphix. All rights reserved. */ /* @@ -1306,12 +1305,12 @@ sysdc_thread_enter(kthread_t *t, uint_t dc, uint_t flags) sdp.sdp_maxpri = sysdc_maxpri; sdp.sdp_DC = MAX(MIN(dc, sysdc_maxDC), sysdc_minDC); - VERIFY0(CL_ALLOC(&buf, sysdccid, KM_SLEEP)); + VERIFY3U(CL_ALLOC(&buf, sysdccid, KM_SLEEP), ==, 0); ASSERT(t->t_lwp != NULL); ASSERT(t->t_cid == syscid); ASSERT(t->t_cldata == NULL); - VERIFY0(CL_CANEXIT(t, NULL)); - VERIFY0(CL_ENTERCLASS(t, sysdccid, &sdp, kcred, buf)); + VERIFY3U(CL_CANEXIT(t, NULL), ==, 0); + VERIFY3U(CL_ENTERCLASS(t, sysdccid, &sdp, kcred, buf), ==, 0); CL_EXITCLASS(syscid, NULL); } diff --git a/usr/src/uts/common/fs/zfs/arc.c b/usr/src/uts/common/fs/zfs/arc.c index 5744d4bdef..bd6bda5c9b 100644 --- a/usr/src/uts/common/fs/zfs/arc.c +++ b/usr/src/uts/common/fs/zfs/arc.c @@ -1010,7 +1010,7 @@ add_reference(arc_buf_hdr_t *ab, kmutex_t *hash_lock, void *tag) ASSERT(list_link_active(&ab->b_arc_node)); list_remove(list, ab); if (GHOST_STATE(ab->b_state)) { - ASSERT0(ab->b_datacnt); + ASSERT3U(ab->b_datacnt, ==, 0); ASSERT3P(ab->b_buf, ==, NULL); delta = ab->b_size; } @@ -1637,7 +1637,7 @@ arc_evict(arc_state_t *state, uint64_t spa, int64_t bytes, boolean_t recycle, hash_lock = HDR_LOCK(ab); have_lock = MUTEX_HELD(hash_lock); if (have_lock || mutex_tryenter(hash_lock)) { - ASSERT0(refcount_count(&ab->b_refcnt)); + ASSERT3U(refcount_count(&ab->b_refcnt), ==, 0); ASSERT(ab->b_datacnt > 0); while (ab->b_buf) { arc_buf_t *buf = ab->b_buf; @@ -2465,7 +2465,7 @@ arc_access(arc_buf_hdr_t *buf, kmutex_t *hash_lock) * This is a prefetch access... * move this block back to the MRU state. */ - ASSERT0(refcount_count(&buf->b_refcnt)); + ASSERT3U(refcount_count(&buf->b_refcnt), ==, 0); new_state = arc_mru; } @@ -2806,7 +2806,7 @@ top: /* this block is in the ghost cache */ ASSERT(GHOST_STATE(hdr->b_state)); ASSERT(!HDR_IO_IN_PROGRESS(hdr)); - ASSERT0(refcount_count(&hdr->b_refcnt)); + ASSERT3U(refcount_count(&hdr->b_refcnt), ==, 0); ASSERT(hdr->b_buf == NULL); /* if this is a prefetch, we don't have a reference */ @@ -4380,7 +4380,7 @@ l2arc_write_buffers(spa_t *spa, l2arc_dev_t *dev, uint64_t target_sz) mutex_exit(&l2arc_buflist_mtx); if (pio == NULL) { - ASSERT0(write_sz); + ASSERT3U(write_sz, ==, 0); kmem_cache_free(hdr_cache, head); return (0); } diff --git a/usr/src/uts/common/fs/zfs/bpobj.c b/usr/src/uts/common/fs/zfs/bpobj.c index c43bb2635e..022921c666 100644 --- a/usr/src/uts/common/fs/zfs/bpobj.c +++ b/usr/src/uts/common/fs/zfs/bpobj.c @@ -20,7 +20,7 @@ */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2012 by Delphix. All rights reserved. + * Copyright (c) 2011 by Delphix. All rights reserved. */ #include @@ -53,14 +53,14 @@ bpobj_free(objset_t *os, uint64_t obj, dmu_tx_t *tx) int epb; dmu_buf_t *dbuf = NULL; - VERIFY0(bpobj_open(&bpo, os, obj)); + VERIFY3U(0, ==, bpobj_open(&bpo, os, obj)); mutex_enter(&bpo.bpo_lock); if (!bpo.bpo_havesubobj || bpo.bpo_phys->bpo_subobjs == 0) goto out; - VERIFY0(dmu_object_info(os, bpo.bpo_phys->bpo_subobjs, &doi)); + VERIFY3U(0, ==, dmu_object_info(os, bpo.bpo_phys->bpo_subobjs, &doi)); epb = doi.doi_data_block_size / sizeof (uint64_t); for (i = bpo.bpo_phys->bpo_num_subobjs - 1; i >= 0; i--) { @@ -73,7 +73,7 @@ bpobj_free(objset_t *os, uint64_t obj, dmu_tx_t *tx) if (dbuf == NULL || dbuf->db_offset > offset) { if (dbuf) dmu_buf_rele(dbuf, FTAG); - VERIFY0(dmu_buf_hold(os, + VERIFY3U(0, ==, dmu_buf_hold(os, bpo.bpo_phys->bpo_subobjs, offset, FTAG, &dbuf, 0)); } @@ -87,13 +87,13 @@ bpobj_free(objset_t *os, uint64_t obj, dmu_tx_t *tx) dmu_buf_rele(dbuf, FTAG); dbuf = NULL; } - VERIFY0(dmu_object_free(os, bpo.bpo_phys->bpo_subobjs, tx)); + VERIFY3U(0, ==, dmu_object_free(os, bpo.bpo_phys->bpo_subobjs, tx)); out: mutex_exit(&bpo.bpo_lock); bpobj_close(&bpo); - VERIFY0(dmu_object_free(os, obj, tx)); + VERIFY3U(0, ==, dmu_object_free(os, obj, tx)); } int @@ -204,7 +204,7 @@ bpobj_iterate_impl(bpobj_t *bpo, bpobj_itor_t func, void *arg, dmu_tx_t *tx, } if (free) { i++; - VERIFY0(dmu_free_range(bpo->bpo_os, bpo->bpo_object, + VERIFY3U(0, ==, dmu_free_range(bpo->bpo_os, bpo->bpo_object, i * sizeof (blkptr_t), -1ULL, tx)); } if (err || !bpo->bpo_havesubobj || bpo->bpo_phys->bpo_subobjs == 0) @@ -252,7 +252,7 @@ bpobj_iterate_impl(bpobj_t *bpo, bpobj_itor_t func, void *arg, dmu_tx_t *tx, } err = bpobj_iterate_impl(&sublist, func, arg, tx, free); if (free) { - VERIFY0(bpobj_space(&sublist, + VERIFY3U(0, ==, bpobj_space(&sublist, &used_after, &comp_after, &uncomp_after)); bpo->bpo_phys->bpo_bytes -= used_before - used_after; ASSERT3S(bpo->bpo_phys->bpo_bytes, >=, 0); @@ -278,7 +278,7 @@ bpobj_iterate_impl(bpobj_t *bpo, bpobj_itor_t func, void *arg, dmu_tx_t *tx, dbuf = NULL; } if (free) { - VERIFY0(dmu_free_range(bpo->bpo_os, + VERIFY3U(0, ==, dmu_free_range(bpo->bpo_os, bpo->bpo_phys->bpo_subobjs, (i + 1) * sizeof (uint64_t), -1ULL, tx)); } @@ -321,8 +321,8 @@ bpobj_enqueue_subobj(bpobj_t *bpo, uint64_t subobj, dmu_tx_t *tx) ASSERT(bpo->bpo_havesubobj); ASSERT(bpo->bpo_havecomp); - VERIFY0(bpobj_open(&subbpo, bpo->bpo_os, subobj)); - VERIFY0(bpobj_space(&subbpo, &used, &comp, &uncomp)); + VERIFY3U(0, ==, bpobj_open(&subbpo, bpo->bpo_os, subobj)); + VERIFY3U(0, ==, bpobj_space(&subbpo, &used, &comp, &uncomp)); if (used == 0) { /* No point in having an empty subobj. */ @@ -352,12 +352,12 @@ bpobj_enqueue_subobj(bpobj_t *bpo, uint64_t subobj, dmu_tx_t *tx) if (subsubobjs != 0) { dmu_object_info_t doi; - VERIFY0(dmu_object_info(bpo->bpo_os, subsubobjs, &doi)); + VERIFY3U(0, ==, dmu_object_info(bpo->bpo_os, subsubobjs, &doi)); if (doi.doi_max_offset == doi.doi_data_block_size) { dmu_buf_t *subdb; uint64_t numsubsub = subbpo.bpo_phys->bpo_num_subobjs; - VERIFY0(dmu_buf_hold(bpo->bpo_os, subsubobjs, + VERIFY3U(0, ==, dmu_buf_hold(bpo->bpo_os, subsubobjs, 0, FTAG, &subdb, 0)); dmu_write(bpo->bpo_os, bpo->bpo_phys->bpo_subobjs, bpo->bpo_phys->bpo_num_subobjs * sizeof (subobj), @@ -367,7 +367,7 @@ bpobj_enqueue_subobj(bpobj_t *bpo, uint64_t subobj, dmu_tx_t *tx) dmu_buf_will_dirty(subbpo.bpo_dbuf, tx); subbpo.bpo_phys->bpo_subobjs = 0; - VERIFY0(dmu_object_free(bpo->bpo_os, + VERIFY3U(0, ==, dmu_object_free(bpo->bpo_os, subsubobjs, tx)); } } @@ -407,7 +407,7 @@ bpobj_enqueue(bpobj_t *bpo, const blkptr_t *bp, dmu_tx_t *tx) bpo->bpo_cached_dbuf->db_size) { if (bpo->bpo_cached_dbuf) dmu_buf_rele(bpo->bpo_cached_dbuf, bpo); - VERIFY0(dmu_buf_hold(bpo->bpo_os, bpo->bpo_object, + VERIFY3U(0, ==, dmu_buf_hold(bpo->bpo_os, bpo->bpo_object, offset, bpo, &bpo->bpo_cached_dbuf, 0)); } diff --git a/usr/src/uts/common/fs/zfs/bptree.c b/usr/src/uts/common/fs/zfs/bptree.c index 337375077b..8c5a7d40ef 100644 --- a/usr/src/uts/common/fs/zfs/bptree.c +++ b/usr/src/uts/common/fs/zfs/bptree.c @@ -72,7 +72,7 @@ bptree_alloc(objset_t *os, dmu_tx_t *tx) * Bonus buffer contents are already initialized to 0, but for * readability we make it explicit. */ - VERIFY0(dmu_bonus_hold(os, obj, FTAG, &db)); + VERIFY3U(0, ==, dmu_bonus_hold(os, obj, FTAG, &db)); dmu_buf_will_dirty(db, tx); bt = db->db_data; bt->bt_begin = 0; @@ -91,12 +91,12 @@ bptree_free(objset_t *os, uint64_t obj, dmu_tx_t *tx) dmu_buf_t *db; bptree_phys_t *bt; - VERIFY0(dmu_bonus_hold(os, obj, FTAG, &db)); + VERIFY3U(0, ==, dmu_bonus_hold(os, obj, FTAG, &db)); bt = db->db_data; ASSERT3U(bt->bt_begin, ==, bt->bt_end); - ASSERT0(bt->bt_bytes); - ASSERT0(bt->bt_comp); - ASSERT0(bt->bt_uncomp); + ASSERT3U(bt->bt_bytes, ==, 0); + ASSERT3U(bt->bt_comp, ==, 0); + ASSERT3U(bt->bt_uncomp, ==, 0); dmu_buf_rele(db, FTAG); return (dmu_object_free(os, obj, tx)); @@ -117,7 +117,7 @@ bptree_add(objset_t *os, uint64_t obj, blkptr_t *bp, uint64_t birth_txg, */ ASSERT(dmu_tx_is_syncing(tx)); - VERIFY0(dmu_bonus_hold(os, obj, FTAG, &db)); + VERIFY3U(0, ==, dmu_bonus_hold(os, obj, FTAG, &db)); bt = db->db_data; bte.be_birth_txg = birth_txg; @@ -197,7 +197,7 @@ bptree_iterate(objset_t *os, uint64_t obj, boolean_t free, bptree_itor_t func, /* save bookmark for future resume */ ASSERT3U(bte.be_zb.zb_objset, ==, ZB_DESTROYED_OBJSET); - ASSERT0(bte.be_zb.zb_level); + ASSERT3U(bte.be_zb.zb_level, ==, 0); dmu_write(os, obj, i * sizeof (bte), sizeof (bte), &bte, tx); break; @@ -213,9 +213,9 @@ bptree_iterate(objset_t *os, uint64_t obj, boolean_t free, bptree_itor_t func, /* if all blocks are free there should be no used space */ if (ba.ba_phys->bt_begin == ba.ba_phys->bt_end) { - ASSERT0(ba.ba_phys->bt_bytes); - ASSERT0(ba.ba_phys->bt_comp); - ASSERT0(ba.ba_phys->bt_uncomp); + ASSERT3U(ba.ba_phys->bt_bytes, ==, 0); + ASSERT3U(ba.ba_phys->bt_comp, ==, 0); + ASSERT3U(ba.ba_phys->bt_uncomp, ==, 0); } dmu_buf_rele(db, FTAG); diff --git a/usr/src/uts/common/fs/zfs/dbuf.c b/usr/src/uts/common/fs/zfs/dbuf.c index a6048bb511..145cc01c67 100644 --- a/usr/src/uts/common/fs/zfs/dbuf.c +++ b/usr/src/uts/common/fs/zfs/dbuf.c @@ -328,7 +328,7 @@ dbuf_verify(dmu_buf_impl_t *db) } else if (db->db_blkid == DMU_SPILL_BLKID) { ASSERT(dn != NULL); ASSERT3U(db->db.db_size, >=, dn->dn_bonuslen); - ASSERT0(db->db.db_offset); + ASSERT3U(db->db.db_offset, ==, 0); } else { ASSERT3U(db->db.db_offset, ==, db->db_blkid * db->db.db_size); } @@ -2308,7 +2308,7 @@ dbuf_sync_leaf(dbuf_dirty_record_t *dr, dmu_tx_t *tx) dbuf_dirty_record_t **drp; ASSERT(*datap != NULL); - ASSERT0(db->db_level); + ASSERT3U(db->db_level, ==, 0); ASSERT3U(dn->dn_phys->dn_bonuslen, <=, DN_MAX_BONUSLEN); bcopy(*datap, DN_BONUS(dn->dn_phys), dn->dn_phys->dn_bonuslen); DB_DNODE_EXIT(db); @@ -2507,7 +2507,7 @@ dbuf_write_done(zio_t *zio, arc_buf_t *buf, void *vdb) uint64_t txg = zio->io_txg; dbuf_dirty_record_t **drp, *dr; - ASSERT0(zio->io_error); + ASSERT3U(zio->io_error, ==, 0); ASSERT(db->db_blkptr == bp); if (zio->io_flags & ZIO_FLAG_IO_REWRITE) { diff --git a/usr/src/uts/common/fs/zfs/dmu_objset.c b/usr/src/uts/common/fs/zfs/dmu_objset.c index a2155077a6..09c4ecf4dd 100644 --- a/usr/src/uts/common/fs/zfs/dmu_objset.c +++ b/usr/src/uts/common/fs/zfs/dmu_objset.c @@ -708,7 +708,7 @@ dmu_objset_create_sync(void *arg1, void *arg2, dmu_tx_t *tx) obj = dsl_dataset_create_sync(dd, oa->lastname, oa->clone_origin, oa->flags, oa->cr, tx); - VERIFY0(dsl_dataset_hold_obj(dd->dd_pool, obj, FTAG, &ds)); + VERIFY3U(0, ==, dsl_dataset_hold_obj(dd->dd_pool, obj, FTAG, &ds)); bp = dsl_dataset_get_blkptr(ds); if (BP_IS_HOLE(bp)) { objset_t *os = @@ -1173,7 +1173,7 @@ dmu_objset_sync(objset_t *os, zio_t *pio, dmu_tx_t *tx) SET_BOOKMARK(&zb, os->os_dsl_dataset ? os->os_dsl_dataset->ds_object : DMU_META_OBJSET, ZB_ROOT_OBJECT, ZB_ROOT_LEVEL, ZB_ROOT_BLKID); - VERIFY0(arc_release_bp(os->os_phys_buf, &os->os_phys_buf, + VERIFY3U(0, ==, arc_release_bp(os->os_phys_buf, &os->os_phys_buf, os->os_rootbp, os->os_spa, &zb)); dmu_write_policy(os, NULL, 0, 0, &zp); @@ -1269,9 +1269,9 @@ do_userquota_update(objset_t *os, uint64_t used, uint64_t flags, int64_t delta = DNODE_SIZE + used; if (subtract) delta = -delta; - VERIFY0(zap_increment_int(os, DMU_USERUSED_OBJECT, + VERIFY3U(0, ==, zap_increment_int(os, DMU_USERUSED_OBJECT, user, delta, tx)); - VERIFY0(zap_increment_int(os, DMU_GROUPUSED_OBJECT, + VERIFY3U(0, ==, zap_increment_int(os, DMU_GROUPUSED_OBJECT, group, delta, tx)); } } diff --git a/usr/src/uts/common/fs/zfs/dmu_send.c b/usr/src/uts/common/fs/zfs/dmu_send.c index 601c57df82..5a2c6e2ce7 100644 --- a/usr/src/uts/common/fs/zfs/dmu_send.c +++ b/usr/src/uts/common/fs/zfs/dmu_send.c @@ -57,7 +57,7 @@ dump_bytes(dmu_sendarg_t *dsp, void *buf, int len) { dsl_dataset_t *ds = dsp->dsa_os->os_dsl_dataset; ssize_t resid; /* have to get resid to get detailed errno */ - ASSERT0(len % 8); + ASSERT3U(len % 8, ==, 0); fletcher_4_incremental_native(buf, len, &dsp->dsa_zc); dsp->dsa_err = vn_rdwr(UIO_WRITE, dsp->dsa_vp, @@ -961,7 +961,7 @@ restore_read(struct restorearg *ra, int len) int done = 0; /* some things will require 8-byte alignment, so everything must */ - ASSERT0(len % 8); + ASSERT3U(len % 8, ==, 0); while (done < len) { ssize_t resid; @@ -1645,7 +1645,7 @@ out: (void) add_ds_to_guidmap(drc->drc_guid_to_ds_map, ds); dsl_dataset_disown(ds, dmu_recv_tag); myerr = dsl_dataset_destroy(drc->drc_real_ds, dmu_recv_tag, B_FALSE); - ASSERT0(myerr); + ASSERT3U(myerr, ==, 0); return (err); } diff --git a/usr/src/uts/common/fs/zfs/dmu_traverse.c b/usr/src/uts/common/fs/zfs/dmu_traverse.c index f9de7b6226..bfe9e65064 100644 --- a/usr/src/uts/common/fs/zfs/dmu_traverse.c +++ b/usr/src/uts/common/fs/zfs/dmu_traverse.c @@ -174,7 +174,7 @@ static void traverse_pause(traverse_data_t *td, const zbookmark_t *zb) { ASSERT(td->td_resume != NULL); - ASSERT0(zb->zb_level); + ASSERT3U(zb->zb_level, ==, 0); bcopy(zb, td->td_resume, sizeof (*td->td_resume)); } diff --git a/usr/src/uts/common/fs/zfs/dmu_tx.c b/usr/src/uts/common/fs/zfs/dmu_tx.c index 665b6b2413..723d62b485 100644 --- a/usr/src/uts/common/fs/zfs/dmu_tx.c +++ b/usr/src/uts/common/fs/zfs/dmu_tx.c @@ -899,7 +899,7 @@ dmu_tx_try_assign(dmu_tx_t *tx, uint64_t txg_how) uint64_t memory, asize, fsize, usize; uint64_t towrite, tofree, tooverwrite, tounref, tohold, fudge; - ASSERT0(tx->tx_txg); + ASSERT3U(tx->tx_txg, ==, 0); if (tx->tx_err) return (tx->tx_err); diff --git a/usr/src/uts/common/fs/zfs/dnode.c b/usr/src/uts/common/fs/zfs/dnode.c index 6838576dcf..05ccf9fc62 100644 --- a/usr/src/uts/common/fs/zfs/dnode.c +++ b/usr/src/uts/common/fs/zfs/dnode.c @@ -137,32 +137,32 @@ dnode_dest(void *arg, void *unused) ASSERT(!list_link_active(&dn->dn_dirty_link[i])); avl_destroy(&dn->dn_ranges[i]); list_destroy(&dn->dn_dirty_records[i]); - ASSERT0(dn->dn_next_nblkptr[i]); - ASSERT0(dn->dn_next_nlevels[i]); - ASSERT0(dn->dn_next_indblkshift[i]); - ASSERT0(dn->dn_next_bonustype[i]); - ASSERT0(dn->dn_rm_spillblk[i]); - ASSERT0(dn->dn_next_bonuslen[i]); - ASSERT0(dn->dn_next_blksz[i]); + ASSERT3U(dn->dn_next_nblkptr[i], ==, 0); + ASSERT3U(dn->dn_next_nlevels[i], ==, 0); + ASSERT3U(dn->dn_next_indblkshift[i], ==, 0); + ASSERT3U(dn->dn_next_bonustype[i], ==, 0); + ASSERT3U(dn->dn_rm_spillblk[i], ==, 0); + ASSERT3U(dn->dn_next_bonuslen[i], ==, 0); + ASSERT3U(dn->dn_next_blksz[i], ==, 0); } - ASSERT0(dn->dn_allocated_txg); - ASSERT0(dn->dn_free_txg); - ASSERT0(dn->dn_assigned_txg); - ASSERT0(dn->dn_dirtyctx); + ASSERT3U(dn->dn_allocated_txg, ==, 0); + ASSERT3U(dn->dn_free_txg, ==, 0); + ASSERT3U(dn->dn_assigned_txg, ==, 0); + ASSERT3U(dn->dn_dirtyctx, ==, 0); ASSERT3P(dn->dn_dirtyctx_firstset, ==, NULL); ASSERT3P(dn->dn_bonus, ==, NULL); ASSERT(!dn->dn_have_spill); ASSERT3P(dn->dn_zio, ==, NULL); - ASSERT0(dn->dn_oldused); - ASSERT0(dn->dn_oldflags); - ASSERT0(dn->dn_olduid); - ASSERT0(dn->dn_oldgid); - ASSERT0(dn->dn_newuid); - ASSERT0(dn->dn_newgid); - ASSERT0(dn->dn_id_flags); - - ASSERT0(dn->dn_dbufs_count); + ASSERT3U(dn->dn_oldused, ==, 0); + ASSERT3U(dn->dn_oldflags, ==, 0); + ASSERT3U(dn->dn_olduid, ==, 0); + ASSERT3U(dn->dn_oldgid, ==, 0); + ASSERT3U(dn->dn_newuid, ==, 0); + ASSERT3U(dn->dn_newgid, ==, 0); + ASSERT3U(dn->dn_id_flags, ==, 0); + + ASSERT3U(dn->dn_dbufs_count, ==, 0); list_destroy(&dn->dn_dbufs); } @@ -361,7 +361,7 @@ dnode_rm_spill(dnode_t *dn, dmu_tx_t *tx) static void dnode_setdblksz(dnode_t *dn, int size) { - ASSERT0(P2PHASE(size, SPA_MINBLOCKSIZE)); + ASSERT3U(P2PHASE(size, SPA_MINBLOCKSIZE), ==, 0); ASSERT3U(size, <=, SPA_MAXBLOCKSIZE); ASSERT3U(size, >=, SPA_MINBLOCKSIZE); ASSERT3U(size >> SPA_MINBLOCKSHIFT, <, @@ -506,24 +506,24 @@ dnode_allocate(dnode_t *dn, dmu_object_type_t ot, int blocksize, int ibs, ASSERT(DMU_OT_IS_VALID(bonustype)); ASSERT3U(bonuslen, <=, DN_MAX_BONUSLEN); ASSERT(dn->dn_type == DMU_OT_NONE); - ASSERT0(dn->dn_maxblkid); - ASSERT0(dn->dn_allocated_txg); - ASSERT0(dn->dn_assigned_txg); + ASSERT3U(dn->dn_maxblkid, ==, 0); + ASSERT3U(dn->dn_allocated_txg, ==, 0); + ASSERT3U(dn->dn_assigned_txg, ==, 0); ASSERT(refcount_is_zero(&dn->dn_tx_holds)); ASSERT3U(refcount_count(&dn->dn_holds), <=, 1); ASSERT3P(list_head(&dn->dn_dbufs), ==, NULL); for (i = 0; i < TXG_SIZE; i++) { - ASSERT0(dn->dn_next_nblkptr[i]); - ASSERT0(dn->dn_next_nlevels[i]); - ASSERT0(dn->dn_next_indblkshift[i]); - ASSERT0(dn->dn_next_bonuslen[i]); - ASSERT0(dn->dn_next_bonustype[i]); - ASSERT0(dn->dn_rm_spillblk[i]); - ASSERT0(dn->dn_next_blksz[i]); + ASSERT3U(dn->dn_next_nblkptr[i], ==, 0); + ASSERT3U(dn->dn_next_nlevels[i], ==, 0); + ASSERT3U(dn->dn_next_indblkshift[i], ==, 0); + ASSERT3U(dn->dn_next_bonuslen[i], ==, 0); + ASSERT3U(dn->dn_next_bonustype[i], ==, 0); + ASSERT3U(dn->dn_rm_spillblk[i], ==, 0); + ASSERT3U(dn->dn_next_blksz[i], ==, 0); ASSERT(!list_link_active(&dn->dn_dirty_link[i])); ASSERT3P(list_head(&dn->dn_dirty_records[i]), ==, NULL); - ASSERT0(avl_numnodes(&dn->dn_ranges[i])); + ASSERT3U(avl_numnodes(&dn->dn_ranges[i]), ==, 0); } dn->dn_type = ot; @@ -565,7 +565,7 @@ dnode_reallocate(dnode_t *dn, dmu_object_type_t ot, int blocksize, ASSERT3U(blocksize, >=, SPA_MINBLOCKSIZE); ASSERT3U(blocksize, <=, SPA_MAXBLOCKSIZE); - ASSERT0(blocksize % SPA_MINBLOCKSIZE); + ASSERT3U(blocksize % SPA_MINBLOCKSIZE, ==, 0); ASSERT(dn->dn_object != DMU_META_DNODE_OBJECT || dmu_tx_private_ok(tx)); ASSERT(tx->tx_txg != 0); ASSERT((bonustype == DMU_OT_NONE && bonuslen == 0) || @@ -1235,9 +1235,9 @@ dnode_setdirty(dnode_t *dn, dmu_tx_t *tx) ASSERT(!refcount_is_zero(&dn->dn_holds) || list_head(&dn->dn_dbufs)); ASSERT(dn->dn_datablksz != 0); - ASSERT0(dn->dn_next_bonuslen[txg&TXG_MASK]); - ASSERT0(dn->dn_next_blksz[txg&TXG_MASK]); - ASSERT0(dn->dn_next_bonustype[txg&TXG_MASK]); + ASSERT3U(dn->dn_next_bonuslen[txg&TXG_MASK], ==, 0); + ASSERT3U(dn->dn_next_blksz[txg&TXG_MASK], ==, 0); + ASSERT3U(dn->dn_next_bonustype[txg&TXG_MASK], ==, 0); dprintf_ds(os->os_dsl_dataset, "obj=%llu txg=%llu\n", dn->dn_object, txg); @@ -1587,7 +1587,7 @@ dnode_free_range(dnode_t *dn, uint64_t off, uint64_t len, dmu_tx_t *tx) else tail = P2PHASE(len, blksz); - ASSERT0(P2PHASE(off, blksz)); + ASSERT3U(P2PHASE(off, blksz), ==, 0); /* zero out any partial block data at the end of the range */ if (tail) { if (len < tail) @@ -1769,7 +1769,7 @@ dnode_diduse_space(dnode_t *dn, int64_t delta) space += delta; if (spa_version(dn->dn_objset->os_spa) < SPA_VERSION_DNODE_BYTES) { ASSERT((dn->dn_phys->dn_flags & DNODE_FLAG_USED_BYTES) == 0); - ASSERT0(P2PHASE(space, 1<dn_phys->dn_used = space >> DEV_BSHIFT; } else { dn->dn_phys->dn_used = space; diff --git a/usr/src/uts/common/fs/zfs/dnode_sync.c b/usr/src/uts/common/fs/zfs/dnode_sync.c index 38dab665fc..8d817919b3 100644 --- a/usr/src/uts/common/fs/zfs/dnode_sync.c +++ b/usr/src/uts/common/fs/zfs/dnode_sync.c @@ -274,7 +274,7 @@ free_children(dmu_buf_impl_t *db, uint64_t blkid, uint64_t nblks, int trunc, continue; rw_enter(&dn->dn_struct_rwlock, RW_READER); err = dbuf_hold_impl(dn, db->db_level-1, i, TRUE, FTAG, &subdb); - ASSERT0(err); + ASSERT3U(err, ==, 0); rw_exit(&dn->dn_struct_rwlock); if (free_children(subdb, blkid, nblks, trunc, tx) == ALL) { @@ -294,7 +294,7 @@ free_children(dmu_buf_impl_t *db, uint64_t blkid, uint64_t nblks, int trunc, continue; else if (i == end && !trunc) continue; - ASSERT0(bp->blk_birth); + ASSERT3U(bp->blk_birth, ==, 0); } #endif ASSERT(all || blocks_freed == 0 || db->db_last_dirty); @@ -350,7 +350,7 @@ dnode_sync_free_range(dnode_t *dn, uint64_t blkid, uint64_t nblks, dmu_tx_t *tx) continue; rw_enter(&dn->dn_struct_rwlock, RW_READER); err = dbuf_hold_impl(dn, dnlevel-1, i, TRUE, FTAG, &db); - ASSERT0(err); + ASSERT3U(err, ==, 0); rw_exit(&dn->dn_struct_rwlock); if (free_children(db, blkid, nblks, trunc, tx) == ALL) { @@ -471,7 +471,7 @@ dnode_sync_free(dnode_t *dn, dmu_tx_t *tx) * Our contents should have been freed in dnode_sync() by the * free range record inserted by the caller of dnode_free(). */ - ASSERT0(DN_USED_BYTES(dn->dn_phys)); + ASSERT3U(DN_USED_BYTES(dn->dn_phys), ==, 0); ASSERT(BP_IS_HOLE(dn->dn_phys->dn_blkptr)); dnode_undirty_dbufs(&dn->dn_dirty_records[txgoff]); diff --git a/usr/src/uts/common/fs/zfs/dsl_dataset.c b/usr/src/uts/common/fs/zfs/dsl_dataset.c index dcf9d44ef7..555797e77e 100644 --- a/usr/src/uts/common/fs/zfs/dsl_dataset.c +++ b/usr/src/uts/common/fs/zfs/dsl_dataset.c @@ -831,7 +831,7 @@ dsl_dataset_create_sync_dd(dsl_dir_t *dd, dsl_dataset_t *origin, dmu_buf_will_dirty(origin->ds_dbuf, tx); origin->ds_phys->ds_num_children++; - VERIFY0(dsl_dataset_hold_obj(dp, + VERIFY3U(0, ==, dsl_dataset_hold_obj(dp, origin->ds_dir->dd_phys->dd_head_dataset_obj, FTAG, &ohds)); dsphys->ds_deadlist_obj = dsl_deadlist_clone(&ohds->ds_deadlist, dsphys->ds_prev_snap_txg, dsphys->ds_prev_snap_obj, tx); @@ -857,7 +857,7 @@ dsl_dataset_create_sync_dd(dsl_dir_t *dd, dsl_dataset_t *origin, zap_create(mos, DMU_OT_DSL_CLONES, DMU_OT_NONE, 0, tx); } - VERIFY0(zap_add_int(mos, + VERIFY3U(0, ==, zap_add_int(mos, origin->ds_dir->dd_phys->dd_clones, dsobj, tx)); } } @@ -900,8 +900,8 @@ dsl_dataset_create_sync(dsl_dir_t *pdd, const char *lastname, dsl_dataset_t *ds; objset_t *os; - VERIFY0(dsl_dataset_hold_obj(dp, dsobj, FTAG, &ds)); - VERIFY0(dmu_objset_from_ds(ds, &os)); + VERIFY3U(0, ==, dsl_dataset_hold_obj(dp, dsobj, FTAG, &ds)); + VERIFY3U(0, ==, dmu_objset_from_ds(ds, &os)); bzero(&os->os_zil_header, sizeof (os->os_zil_header)); dsl_dataset_dirty(ds, tx); dsl_dataset_rele(ds, FTAG); @@ -1504,9 +1504,10 @@ remove_from_next_clones(dsl_dataset_t *ds, uint64_t obj, dmu_tx_t *tx) * remove this one. */ if (err != ENOENT) { - VERIFY0(err); + VERIFY3U(err, ==, 0); } - ASSERT0(zap_count(mos, ds->ds_phys->ds_next_clones_obj, &count)); + ASSERT3U(0, ==, zap_count(mos, ds->ds_phys->ds_next_clones_obj, + &count)); ASSERT3U(count, <=, ds->ds_phys->ds_num_children - 2); } @@ -1530,7 +1531,7 @@ dsl_dataset_remove_clones_key(dsl_dataset_t *ds, uint64_t mintxg, dmu_tx_t *tx) zap_cursor_advance(&zc)) { dsl_dataset_t *clone; - VERIFY0(dsl_dataset_hold_obj(ds->ds_dir->dd_pool, + VERIFY3U(0, ==, dsl_dataset_hold_obj(ds->ds_dir->dd_pool, za.za_first_integer, FTAG, &clone)); if (clone->ds_dir->dd_origin_txg > mintxg) { dsl_deadlist_remove_key(&clone->ds_deadlist, @@ -1588,9 +1589,9 @@ process_old_deadlist(dsl_dataset_t *ds, dsl_dataset_t *ds_prev, poa.ds_prev = ds_prev; poa.after_branch_point = after_branch_point; poa.pio = zio_root(dp->dp_spa, NULL, NULL, ZIO_FLAG_MUSTSUCCEED); - VERIFY0(bpobj_iterate(&ds_next->ds_deadlist.dl_bpobj, + VERIFY3U(0, ==, bpobj_iterate(&ds_next->ds_deadlist.dl_bpobj, process_old_cb, &poa, tx)); - VERIFY0(zio_wait(poa.pio)); + VERIFY3U(zio_wait(poa.pio), ==, 0); ASSERT3U(poa.used, ==, ds->ds_phys->ds_unique_bytes); /* change snapused */ @@ -1625,7 +1626,7 @@ old_synchronous_dataset_destroy(dsl_dataset_t *ds, dmu_tx_t *tx) err = traverse_dataset(ds, ds->ds_phys->ds_prev_snap_txg, TRAVERSE_POST, kill_blkptr, &ka); - ASSERT0(err); + ASSERT3U(err, ==, 0); ASSERT(!DS_UNIQUE_IS_ACCURATE(ds) || ds->ds_phys->ds_unique_bytes == 0); return (err); @@ -1681,7 +1682,7 @@ dsl_dataset_destroy_sync(void *arg1, void *tag, dmu_tx_t *tx) psa.psa_effective_value = 0; /* predict default value */ dsl_dataset_set_reservation_sync(ds, &psa, tx); - ASSERT0(ds->ds_reserved); + ASSERT3U(ds->ds_reserved, ==, 0); } ASSERT(RW_WRITE_HELD(&dp->dp_config_rwlock)); @@ -1818,7 +1819,7 @@ dsl_dataset_destroy_sync(void *arg1, void *tag, dmu_tx_t *tx) /* Collapse range in this head. */ dsl_dataset_t *hds; - VERIFY0(dsl_dataset_hold_obj(dp, + VERIFY3U(0, ==, dsl_dataset_hold_obj(dp, ds->ds_dir->dd_phys->dd_head_dataset_obj, FTAG, &hds)); dsl_deadlist_remove_key(&hds->ds_deadlist, @@ -1907,7 +1908,7 @@ dsl_dataset_destroy_sync(void *arg1, void *tag, dmu_tx_t *tx) if (ds->ds_prev != NULL) { if (spa_version(dp->dp_spa) >= SPA_VERSION_DIR_CLONES) { - VERIFY0(zap_remove_int(mos, + VERIFY3U(0, ==, zap_remove_int(mos, ds->ds_prev->ds_dir->dd_phys->dd_clones, ds->ds_object, tx)); } @@ -1945,7 +1946,7 @@ dsl_dataset_destroy_sync(void *arg1, void *tag, dmu_tx_t *tx) err = dsl_dataset_snap_lookup(ds_head, ds->ds_snapname, &val); - ASSERT0(err); + ASSERT3U(err, ==, 0); ASSERT3U(val, ==, obj); } #endif @@ -2112,7 +2113,7 @@ dsl_dataset_snapshot_sync(dsl_dataset_t *ds, const char *snapname, } else if (next_clones_obj != 0) { remove_from_next_clones(ds->ds_prev, dsphys->ds_next_snap_obj, tx); - VERIFY0(zap_add_int(mos, + VERIFY3U(0, ==, zap_add_int(mos, next_clones_obj, dsobj, tx)); } } @@ -2202,7 +2203,7 @@ get_clones_stat(dsl_dataset_t *ds, nvlist_t *nv) * Only trust it if it has the right number of entries. */ if (ds->ds_phys->ds_next_clones_obj != 0) { - ASSERT0(zap_count(mos, ds->ds_phys->ds_next_clones_obj, + ASSERT3U(0, ==, zap_count(mos, ds->ds_phys->ds_next_clones_obj, &count)); } if (count != ds->ds_phys->ds_num_children - 1) { @@ -2441,13 +2442,13 @@ dsl_dataset_snapshot_rename_sync(void *arg1, void *arg2, dmu_tx_t *tx) VERIFY(0 == dsl_dataset_get_snapname(ds)); err = dsl_dataset_snap_remove(hds, ds->ds_snapname, tx); - ASSERT0(err); + ASSERT3U(err, ==, 0); mutex_enter(&ds->ds_lock); (void) strcpy(ds->ds_snapname, newsnapname); mutex_exit(&ds->ds_lock); err = zap_add(mos, hds->ds_phys->ds_snapnames_zapobj, ds->ds_snapname, 8, 1, &ds->ds_object, tx); - ASSERT0(err); + ASSERT3U(err, ==, 0); spa_history_log_internal_ds(ds, "rename", tx, "-> @%s", newsnapname); @@ -2805,7 +2806,7 @@ dsl_dataset_promote_sync(void *arg1, void *arg2, dmu_tx_t *tx) /* change the origin's next clone */ if (origin_ds->ds_phys->ds_next_clones_obj) { remove_from_next_clones(origin_ds, snap->ds->ds_object, tx); - VERIFY0(zap_add_int(dp->dp_meta_objset, + VERIFY3U(0, ==, zap_add_int(dp->dp_meta_objset, origin_ds->ds_phys->ds_next_clones_obj, oldnext_obj, tx)); } @@ -2822,20 +2823,20 @@ dsl_dataset_promote_sync(void *arg1, void *arg2, dmu_tx_t *tx) /* change dd_clone entries */ if (spa_version(dp->dp_spa) >= SPA_VERSION_DIR_CLONES) { - VERIFY0(zap_remove_int(dp->dp_meta_objset, + VERIFY3U(0, ==, zap_remove_int(dp->dp_meta_objset, odd->dd_phys->dd_clones, hds->ds_object, tx)); - VERIFY0(zap_add_int(dp->dp_meta_objset, + VERIFY3U(0, ==, zap_add_int(dp->dp_meta_objset, pa->origin_origin->ds_dir->dd_phys->dd_clones, hds->ds_object, tx)); - VERIFY0(zap_remove_int(dp->dp_meta_objset, + VERIFY3U(0, ==, zap_remove_int(dp->dp_meta_objset, pa->origin_origin->ds_dir->dd_phys->dd_clones, origin_head->ds_object, tx)); if (dd->dd_phys->dd_clones == 0) { dd->dd_phys->dd_clones = zap_create(dp->dp_meta_objset, DMU_OT_DSL_CLONES, DMU_OT_NONE, 0, tx); } - VERIFY0(zap_add_int(dp->dp_meta_objset, + VERIFY3U(0, ==, zap_add_int(dp->dp_meta_objset, dd->dd_phys->dd_clones, origin_head->ds_object, tx)); } @@ -2888,7 +2889,7 @@ dsl_dataset_promote_sync(void *arg1, void *arg2, dmu_tx_t *tx) continue; } - VERIFY0(dsl_dataset_hold_obj(dp, + VERIFY3U(0, ==, dsl_dataset_hold_obj(dp, za.za_first_integer, FTAG, &cnds)); o = cnds->ds_dir->dd_phys->dd_head_dataset_obj; @@ -2901,7 +2902,7 @@ dsl_dataset_promote_sync(void *arg1, void *arg2, dmu_tx_t *tx) zap_cursor_fini(&zc); } - ASSERT0(dsl_prop_numcb(ds)); + ASSERT3U(dsl_prop_numcb(ds), ==, 0); } /* @@ -3606,7 +3607,7 @@ dsl_register_onexit_hold_cleanup(dsl_dataset_t *ds, const char *htag, ca->dp = ds->ds_dir->dd_pool; ca->dsobj = ds->ds_object; (void) strlcpy(ca->htag, htag, sizeof (ca->htag)); - VERIFY0(zfs_onexit_add_cb(minor, + VERIFY3U(0, ==, zfs_onexit_add_cb(minor, dsl_dataset_user_release_onexit, ca, NULL)); } diff --git a/usr/src/uts/common/fs/zfs/dsl_deadlist.c b/usr/src/uts/common/fs/zfs/dsl_deadlist.c index c0d0b08ce8..dd6db2120b 100644 --- a/usr/src/uts/common/fs/zfs/dsl_deadlist.c +++ b/usr/src/uts/common/fs/zfs/dsl_deadlist.c @@ -20,7 +20,7 @@ */ /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2012 by Delphix. All rights reserved. + * Copyright (c) 2011 by Delphix. All rights reserved. */ #include @@ -82,7 +82,7 @@ dsl_deadlist_load_tree(dsl_deadlist_t *dl) zap_cursor_advance(&zc)) { dsl_deadlist_entry_t *dle = kmem_alloc(sizeof (*dle), KM_SLEEP); dle->dle_mintxg = strtonum(za.za_name, NULL); - VERIFY0(bpobj_open(&dle->dle_bpobj, dl->dl_os, + VERIFY3U(0, ==, bpobj_open(&dle->dle_bpobj, dl->dl_os, za.za_first_integer)); avl_add(&dl->dl_tree, dle); } @@ -98,13 +98,13 @@ dsl_deadlist_open(dsl_deadlist_t *dl, objset_t *os, uint64_t object) mutex_init(&dl->dl_lock, NULL, MUTEX_DEFAULT, NULL); dl->dl_os = os; dl->dl_object = object; - VERIFY0(dmu_bonus_hold(os, object, dl, &dl->dl_dbuf)); + VERIFY3U(0, ==, dmu_bonus_hold(os, object, dl, &dl->dl_dbuf)); dmu_object_info_from_db(dl->dl_dbuf, &doi); if (doi.doi_type == DMU_OT_BPOBJ) { dmu_buf_rele(dl->dl_dbuf, dl); dl->dl_dbuf = NULL; dl->dl_oldfmt = B_TRUE; - VERIFY0(bpobj_open(&dl->dl_bpobj, os, object)); + VERIFY3U(0, ==, bpobj_open(&dl->dl_bpobj, os, object)); return; } @@ -155,7 +155,7 @@ dsl_deadlist_free(objset_t *os, uint64_t dlobj, dmu_tx_t *tx) zap_cursor_t zc; zap_attribute_t za; - VERIFY0(dmu_object_info(os, dlobj, &doi)); + VERIFY3U(0, ==, dmu_object_info(os, dlobj, &doi)); if (doi.doi_type == DMU_OT_BPOBJ) { bpobj_free(os, dlobj, tx); return; @@ -166,7 +166,7 @@ dsl_deadlist_free(objset_t *os, uint64_t dlobj, dmu_tx_t *tx) zap_cursor_advance(&zc)) bpobj_free(os, za.za_first_integer, tx); zap_cursor_fini(&zc); - VERIFY0(dmu_object_free(os, dlobj, tx)); + VERIFY3U(0, ==, dmu_object_free(os, dlobj, tx)); } void @@ -218,10 +218,10 @@ dsl_deadlist_add_key(dsl_deadlist_t *dl, uint64_t mintxg, dmu_tx_t *tx) dle = kmem_alloc(sizeof (*dle), KM_SLEEP); dle->dle_mintxg = mintxg; obj = bpobj_alloc(dl->dl_os, SPA_MAXBLOCKSIZE, tx); - VERIFY0(bpobj_open(&dle->dle_bpobj, dl->dl_os, obj)); + VERIFY3U(0, ==, bpobj_open(&dle->dle_bpobj, dl->dl_os, obj)); avl_add(&dl->dl_tree, dle); - VERIFY0(zap_add_int_key(dl->dl_os, dl->dl_object, + VERIFY3U(0, ==, zap_add_int_key(dl->dl_os, dl->dl_object, mintxg, obj, tx)); } @@ -250,7 +250,7 @@ dsl_deadlist_remove_key(dsl_deadlist_t *dl, uint64_t mintxg, dmu_tx_t *tx) bpobj_close(&dle->dle_bpobj); kmem_free(dle, sizeof (*dle)); - VERIFY0(zap_remove_int(dl->dl_os, dl->dl_object, mintxg, tx)); + VERIFY3U(0, ==, zap_remove_int(dl->dl_os, dl->dl_object, mintxg, tx)); } /* @@ -271,7 +271,7 @@ dsl_deadlist_regenerate(objset_t *os, uint64_t dlobj, while (mrs_obj != 0) { dsl_dataset_t *ds; - VERIFY0(dsl_dataset_hold_obj(dp, mrs_obj, FTAG, &ds)); + VERIFY3U(0, ==, dsl_dataset_hold_obj(dp, mrs_obj, FTAG, &ds)); dsl_deadlist_add_key(&dl, ds->ds_phys->ds_prev_snap_txg, tx); mrs_obj = ds->ds_phys->ds_prev_snap_obj; dsl_dataset_rele(ds, FTAG); @@ -303,7 +303,7 @@ dsl_deadlist_clone(dsl_deadlist_t *dl, uint64_t maxtxg, break; obj = bpobj_alloc(dl->dl_os, SPA_MAXBLOCKSIZE, tx); - VERIFY0(zap_add_int_key(dl->dl_os, newobj, + VERIFY3U(0, ==, zap_add_int_key(dl->dl_os, newobj, dle->dle_mintxg, obj, tx)); } return (newobj); @@ -314,7 +314,7 @@ dsl_deadlist_space(dsl_deadlist_t *dl, uint64_t *usedp, uint64_t *compp, uint64_t *uncompp) { if (dl->dl_oldfmt) { - VERIFY0(bpobj_space(&dl->dl_bpobj, + VERIFY3U(0, ==, bpobj_space(&dl->dl_bpobj, usedp, compp, uncompp)); return; } @@ -341,7 +341,7 @@ dsl_deadlist_space_range(dsl_deadlist_t *dl, uint64_t mintxg, uint64_t maxtxg, avl_index_t where; if (dl->dl_oldfmt) { - VERIFY0(bpobj_space_range(&dl->dl_bpobj, + VERIFY3U(0, ==, bpobj_space_range(&dl->dl_bpobj, mintxg, maxtxg, usedp, compp, uncompp)); return; } @@ -363,7 +363,7 @@ dsl_deadlist_space_range(dsl_deadlist_t *dl, uint64_t mintxg, uint64_t maxtxg, dle = AVL_NEXT(&dl->dl_tree, dle)) { uint64_t used, comp, uncomp; - VERIFY0(bpobj_space(&dle->dle_bpobj, + VERIFY3U(0, ==, bpobj_space(&dle->dle_bpobj, &used, &comp, &uncomp)); *usedp += used; @@ -383,8 +383,8 @@ dsl_deadlist_insert_bpobj(dsl_deadlist_t *dl, uint64_t obj, uint64_t birth, uint64_t used, comp, uncomp; bpobj_t bpo; - VERIFY0(bpobj_open(&bpo, dl->dl_os, obj)); - VERIFY0(bpobj_space(&bpo, &used, &comp, &uncomp)); + VERIFY3U(0, ==, bpobj_open(&bpo, dl->dl_os, obj)); + VERIFY3U(0, ==, bpobj_space(&bpo, &used, &comp, &uncomp)); bpobj_close(&bpo); dsl_deadlist_load_tree(dl); @@ -424,11 +424,11 @@ dsl_deadlist_merge(dsl_deadlist_t *dl, uint64_t obj, dmu_tx_t *tx) dsl_deadlist_phys_t *dlp; dmu_object_info_t doi; - VERIFY0(dmu_object_info(dl->dl_os, obj, &doi)); + VERIFY3U(0, ==, dmu_object_info(dl->dl_os, obj, &doi)); if (doi.doi_type == DMU_OT_BPOBJ) { bpobj_t bpo; - VERIFY0(bpobj_open(&bpo, dl->dl_os, obj)); - VERIFY0(bpobj_iterate(&bpo, + VERIFY3U(0, ==, bpobj_open(&bpo, dl->dl_os, obj)); + VERIFY3U(0, ==, bpobj_iterate(&bpo, dsl_deadlist_insert_cb, dl, tx)); bpobj_close(&bpo); return; @@ -439,11 +439,11 @@ dsl_deadlist_merge(dsl_deadlist_t *dl, uint64_t obj, dmu_tx_t *tx) zap_cursor_advance(&zc)) { uint64_t mintxg = strtonum(za.za_name, NULL); dsl_deadlist_insert_bpobj(dl, za.za_first_integer, mintxg, tx); - VERIFY0(zap_remove_int(dl->dl_os, obj, mintxg, tx)); + VERIFY3U(0, ==, zap_remove_int(dl->dl_os, obj, mintxg, tx)); } zap_cursor_fini(&zc); - VERIFY0(dmu_bonus_hold(dl->dl_os, obj, FTAG, &bonus)); + VERIFY3U(0, ==, dmu_bonus_hold(dl->dl_os, obj, FTAG, &bonus)); dlp = bonus->db_data; dmu_buf_will_dirty(bonus, tx); bzero(dlp, sizeof (*dlp)); @@ -475,7 +475,7 @@ dsl_deadlist_move_bpobj(dsl_deadlist_t *dl, bpobj_t *bpo, uint64_t mintxg, bpobj_enqueue_subobj(bpo, dle->dle_bpobj.bpo_object, tx); - VERIFY0(bpobj_space(&dle->dle_bpobj, + VERIFY3U(0, ==, bpobj_space(&dle->dle_bpobj, &used, &comp, &uncomp)); mutex_enter(&dl->dl_lock); ASSERT3U(dl->dl_phys->dl_used, >=, used); @@ -486,7 +486,7 @@ dsl_deadlist_move_bpobj(dsl_deadlist_t *dl, bpobj_t *bpo, uint64_t mintxg, dl->dl_phys->dl_uncomp -= uncomp; mutex_exit(&dl->dl_lock); - VERIFY0(zap_remove_int(dl->dl_os, dl->dl_object, + VERIFY3U(0, ==, zap_remove_int(dl->dl_os, dl->dl_object, dle->dle_mintxg, tx)); dle_next = AVL_NEXT(&dl->dl_tree, dle); diff --git a/usr/src/uts/common/fs/zfs/dsl_dir.c b/usr/src/uts/common/fs/zfs/dsl_dir.c index 840d392f79..74c1050fab 100644 --- a/usr/src/uts/common/fs/zfs/dsl_dir.c +++ b/usr/src/uts/common/fs/zfs/dsl_dir.c @@ -491,10 +491,10 @@ dsl_dir_destroy_sync(void *arg1, void *tag, dmu_tx_t *tx) */ dsl_dir_set_reservation_sync_impl(dd, 0, tx); - ASSERT0(dd->dd_phys->dd_used_bytes); - ASSERT0(dd->dd_phys->dd_reserved); + ASSERT3U(dd->dd_phys->dd_used_bytes, ==, 0); + ASSERT3U(dd->dd_phys->dd_reserved, ==, 0); for (t = 0; t < DD_USED_NUM; t++) - ASSERT0(dd->dd_phys->dd_used_breakdown[t]); + ASSERT3U(dd->dd_phys->dd_used_breakdown[t], ==, 0); VERIFY(0 == zap_destroy(mos, dd->dd_phys->dd_child_dir_zapobj, tx)); VERIFY(0 == zap_destroy(mos, dd->dd_phys->dd_props_zapobj, tx)); @@ -585,7 +585,7 @@ dsl_dir_sync(dsl_dir_t *dd, dmu_tx_t *tx) dmu_buf_will_dirty(dd->dd_dbuf, tx); mutex_enter(&dd->dd_lock); - ASSERT0(dd->dd_tempreserved[tx->tx_txg&TXG_MASK]); + ASSERT3U(dd->dd_tempreserved[tx->tx_txg&TXG_MASK], ==, 0); dprintf_dd(dd, "txg=%llu towrite=%lluK\n", tx->tx_txg, dd->dd_space_towrite[tx->tx_txg&TXG_MASK] / 1024); dd->dd_space_towrite[tx->tx_txg&TXG_MASK] = 0; @@ -1334,7 +1334,7 @@ dsl_dir_rename_sync(void *arg1, void *arg2, dmu_tx_t *tx) /* remove from old parent zapobj */ err = zap_remove(mos, dd->dd_parent->dd_phys->dd_child_dir_zapobj, dd->dd_myname, tx); - ASSERT0(err); + ASSERT3U(err, ==, 0); (void) strcpy(dd->dd_myname, ra->mynewname); dsl_dir_close(dd->dd_parent, dd); @@ -1345,7 +1345,7 @@ dsl_dir_rename_sync(void *arg1, void *arg2, dmu_tx_t *tx) /* add to new parent zapobj */ err = zap_add(mos, ra->newparent->dd_phys->dd_child_dir_zapobj, dd->dd_myname, 8, 1, &dd->dd_object, tx); - ASSERT0(err); + ASSERT3U(err, ==, 0); } diff --git a/usr/src/uts/common/fs/zfs/dsl_pool.c b/usr/src/uts/common/fs/zfs/dsl_pool.c index bc69cc63b5..e9223944d1 100644 --- a/usr/src/uts/common/fs/zfs/dsl_pool.c +++ b/usr/src/uts/common/fs/zfs/dsl_pool.c @@ -170,7 +170,7 @@ dsl_pool_open(dsl_pool_t *dp) DMU_POOL_FREE_BPOBJ, sizeof (uint64_t), 1, &obj); if (err) goto out; - VERIFY0(bpobj_open(&dp->dp_free_bpobj, + VERIFY3U(0, ==, bpobj_open(&dp->dp_free_bpobj, dp->dp_meta_objset, obj)); } @@ -256,10 +256,10 @@ dsl_pool_create(spa_t *spa, nvlist_t *zplprops, uint64_t txg) /* create the pool directory */ err = zap_create_claim(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, DMU_OT_OBJECT_DIRECTORY, DMU_OT_NONE, 0, tx); - ASSERT0(err); + ASSERT3U(err, ==, 0); /* Initialize scan structures */ - VERIFY0(dsl_scan_init(dp, txg)); + VERIFY3U(0, ==, dsl_scan_init(dp, txg)); /* create and open the root dir */ dp->dp_root_dir_obj = dsl_dir_create_sync(dp, NULL, NULL, tx); @@ -282,7 +282,7 @@ dsl_pool_create(spa_t *spa, nvlist_t *zplprops, uint64_t txg) obj = bpobj_alloc(dp->dp_meta_objset, SPA_MAXBLOCKSIZE, tx); VERIFY(zap_add(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_FREE_BPOBJ, sizeof (uint64_t), 1, &obj, tx) == 0); - VERIFY0(bpobj_open(&dp->dp_free_bpobj, + VERIFY3U(0, ==, bpobj_open(&dp->dp_free_bpobj, dp->dp_meta_objset, obj)); } @@ -674,7 +674,7 @@ dsl_pool_upgrade_clones(dsl_pool_t *dp, dmu_tx_t *tx) ASSERT(dmu_tx_is_syncing(tx)); ASSERT(dp->dp_origin_snap != NULL); - VERIFY0(dmu_objset_find_spa(dp->dp_spa, NULL, upgrade_clones_cb, + VERIFY3U(0, ==, dmu_objset_find_spa(dp->dp_spa, NULL, upgrade_clones_cb, tx, DS_FIND_CHILDREN)); } @@ -687,12 +687,12 @@ upgrade_dir_clones_cb(spa_t *spa, uint64_t dsobj, const char *dsname, void *arg) dsl_pool_t *dp = spa_get_dsl(spa); objset_t *mos = dp->dp_meta_objset; - VERIFY0(dsl_dataset_hold_obj(dp, dsobj, FTAG, &ds)); + VERIFY3U(0, ==, dsl_dataset_hold_obj(dp, dsobj, FTAG, &ds)); if (ds->ds_dir->dd_phys->dd_origin_obj) { dsl_dataset_t *origin; - VERIFY0(dsl_dataset_hold_obj(dp, + VERIFY3U(0, ==, dsl_dataset_hold_obj(dp, ds->ds_dir->dd_phys->dd_origin_obj, FTAG, &origin)); if (origin->ds_dir->dd_phys->dd_clones == 0) { @@ -701,7 +701,7 @@ upgrade_dir_clones_cb(spa_t *spa, uint64_t dsobj, const char *dsname, void *arg) DMU_OT_DSL_CLONES, DMU_OT_NONE, 0, tx); } - VERIFY0(zap_add_int(dp->dp_meta_objset, + VERIFY3U(0, ==, zap_add_int(dp->dp_meta_objset, origin->ds_dir->dd_phys->dd_clones, dsobj, tx)); dsl_dataset_rele(origin, FTAG); @@ -728,12 +728,12 @@ dsl_pool_upgrade_dir_clones(dsl_pool_t *dp, dmu_tx_t *tx) */ obj = dmu_object_alloc(dp->dp_meta_objset, DMU_OT_BPOBJ, SPA_MAXBLOCKSIZE, DMU_OT_BPOBJ_HDR, sizeof (bpobj_phys_t), tx); - VERIFY0(zap_add(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, + VERIFY3U(0, ==, zap_add(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_FREE_BPOBJ, sizeof (uint64_t), 1, &obj, tx)); - VERIFY0(bpobj_open(&dp->dp_free_bpobj, + VERIFY3U(0, ==, bpobj_open(&dp->dp_free_bpobj, dp->dp_meta_objset, obj)); - VERIFY0(dmu_objset_find_spa(dp->dp_spa, NULL, + VERIFY3U(0, ==, dmu_objset_find_spa(dp->dp_spa, NULL, upgrade_dir_clones_cb, tx, DS_FIND_CHILDREN)); } diff --git a/usr/src/uts/common/fs/zfs/dsl_scan.c b/usr/src/uts/common/fs/zfs/dsl_scan.c index 6587d85e7e..8f08f04a06 100644 --- a/usr/src/uts/common/fs/zfs/dsl_scan.c +++ b/usr/src/uts/common/fs/zfs/dsl_scan.c @@ -842,7 +842,7 @@ dsl_scan_ds_destroyed(dsl_dataset_t *ds, dmu_tx_t *tx) } else if (zap_lookup_int_key(dp->dp_meta_objset, scn->scn_phys.scn_queue_obj, ds->ds_object, &mintxg) == 0) { ASSERT3U(ds->ds_phys->ds_num_children, <=, 1); - VERIFY0(zap_remove_int(dp->dp_meta_objset, + VERIFY3U(0, ==, zap_remove_int(dp->dp_meta_objset, scn->scn_phys.scn_queue_obj, ds->ds_object, tx)); if (dsl_dataset_is_snapshot(ds)) { /* @@ -894,7 +894,7 @@ dsl_scan_ds_snapshotted(dsl_dataset_t *ds, dmu_tx_t *tx) (u_longlong_t)ds->ds_phys->ds_prev_snap_obj); } else if (zap_lookup_int_key(dp->dp_meta_objset, scn->scn_phys.scn_queue_obj, ds->ds_object, &mintxg) == 0) { - VERIFY0(zap_remove_int(dp->dp_meta_objset, + VERIFY3U(0, ==, zap_remove_int(dp->dp_meta_objset, scn->scn_phys.scn_queue_obj, ds->ds_object, tx)); VERIFY(zap_add_int_key(dp->dp_meta_objset, scn->scn_phys.scn_queue_obj, @@ -937,7 +937,7 @@ dsl_scan_ds_clone_swapped(dsl_dataset_t *ds1, dsl_dataset_t *ds2, dmu_tx_t *tx) ASSERT3U(mintxg, ==, ds1->ds_phys->ds_prev_snap_txg); ASSERT3U(mintxg, ==, ds2->ds_phys->ds_prev_snap_txg); - VERIFY0(zap_remove_int(dp->dp_meta_objset, + VERIFY3U(0, ==, zap_remove_int(dp->dp_meta_objset, scn->scn_phys.scn_queue_obj, ds1->ds_object, tx)); err = zap_add_int_key(dp->dp_meta_objset, scn->scn_phys.scn_queue_obj, ds2->ds_object, mintxg, tx); @@ -956,7 +956,7 @@ dsl_scan_ds_clone_swapped(dsl_dataset_t *ds1, dsl_dataset_t *ds2, dmu_tx_t *tx) scn->scn_phys.scn_queue_obj, ds2->ds_object, &mintxg) == 0) { ASSERT3U(mintxg, ==, ds1->ds_phys->ds_prev_snap_txg); ASSERT3U(mintxg, ==, ds2->ds_phys->ds_prev_snap_txg); - VERIFY0(zap_remove_int(dp->dp_meta_objset, + VERIFY3U(0, ==, zap_remove_int(dp->dp_meta_objset, scn->scn_phys.scn_queue_obj, ds2->ds_object, tx)); VERIFY(0 == zap_add_int_key(dp->dp_meta_objset, scn->scn_phys.scn_queue_obj, ds1->ds_object, mintxg, tx)); @@ -1014,7 +1014,7 @@ dsl_scan_visitds(dsl_scan_t *scn, uint64_t dsobj, dmu_tx_t *tx) dsl_dataset_t *ds; objset_t *os; - VERIFY0(dsl_dataset_hold_obj(dp, dsobj, FTAG, &ds)); + VERIFY3U(0, ==, dsl_dataset_hold_obj(dp, dsobj, FTAG, &ds)); if (dmu_objset_from_ds(ds, &os)) goto out; @@ -1308,11 +1308,11 @@ dsl_scan_visit(dsl_scan_t *scn, dmu_tx_t *tx) uint64_t dsobj; dsobj = strtonum(za.za_name, NULL); - VERIFY0(zap_remove_int(dp->dp_meta_objset, + VERIFY3U(0, ==, zap_remove_int(dp->dp_meta_objset, scn->scn_phys.scn_queue_obj, dsobj, tx)); /* Set up min/max txg */ - VERIFY0(dsl_dataset_hold_obj(dp, dsobj, FTAG, &ds)); + VERIFY3U(0, ==, dsl_dataset_hold_obj(dp, dsobj, FTAG, &ds)); if (za.za_first_integer != 0) { scn->scn_phys.scn_cur_min_txg = MAX(scn->scn_phys.scn_min_txg, @@ -1434,7 +1434,7 @@ dsl_scan_sync(dsl_pool_t *dp, dmu_tx_t *tx) NULL, ZIO_FLAG_MUSTSUCCEED); err = bpobj_iterate(&dp->dp_free_bpobj, dsl_scan_free_block_cb, scn, tx); - VERIFY0(zio_wait(scn->scn_zio_root)); + VERIFY3U(0, ==, zio_wait(scn->scn_zio_root)); if (err == 0 && spa_feature_is_active(spa, &spa_feature_table[SPA_FEATURE_ASYNC_DESTROY])) { @@ -1444,7 +1444,7 @@ dsl_scan_sync(dsl_pool_t *dp, dmu_tx_t *tx) err = bptree_iterate(dp->dp_meta_objset, dp->dp_bptree_obj, B_TRUE, dsl_scan_free_block_cb, scn, tx); - VERIFY0(zio_wait(scn->scn_zio_root)); + VERIFY3U(0, ==, zio_wait(scn->scn_zio_root)); if (err != 0) return; @@ -1453,10 +1453,10 @@ dsl_scan_sync(dsl_pool_t *dp, dmu_tx_t *tx) &spa_feature_table[SPA_FEATURE_ASYNC_DESTROY], tx); ASSERT(!spa_feature_is_active(spa, &spa_feature_table[SPA_FEATURE_ASYNC_DESTROY])); - VERIFY0(zap_remove(dp->dp_meta_objset, + VERIFY3U(0, ==, zap_remove(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_BPTREE_OBJ, tx)); - VERIFY0(bptree_free(dp->dp_meta_objset, + VERIFY3U(0, ==, bptree_free(dp->dp_meta_objset, dp->dp_bptree_obj, tx)); dp->dp_bptree_obj = 0; } diff --git a/usr/src/uts/common/fs/zfs/dsl_synctask.c b/usr/src/uts/common/fs/zfs/dsl_synctask.c index 5bfc18ead4..312423e943 100644 --- a/usr/src/uts/common/fs/zfs/dsl_synctask.c +++ b/usr/src/uts/common/fs/zfs/dsl_synctask.c @@ -163,7 +163,7 @@ dsl_sync_task_group_sync(dsl_sync_task_group_t *dstg, dmu_tx_t *tx) dsl_pool_t *dp = dstg->dstg_pool; uint64_t quota, used; - ASSERT0(dstg->dstg_err); + ASSERT3U(dstg->dstg_err, ==, 0); /* * Check for sufficient space. We just check against what's diff --git a/usr/src/uts/common/fs/zfs/metaslab.c b/usr/src/uts/common/fs/zfs/metaslab.c index 9ccd5c04d3..2f7c882c8c 100644 --- a/usr/src/uts/common/fs/zfs/metaslab.c +++ b/usr/src/uts/common/fs/zfs/metaslab.c @@ -769,7 +769,7 @@ metaslab_fini(metaslab_t *msp) for (int t = 0; t < TXG_DEFER_SIZE; t++) space_map_destroy(&msp->ms_defermap[t]); - ASSERT0(msp->ms_deferspace); + ASSERT3S(msp->ms_deferspace, ==, 0); mutex_exit(&msp->ms_lock); mutex_destroy(&msp->ms_lock); diff --git a/usr/src/uts/common/fs/zfs/spa.c b/usr/src/uts/common/fs/zfs/spa.c index b8004afa82..9c4af11134 100644 --- a/usr/src/uts/common/fs/zfs/spa.c +++ b/usr/src/uts/common/fs/zfs/spa.c @@ -2961,7 +2961,7 @@ spa_add_feature_stats(spa_t *spa, nvlist_t *config) zap_cursor_advance(&zc)) { ASSERT(za.za_integer_length == sizeof (uint64_t) && za.za_num_integers == 1); - VERIFY0(nvlist_add_uint64(features, za.za_name, + VERIFY3U(0, ==, nvlist_add_uint64(features, za.za_name, za.za_first_integer)); } zap_cursor_fini(&zc); @@ -2974,7 +2974,7 @@ spa_add_feature_stats(spa_t *spa, nvlist_t *config) zap_cursor_advance(&zc)) { ASSERT(za.za_integer_length == sizeof (uint64_t) && za.za_num_integers == 1); - VERIFY0(nvlist_add_uint64(features, za.za_name, + VERIFY3U(0, ==, nvlist_add_uint64(features, za.za_name, za.za_first_integer)); } zap_cursor_fini(&zc); @@ -3415,7 +3415,7 @@ spa_create(const char *pool, nvlist_t *nvroot, nvlist_t *props, sizeof (uint64_t), 1, &obj, tx) != 0) { cmn_err(CE_PANIC, "failed to add bpobj"); } - VERIFY0(bpobj_open(&spa->spa_deferred_bpobj, + VERIFY3U(0, ==, bpobj_open(&spa->spa_deferred_bpobj, spa->spa_meta_objset, obj)); /* @@ -4990,7 +4990,7 @@ spa_vdev_remove_evacuate(spa_t *spa, vdev_t *vd) * The evacuation succeeded. Remove any remaining MOS metadata * associated with this vdev, and wait for these changes to sync. */ - ASSERT0(vd->vdev_stat.vs_alloc); + ASSERT3U(vd->vdev_stat.vs_alloc, ==, 0); txg = spa_vdev_config_enter(spa); vd->vdev_removing = B_TRUE; vdev_dirty(vd, 0, NULL, txg); @@ -5737,7 +5737,7 @@ spa_sync_props(void *arg1, void *arg2, dmu_tx_t *tx) ASSERT(zpool_prop_feature(nvpair_name(elem))); fname = strchr(nvpair_name(elem), '@') + 1; - VERIFY0(zfeature_lookup_name(fname, &feature)); + VERIFY3U(0, ==, zfeature_lookup_name(fname, &feature)); spa_feature_enable(spa, feature, tx); spa_history_log_internal(spa, "set", tx, @@ -5982,7 +5982,7 @@ spa_sync(spa_t *spa, uint64_t txg) zio_t *zio = zio_root(spa, NULL, NULL, 0); VERIFY3U(bpobj_iterate(defer_bpo, spa_free_sync_cb, zio, tx), ==, 0); - VERIFY0(zio_wait(zio)); + VERIFY3U(zio_wait(zio), ==, 0); } /* diff --git a/usr/src/uts/common/fs/zfs/space_map.c b/usr/src/uts/common/fs/zfs/space_map.c index bbe59e516e..1ce7b2a3d4 100644 --- a/usr/src/uts/common/fs/zfs/space_map.c +++ b/usr/src/uts/common/fs/zfs/space_map.c @@ -21,11 +21,6 @@ /* * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. - * - */ - -/* - * Copyright (c) 2012 by Delphix. All rights reserved. */ #include @@ -78,7 +73,7 @@ void space_map_destroy(space_map_t *sm) { ASSERT(!sm->sm_loaded && !sm->sm_loading); - VERIFY0(sm->sm_space); + VERIFY3U(sm->sm_space, ==, 0); avl_destroy(&sm->sm_root); cv_destroy(&sm->sm_load_cv); } @@ -291,7 +286,7 @@ space_map_load(space_map_t *sm, space_map_ops_t *ops, uint8_t maptype, space = smo->smo_alloc; ASSERT(sm->sm_ops == NULL); - VERIFY0(sm->sm_space); + VERIFY3U(sm->sm_space, ==, 0); if (maptype == SM_FREE) { space_map_add(sm, sm->sm_start, sm->sm_size); @@ -480,7 +475,7 @@ space_map_sync(space_map_t *sm, uint8_t maptype, zio_buf_free(entry_map, bufsize); - VERIFY0(sm->sm_space); + VERIFY3U(sm->sm_space, ==, 0); } void diff --git a/usr/src/uts/common/fs/zfs/vdev.c b/usr/src/uts/common/fs/zfs/vdev.c index 80a7f3ffdd..6fbaf7b7ec 100644 --- a/usr/src/uts/common/fs/zfs/vdev.c +++ b/usr/src/uts/common/fs/zfs/vdev.c @@ -592,9 +592,9 @@ vdev_free(vdev_t *vd) metaslab_group_destroy(vd->vdev_mg); } - ASSERT0(vd->vdev_stat.vs_space); - ASSERT0(vd->vdev_stat.vs_dspace); - ASSERT0(vd->vdev_stat.vs_alloc); + ASSERT3U(vd->vdev_stat.vs_space, ==, 0); + ASSERT3U(vd->vdev_stat.vs_dspace, ==, 0); + ASSERT3U(vd->vdev_stat.vs_alloc, ==, 0); /* * Remove this vdev from its parent's child list. @@ -1805,7 +1805,7 @@ vdev_dtl_sync(vdev_t *vd, uint64_t txg) if (vd->vdev_detached) { if (smo->smo_object != 0) { int err = dmu_object_free(mos, smo->smo_object, tx); - ASSERT0(err); + ASSERT3U(err, ==, 0); smo->smo_object = 0; } dmu_tx_commit(tx); @@ -2005,7 +2005,7 @@ vdev_remove(vdev_t *vd, uint64_t txg) tx = dmu_tx_create_assigned(spa_get_dsl(spa), txg); if (vd->vdev_dtl_smo.smo_object) { - ASSERT0(vd->vdev_dtl_smo.smo_alloc); + ASSERT3U(vd->vdev_dtl_smo.smo_alloc, ==, 0); (void) dmu_object_free(mos, vd->vdev_dtl_smo.smo_object, tx); vd->vdev_dtl_smo.smo_object = 0; } @@ -2017,7 +2017,7 @@ vdev_remove(vdev_t *vd, uint64_t txg) if (msp == NULL || msp->ms_smo.smo_object == 0) continue; - ASSERT0(msp->ms_smo.smo_alloc); + ASSERT3U(msp->ms_smo.smo_alloc, ==, 0); (void) dmu_object_free(mos, msp->ms_smo.smo_object, tx); msp->ms_smo.smo_object = 0; } @@ -2295,7 +2295,7 @@ top: (void) spa_vdev_state_exit(spa, vd, 0); goto top; } - ASSERT0(tvd->vdev_stat.vs_alloc); + ASSERT3U(tvd->vdev_stat.vs_alloc, ==, 0); } /* diff --git a/usr/src/uts/common/fs/zfs/vdev_raidz.c b/usr/src/uts/common/fs/zfs/vdev_raidz.c index efae534257..030ea42930 100644 --- a/usr/src/uts/common/fs/zfs/vdev_raidz.c +++ b/usr/src/uts/common/fs/zfs/vdev_raidz.c @@ -281,7 +281,7 @@ vdev_raidz_map_free_vsd(zio_t *zio) { raidz_map_t *rm = zio->io_vsd; - ASSERT0(rm->rm_freed); + ASSERT3U(rm->rm_freed, ==, 0); rm->rm_freed = 1; if (rm->rm_reports == 0) @@ -1134,7 +1134,7 @@ vdev_raidz_matrix_invert(raidz_map_t *rm, int n, int nmissing, int *missing, */ for (i = 0; i < nmissing; i++) { for (j = 0; j < missing[i]; j++) { - ASSERT0(rows[i][j]); + ASSERT3U(rows[i][j], ==, 0); } ASSERT3U(rows[i][missing[i]], !=, 0); @@ -1175,7 +1175,7 @@ vdev_raidz_matrix_invert(raidz_map_t *rm, int n, int nmissing, int *missing, if (j == missing[i]) { ASSERT3U(rows[i][j], ==, 1); } else { - ASSERT0(rows[i][j]); + ASSERT3U(rows[i][j], ==, 0); } } } diff --git a/usr/src/uts/common/fs/zfs/zap.c b/usr/src/uts/common/fs/zfs/zap.c index 4a9022580a..fa1d99fec9 100644 --- a/usr/src/uts/common/fs/zfs/zap.c +++ b/usr/src/uts/common/fs/zfs/zap.c @@ -162,7 +162,7 @@ zap_table_grow(zap_t *zap, zap_table_phys_t *tbl, } else { newblk = zap_allocate_blocks(zap, tbl->zt_numblks * 2); tbl->zt_nextblk = newblk; - ASSERT0(tbl->zt_blks_copied); + ASSERT3U(tbl->zt_blks_copied, ==, 0); dmu_prefetch(zap->zap_objset, zap->zap_object, tbl->zt_blk << bs, tbl->zt_numblks << bs); } @@ -339,7 +339,7 @@ zap_grow_ptrtbl(zap_t *zap, dmu_tx_t *tx) ASSERT3U(zap->zap_f.zap_phys->zap_ptrtbl.zt_shift, ==, ZAP_EMBEDDED_PTRTBL_SHIFT(zap)); - ASSERT0(zap->zap_f.zap_phys->zap_ptrtbl.zt_blk); + ASSERT3U(zap->zap_f.zap_phys->zap_ptrtbl.zt_blk, ==, 0); newblk = zap_allocate_blocks(zap, 1); err = dmu_buf_hold(zap->zap_objset, zap->zap_object, @@ -475,7 +475,7 @@ zap_open_leaf(uint64_t blkid, dmu_buf_t *db) * chain. There should be no chained leafs (as we have removed * support for them). */ - ASSERT0(l->l_phys->l_hdr.lh_pad1); + ASSERT3U(l->l_phys->l_hdr.lh_pad1, ==, 0); /* * There should be more hash entries than there can be @@ -658,9 +658,9 @@ zap_expand_leaf(zap_name_t *zn, zap_leaf_t *l, dmu_tx_t *tx, zap_leaf_t **lp) zap_leaf_split(l, nl, zap->zap_normflags != 0); /* set sibling pointers */ - for (i = 0; i < (1ULL << prefix_diff); i++) { + for (i = 0; i < (1ULL<l_blkid, tx); - ASSERT0(err); /* we checked for i/o errors above */ + ASSERT3U(err, ==, 0); /* we checked for i/o errors above */ } if (hash & (1ULL << (64 - l->l_phys->l_hdr.lh_prefix_len))) { diff --git a/usr/src/uts/common/fs/zfs/zap_micro.c b/usr/src/uts/common/fs/zfs/zap_micro.c index 5653babf02..3e80fb9c5d 100644 --- a/usr/src/uts/common/fs/zfs/zap_micro.c +++ b/usr/src/uts/common/fs/zfs/zap_micro.c @@ -506,7 +506,7 @@ zap_lockdir(objset_t *os, uint64_t obj, dmu_tx_t *tx, return (mzap_upgrade(zapp, tx, 0)); } err = dmu_object_set_blocksize(os, obj, newsz, 0, tx); - ASSERT0(err); + ASSERT3U(err, ==, 0); zap->zap_m.zap_num_chunks = db->db_size / MZAP_ENT_LEN - 1; } @@ -601,7 +601,7 @@ mzap_create_impl(objset_t *os, uint64_t obj, int normflags, zap_flags_t flags, /* Only fat zap supports flags; upgrade immediately. */ VERIFY(0 == zap_lockdir(os, obj, tx, RW_WRITER, B_FALSE, B_FALSE, &zap)); - VERIFY0(mzap_upgrade(&zap, tx, flags)); + VERIFY3U(0, ==, mzap_upgrade(&zap, tx, flags)); zap_unlockdir(zap); } } diff --git a/usr/src/uts/common/fs/zfs/zfeature.c b/usr/src/uts/common/fs/zfs/zfeature.c index 2745b6eebf..b9250df4a9 100644 --- a/usr/src/uts/common/fs/zfs/zfeature.c +++ b/usr/src/uts/common/fs/zfs/zfeature.c @@ -351,7 +351,7 @@ void spa_feature_enable(spa_t *spa, zfeature_info_t *feature, dmu_tx_t *tx) { ASSERT3U(spa_version(spa), >=, SPA_VERSION_FEATURES); - VERIFY0(feature_do_action(spa->spa_meta_objset, + VERIFY3U(0, ==, feature_do_action(spa->spa_meta_objset, spa->spa_feat_for_read_obj, spa->spa_feat_for_write_obj, spa->spa_feat_desc_obj, feature, FEATURE_ACTION_ENABLE, tx)); } @@ -366,7 +366,7 @@ void spa_feature_incr(spa_t *spa, zfeature_info_t *feature, dmu_tx_t *tx) { ASSERT3U(spa_version(spa), >=, SPA_VERSION_FEATURES); - VERIFY0(feature_do_action(spa->spa_meta_objset, + VERIFY3U(0, ==, feature_do_action(spa->spa_meta_objset, spa->spa_feat_for_read_obj, spa->spa_feat_for_write_obj, spa->spa_feat_desc_obj, feature, FEATURE_ACTION_INCR, tx)); } @@ -381,7 +381,7 @@ void spa_feature_decr(spa_t *spa, zfeature_info_t *feature, dmu_tx_t *tx) { ASSERT3U(spa_version(spa), >=, SPA_VERSION_FEATURES); - VERIFY0(feature_do_action(spa->spa_meta_objset, + VERIFY3U(0, ==, feature_do_action(spa->spa_meta_objset, spa->spa_feat_for_read_obj, spa->spa_feat_for_write_obj, spa->spa_feat_desc_obj, feature, FEATURE_ACTION_DECR, tx)); } diff --git a/usr/src/uts/common/fs/zfs/zfs_debug.c b/usr/src/uts/common/fs/zfs/zfs_debug.c index 9cff382e9c..d0f411a993 100644 --- a/usr/src/uts/common/fs/zfs/zfs_debug.c +++ b/usr/src/uts/common/fs/zfs/zfs_debug.c @@ -20,10 +20,8 @@ */ /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2012 by Delphix. All rights reserved. */ - #include list_t zfs_dbgmsgs; @@ -50,12 +48,12 @@ zfs_dbgmsg_fini(void) zfs_dbgmsg_size -= size; } mutex_destroy(&zfs_dbgmsgs_lock); - ASSERT0(zfs_dbgmsg_size); + ASSERT3U(zfs_dbgmsg_size, ==, 0); } /* * Print these messages by running: - * echo ::zfs_dbgmsg | mdb -k + * echo ::zfs_dbgmsg | mdb -k * * Monitor these messages by running: * dtrace -q -n 'zfs-dbgmsg{printf("%s\n", stringof(arg0))}' diff --git a/usr/src/uts/common/fs/zfs/zfs_dir.c b/usr/src/uts/common/fs/zfs/zfs_dir.c index 1d45edbc34..b06d29ab33 100644 --- a/usr/src/uts/common/fs/zfs/zfs_dir.c +++ b/usr/src/uts/common/fs/zfs/zfs_dir.c @@ -20,7 +20,6 @@ */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2012 by Delphix. All rights reserved. */ #include @@ -455,8 +454,8 @@ zfs_unlinked_add(znode_t *zp, dmu_tx_t *tx) ASSERT(zp->z_unlinked); ASSERT(zp->z_links == 0); - VERIFY0(zap_add_int(zfsvfs->z_os, zfsvfs->z_unlinkedobj, - zp->z_id, tx)); + VERIFY3U(0, ==, + zap_add_int(zfsvfs->z_os, zfsvfs->z_unlinkedobj, zp->z_id, tx)); } /* @@ -672,8 +671,8 @@ zfs_rmnode(znode_t *zp) } /* Remove this znode from the unlinked set */ - VERIFY0(zap_remove_int(zfsvfs->z_os, zfsvfs->z_unlinkedobj, - xzp->z_id, tx)); + VERIFY3U(0, ==, + zap_remove_int(zfsvfs->z_os, zfsvfs->z_unlinkedobj, zp->z_id, tx)); zfs_znode_delete(zp, tx); diff --git a/usr/src/uts/common/fs/zfs/zfs_ioctl.c b/usr/src/uts/common/fs/zfs/zfs_ioctl.c index 5626e58ecd..2131427401 100644 --- a/usr/src/uts/common/fs/zfs/zfs_ioctl.c +++ b/usr/src/uts/common/fs/zfs/zfs_ioctl.c @@ -1958,7 +1958,7 @@ zfs_ioc_objset_stats_impl(zfs_cmd_t *zc, objset_t *os) error = zvol_get_stats(os, nv); if (error == EIO) return (error); - VERIFY0(error); + VERIFY3S(error, ==, 0); } error = put_nvlist(zc, nv); nvlist_free(nv); diff --git a/usr/src/uts/common/fs/zfs/zfs_rlock.c b/usr/src/uts/common/fs/zfs/zfs_rlock.c index ff1afcf488..7fd8f6020d 100644 --- a/usr/src/uts/common/fs/zfs/zfs_rlock.c +++ b/usr/src/uts/common/fs/zfs/zfs_rlock.c @@ -23,12 +23,6 @@ * Use is subject to license terms. */ -/* - * Copyright (c) 2012 by Delphix. All rights reserved. - */ - - - /* * This file contains the code to implement file range locking in * ZFS, although there isn't much specific to ZFS (all that comes to mind @@ -487,9 +481,9 @@ zfs_range_unlock_reader(znode_t *zp, rl_t *remove) cv_destroy(&remove->r_rd_cv); } } else { - ASSERT0(remove->r_cnt); - ASSERT0(remove->r_write_wanted); - ASSERT0(remove->r_read_wanted); + ASSERT3U(remove->r_cnt, ==, 0); + ASSERT3U(remove->r_write_wanted, ==, 0); + ASSERT3U(remove->r_read_wanted, ==, 0); /* * Find start proxy representing this reader lock, * then decrement ref count on all proxies diff --git a/usr/src/uts/common/fs/zfs/zfs_vfsops.c b/usr/src/uts/common/fs/zfs/zfs_vfsops.c index 1321259117..21ac731c1e 100644 --- a/usr/src/uts/common/fs/zfs/zfs_vfsops.c +++ b/usr/src/uts/common/fs/zfs/zfs_vfsops.c @@ -2243,7 +2243,7 @@ zfs_set_version(zfsvfs_t *zfsvfs, uint64_t newvers) error = zap_add(os, MASTER_NODE_OBJ, ZFS_SA_ATTRS, 8, 1, &sa_obj, tx); - ASSERT0(error); + ASSERT3U(error, ==, 0); VERIFY(0 == sa_set_sa_object(os, sa_obj)); sa_register_update_callback(os, zfs_sa_upgrade); diff --git a/usr/src/uts/common/fs/zfs/zfs_vnops.c b/usr/src/uts/common/fs/zfs/zfs_vnops.c index 290e509d35..0c39274caf 100644 --- a/usr/src/uts/common/fs/zfs/zfs_vnops.c +++ b/usr/src/uts/common/fs/zfs/zfs_vnops.c @@ -20,12 +20,8 @@ */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2012 by Delphix. All rights reserved. */ - - - /* Portions Copyright 2007 Jeremy Teo */ /* Portions Copyright 2010 Robert Milkowski */ @@ -1645,7 +1641,7 @@ top: &xattr_obj, sizeof (xattr_obj)); if (error == 0 && xattr_obj) { error = zfs_zget(zfsvfs, xattr_obj, &xzp); - ASSERT0(error); + ASSERT3U(error, ==, 0); dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_TRUE); dmu_tx_hold_sa(tx, xzp->z_sa_hdl, B_FALSE); } @@ -1723,11 +1719,11 @@ top: error = sa_update(zp->z_sa_hdl, SA_ZPL_XATTR(zfsvfs), &null_xattr, sizeof (uint64_t), tx); - ASSERT0(error); + ASSERT3U(error, ==, 0); } mutex_enter(&vp->v_lock); vp->v_count--; - ASSERT0(vp->v_count); + ASSERT3U(vp->v_count, ==, 0); mutex_exit(&vp->v_lock); mutex_exit(&zp->z_lock); zfs_znode_delete(zp, tx); @@ -3100,7 +3096,7 @@ top: zp->z_mode = new_mode; ASSERT3U((uintptr_t)aclp, !=, NULL); err = zfs_aclset_common(zp, aclp, cr, tx); - ASSERT0(err); + ASSERT3U(err, ==, 0); if (zp->z_acl_cached) zfs_acl_free(zp->z_acl_cached); zp->z_acl_cached = aclp; @@ -3623,7 +3619,7 @@ top: error = sa_update(szp->z_sa_hdl, SA_ZPL_FLAGS(zfsvfs), (void *)&szp->z_pflags, sizeof (uint64_t), tx); - ASSERT0(error); + ASSERT3U(error, ==, 0); error = zfs_link_destroy(sdl, szp, tx, ZRENAMING, NULL); if (error == 0) { diff --git a/usr/src/uts/common/fs/zfs/zfs_znode.c b/usr/src/uts/common/fs/zfs/zfs_znode.c index 5122082853..12639a44a9 100644 --- a/usr/src/uts/common/fs/zfs/zfs_znode.c +++ b/usr/src/uts/common/fs/zfs/zfs_znode.c @@ -20,10 +20,8 @@ */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2012 by Delphix. All rights reserved. */ - /* Portions Copyright 2007 Jeremy Teo */ #ifdef _KERNEL @@ -808,7 +806,7 @@ zfs_mknode(znode_t *dzp, vattr_t *vap, dmu_tx_t *tx, cred_t *cr, err = zap_create_claim_norm(zfsvfs->z_os, obj, zfsvfs->z_norm, DMU_OT_DIRECTORY_CONTENTS, obj_type, bonuslen, tx); - ASSERT0(err); + ASSERT3U(err, ==, 0); } else { obj = zap_create_norm(zfsvfs->z_os, zfsvfs->z_norm, DMU_OT_DIRECTORY_CONTENTS, @@ -819,7 +817,7 @@ zfs_mknode(znode_t *dzp, vattr_t *vap, dmu_tx_t *tx, cred_t *cr, err = dmu_object_claim(zfsvfs->z_os, obj, DMU_OT_PLAIN_FILE_CONTENTS, 0, obj_type, bonuslen, tx); - ASSERT0(err); + ASSERT3U(err, ==, 0); } else { obj = dmu_object_alloc(zfsvfs->z_os, DMU_OT_PLAIN_FILE_CONTENTS, 0, @@ -1001,7 +999,7 @@ zfs_mknode(znode_t *dzp, vattr_t *vap, dmu_tx_t *tx, cred_t *cr, if (obj_type == DMU_OT_ZNODE || acl_ids->z_aclp->z_version < ZFS_ACL_VERSION_FUID) { err = zfs_aclset_common(*zpp, acl_ids->z_aclp, cr, tx); - ASSERT0(err); + ASSERT3P(err, ==, 0); } ZFS_OBJ_HOLD_EXIT(zfsvfs, obj); } @@ -1422,7 +1420,7 @@ zfs_grow_blocksize(znode_t *zp, uint64_t size, dmu_tx_t *tx) if (error == ENOTSUP) return; - ASSERT0(error); + ASSERT3U(error, ==, 0); /* What blocksize did we actually get? */ dmu_object_size_from_db(sa_get_db(zp->z_sa_hdl), &zp->z_blksz, &dummy); diff --git a/usr/src/uts/common/fs/zfs/zil.c b/usr/src/uts/common/fs/zfs/zil.c index c8ff07a077..081242cece 100644 --- a/usr/src/uts/common/fs/zfs/zil.c +++ b/usr/src/uts/common/fs/zfs/zil.c @@ -20,7 +20,7 @@ */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2012 by Delphix. All rights reserved. + * Copyright (c) 2011 by Delphix. All rights reserved. */ /* Portions Copyright 2010 Robert Milkowski */ @@ -1062,7 +1062,7 @@ zil_lwb_commit(zilog_t *zilog, itx_t *itx, lwb_t *lwb) lwb->lwb_nused += reclen + dlen; lwb->lwb_max_txg = MAX(lwb->lwb_max_txg, txg); ASSERT3U(lwb->lwb_nused, <=, lwb->lwb_sz); - ASSERT0(P2PHASE(lwb->lwb_nused, sizeof (uint64_t))); + ASSERT3U(P2PHASE(lwb->lwb_nused, sizeof (uint64_t)), ==, 0); return (lwb); } diff --git a/usr/src/uts/common/fs/zfs/zio.c b/usr/src/uts/common/fs/zfs/zio.c index 36f771fe73..cfb5733f2b 100644 --- a/usr/src/uts/common/fs/zfs/zio.c +++ b/usr/src/uts/common/fs/zfs/zio.c @@ -2138,7 +2138,7 @@ zio_dva_allocate(zio_t *zio) } ASSERT(BP_IS_HOLE(bp)); - ASSERT0(BP_GET_NDVAS(bp)); + ASSERT3U(BP_GET_NDVAS(bp), ==, 0); ASSERT3U(zio->io_prop.zp_copies, >, 0); ASSERT3U(zio->io_prop.zp_copies, <=, spa_max_replication(spa)); ASSERT3U(zio->io_size, ==, BP_GET_PSIZE(bp)); diff --git a/usr/src/uts/common/sys/debug.h b/usr/src/uts/common/sys/debug.h index 85b8ab5f90..4de39d255e 100644 --- a/usr/src/uts/common/sys/debug.h +++ b/usr/src/uts/common/sys/debug.h @@ -23,10 +23,6 @@ * Use is subject to license terms. */ -/* - * Copyright (c) 2012 by Delphix. All rights reserved. - */ - /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */ @@ -118,18 +114,14 @@ _NOTE(CONSTCOND) } while (0) #define VERIFY3S(x, y, z) VERIFY3_IMPL(x, y, z, int64_t) #define VERIFY3U(x, y, z) VERIFY3_IMPL(x, y, z, uint64_t) #define VERIFY3P(x, y, z) VERIFY3_IMPL(x, y, z, uintptr_t) -#define VERIFY0(x) VERIFY3_IMPL(x, ==, 0, uintmax_t) - #if DEBUG #define ASSERT3S(x, y, z) VERIFY3_IMPL(x, y, z, int64_t) #define ASSERT3U(x, y, z) VERIFY3_IMPL(x, y, z, uint64_t) #define ASSERT3P(x, y, z) VERIFY3_IMPL(x, y, z, uintptr_t) -#define ASSERT0(x) VERIFY3_IMPL(x, ==, 0, uintmax_t) #else #define ASSERT3S(x, y, z) ((void)0) #define ASSERT3U(x, y, z) ((void)0) #define ASSERT3P(x, y, z) ((void)0) -#define ASSERT0(x) ((void)0) #endif #ifdef _KERNEL -- cgit v1.2.3 From dfbb943217bf8ab22a1a9d2e9dca01d4da95ee0b Mon Sep 17 00:00:00 2001 From: George Wilson Date: Wed, 22 Aug 2012 08:03:38 -0700 Subject: 3090 vdev_reopen() during reguid causes vdev to be treated as corrupt 3102 vdev_uberblock_load() and vdev_validate() may read the wrong label Reviewed by: Matthew Ahrens Reviewed by: Christopher Siden Reviewed by: Garrett D'Amore Approved by: Eric Schrock --- usr/src/cmd/ztest/ztest.c | 23 ++++++++- usr/src/lib/libzfs/common/libzfs_import.c | 85 ++++++++++++++----------------- usr/src/uts/common/fs/zfs/spa.c | 76 ++++++++++++++++++++------- usr/src/uts/common/fs/zfs/spa_misc.c | 17 ++++++- usr/src/uts/common/fs/zfs/sys/spa_impl.h | 1 + usr/src/uts/common/fs/zfs/sys/vdev.h | 2 +- usr/src/uts/common/fs/zfs/vdev.c | 8 +-- usr/src/uts/common/fs/zfs/vdev_label.c | 75 +++++++++++++++++---------- 8 files changed, 187 insertions(+), 100 deletions(-) (limited to 'usr/src/lib') diff --git a/usr/src/cmd/ztest/ztest.c b/usr/src/cmd/ztest/ztest.c index f196601057..bb6398cbda 100644 --- a/usr/src/cmd/ztest/ztest.c +++ b/usr/src/cmd/ztest/ztest.c @@ -362,7 +362,7 @@ ztest_info_t ztest_info[] = { { ztest_spa_rename, 1, &zopt_rarely }, { ztest_scrub, 1, &zopt_rarely }, { ztest_dsl_dataset_promote_busy, 1, &zopt_rarely }, - { ztest_vdev_attach_detach, 1, &zopt_rarely }, + { ztest_vdev_attach_detach, 1, &zopt_rarely }, { ztest_vdev_LUN_growth, 1, &zopt_rarely }, { ztest_vdev_add_remove, 1, &ztest_opts.zo_vdevtime }, @@ -413,6 +413,13 @@ static spa_t *ztest_spa = NULL; static ztest_ds_t *ztest_ds; static mutex_t ztest_vdev_lock; + +/* + * The ztest_name_lock protects the pool and dataset namespace used by + * the individual tests. To modify the namespace, consumers must grab + * this lock as writer. Grabbing the lock as reader will ensure that the + * namespace does not change while the lock is held. + */ static rwlock_t ztest_name_lock; static boolean_t ztest_dump_core = B_TRUE; @@ -4854,10 +4861,16 @@ ztest_reguid(ztest_ds_t *zd, uint64_t id) { spa_t *spa = ztest_spa; uint64_t orig, load; + int error; orig = spa_guid(spa); load = spa_load_guid(spa); - if (spa_change_guid(spa) != 0) + + (void) rw_wrlock(&ztest_name_lock); + error = spa_change_guid(spa); + (void) rw_unlock(&ztest_name_lock); + + if (error != 0) return; if (ztest_opts.zo_verbose >= 3) { @@ -5536,6 +5549,12 @@ ztest_freeze(void) ASSERT(spa_freeze_txg(spa) == UINT64_MAX); VERIFY3U(0, ==, ztest_dataset_open(0)); ztest_dataset_close(0); + + spa->spa_debug = B_TRUE; + ztest_spa = spa; + txg_wait_synced(spa_get_dsl(spa), 0); + ztest_reguid(NULL, 0); + spa_close(spa, FTAG); kernel_fini(); } diff --git a/usr/src/lib/libzfs/common/libzfs_import.c b/usr/src/lib/libzfs/common/libzfs_import.c index 414aa2f747..36d7420c3b 100644 --- a/usr/src/lib/libzfs/common/libzfs_import.c +++ b/usr/src/lib/libzfs/common/libzfs_import.c @@ -21,7 +21,7 @@ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright 2011 Nexenta Systems, Inc. All rights reserved. - * Copyright (c) 2011 by Delphix. All rights reserved. + * Copyright (c) 2012 by Delphix. All rights reserved. */ /* @@ -439,8 +439,8 @@ get_configs(libzfs_handle_t *hdl, pool_list_t *pl, boolean_t active_ok) uint_t i, nspares, nl2cache; boolean_t config_seen; uint64_t best_txg; - char *name, *hostname, *comment; - uint64_t version, guid; + char *name, *hostname; + uint64_t guid; uint_t children = 0; nvlist_t **child = NULL; uint_t holes; @@ -526,61 +526,54 @@ get_configs(libzfs_handle_t *hdl, pool_list_t *pl, boolean_t active_ok) * configuration: * * version - * pool guid - * name + * pool guid + * name + * pool txg (if available) * comment (if available) - * pool state + * pool state * hostid (if available) * hostname (if available) */ - uint64_t state; + uint64_t state, version, pool_txg; + char *comment = NULL; + + version = fnvlist_lookup_uint64(tmp, + ZPOOL_CONFIG_VERSION); + fnvlist_add_uint64(config, + ZPOOL_CONFIG_VERSION, version); + guid = fnvlist_lookup_uint64(tmp, + ZPOOL_CONFIG_POOL_GUID); + fnvlist_add_uint64(config, + ZPOOL_CONFIG_POOL_GUID, guid); + name = fnvlist_lookup_string(tmp, + ZPOOL_CONFIG_POOL_NAME); + fnvlist_add_string(config, + ZPOOL_CONFIG_POOL_NAME, name); - verify(nvlist_lookup_uint64(tmp, - ZPOOL_CONFIG_VERSION, &version) == 0); - if (nvlist_add_uint64(config, - ZPOOL_CONFIG_VERSION, version) != 0) - goto nomem; - verify(nvlist_lookup_uint64(tmp, - ZPOOL_CONFIG_POOL_GUID, &guid) == 0); - if (nvlist_add_uint64(config, - ZPOOL_CONFIG_POOL_GUID, guid) != 0) - goto nomem; - verify(nvlist_lookup_string(tmp, - ZPOOL_CONFIG_POOL_NAME, &name) == 0); - if (nvlist_add_string(config, - ZPOOL_CONFIG_POOL_NAME, name) != 0) - goto nomem; + if (nvlist_lookup_uint64(tmp, + ZPOOL_CONFIG_POOL_TXG, &pool_txg) == 0) + fnvlist_add_uint64(config, + ZPOOL_CONFIG_POOL_TXG, pool_txg); - /* - * COMMENT is optional, don't bail if it's not - * there, instead, set it to NULL. - */ if (nvlist_lookup_string(tmp, - ZPOOL_CONFIG_COMMENT, &comment) != 0) - comment = NULL; - else if (nvlist_add_string(config, - ZPOOL_CONFIG_COMMENT, comment) != 0) - goto nomem; + ZPOOL_CONFIG_COMMENT, &comment) == 0) + fnvlist_add_string(config, + ZPOOL_CONFIG_COMMENT, comment); - verify(nvlist_lookup_uint64(tmp, - ZPOOL_CONFIG_POOL_STATE, &state) == 0); - if (nvlist_add_uint64(config, - ZPOOL_CONFIG_POOL_STATE, state) != 0) - goto nomem; + state = fnvlist_lookup_uint64(tmp, + ZPOOL_CONFIG_POOL_STATE); + fnvlist_add_uint64(config, + ZPOOL_CONFIG_POOL_STATE, state); hostid = 0; if (nvlist_lookup_uint64(tmp, ZPOOL_CONFIG_HOSTID, &hostid) == 0) { - if (nvlist_add_uint64(config, - ZPOOL_CONFIG_HOSTID, hostid) != 0) - goto nomem; - verify(nvlist_lookup_string(tmp, - ZPOOL_CONFIG_HOSTNAME, - &hostname) == 0); - if (nvlist_add_string(config, - ZPOOL_CONFIG_HOSTNAME, - hostname) != 0) - goto nomem; + fnvlist_add_uint64(config, + ZPOOL_CONFIG_HOSTID, hostid); + hostname = fnvlist_lookup_string(tmp, + ZPOOL_CONFIG_HOSTNAME); + fnvlist_add_string(config, + ZPOOL_CONFIG_HOSTNAME, hostname); } config_seen = B_TRUE; diff --git a/usr/src/uts/common/fs/zfs/spa.c b/usr/src/uts/common/fs/zfs/spa.c index 9c4af11134..2bb6fac11a 100644 --- a/usr/src/uts/common/fs/zfs/spa.c +++ b/usr/src/uts/common/fs/zfs/spa.c @@ -116,6 +116,8 @@ const zio_taskq_info_t zio_taskqs[ZIO_TYPES][ZIO_TASKQ_TYPES] = { static dsl_syncfunc_t spa_sync_version; static dsl_syncfunc_t spa_sync_props; +static dsl_checkfunc_t spa_change_guid_check; +static dsl_syncfunc_t spa_change_guid_sync; static boolean_t spa_has_active_shared_spare(spa_t *spa); static int spa_load_impl(spa_t *spa, uint64_t, nvlist_t *config, spa_load_state_t state, spa_import_type_t type, boolean_t mosconfig, @@ -675,6 +677,47 @@ spa_prop_clear_bootfs(spa_t *spa, uint64_t dsobj, dmu_tx_t *tx) } } +/*ARGSUSED*/ +static int +spa_change_guid_check(void *arg1, void *arg2, dmu_tx_t *tx) +{ + spa_t *spa = arg1; + uint64_t *newguid = arg2; + vdev_t *rvd = spa->spa_root_vdev; + uint64_t vdev_state; + + spa_config_enter(spa, SCL_STATE, FTAG, RW_READER); + vdev_state = rvd->vdev_state; + spa_config_exit(spa, SCL_STATE, FTAG); + + if (vdev_state != VDEV_STATE_HEALTHY) + return (ENXIO); + + ASSERT3U(spa_guid(spa), !=, *newguid); + + return (0); +} + +static void +spa_change_guid_sync(void *arg1, void *arg2, dmu_tx_t *tx) +{ + spa_t *spa = arg1; + uint64_t *newguid = arg2; + uint64_t oldguid; + vdev_t *rvd = spa->spa_root_vdev; + + oldguid = spa_guid(spa); + + spa_config_enter(spa, SCL_STATE, FTAG, RW_READER); + rvd->vdev_guid = *newguid; + rvd->vdev_guid_sum += (*newguid - oldguid); + vdev_config_dirty(rvd); + spa_config_exit(spa, SCL_STATE, FTAG); + + spa_history_log_internal(spa, "guid change", tx, "old=%lld new=%lld", + oldguid, *newguid); +} + /* * Change the GUID for the pool. This is done so that we can later * re-import a pool built from a clone of our own vdevs. We will modify @@ -687,29 +730,23 @@ spa_prop_clear_bootfs(spa_t *spa, uint64_t dsobj, dmu_tx_t *tx) int spa_change_guid(spa_t *spa) { - uint64_t oldguid, newguid; - uint64_t txg; - - if (!(spa_mode_global & FWRITE)) - return (EROFS); - - txg = spa_vdev_enter(spa); - - if (spa->spa_root_vdev->vdev_state != VDEV_STATE_HEALTHY) - return (spa_vdev_exit(spa, NULL, txg, ENXIO)); + int error; + uint64_t guid; - oldguid = spa_guid(spa); - newguid = spa_generate_guid(NULL); - ASSERT3U(oldguid, !=, newguid); + mutex_enter(&spa_namespace_lock); + guid = spa_generate_guid(NULL); - spa->spa_root_vdev->vdev_guid = newguid; - spa->spa_root_vdev->vdev_guid_sum += (newguid - oldguid); + error = dsl_sync_task_do(spa_get_dsl(spa), spa_change_guid_check, + spa_change_guid_sync, spa, &guid, 5); - vdev_config_dirty(spa->spa_root_vdev); + if (error == 0) { + spa_config_sync(spa, B_FALSE, B_TRUE); + spa_event_notify(spa, NULL, ESC_ZFS_POOL_REGUID); + } - spa_event_notify(spa, NULL, ESC_ZFS_POOL_REGUID); + mutex_exit(&spa_namespace_lock); - return (spa_vdev_exit(spa, NULL, txg, 0)); + return (error); } /* @@ -6062,6 +6099,9 @@ spa_sync(spa_t *spa, uint64_t txg) rvd->vdev_children, txg, B_TRUE); } + if (error == 0) + spa->spa_last_synced_guid = rvd->vdev_guid; + spa_config_exit(spa, SCL_STATE, FTAG); if (error == 0) diff --git a/usr/src/uts/common/fs/zfs/spa_misc.c b/usr/src/uts/common/fs/zfs/spa_misc.c index 9400194a93..9f50e38652 100644 --- a/usr/src/uts/common/fs/zfs/spa_misc.c +++ b/usr/src/uts/common/fs/zfs/spa_misc.c @@ -1348,16 +1348,29 @@ spa_name(spa_t *spa) uint64_t spa_guid(spa_t *spa) { + dsl_pool_t *dp = spa_get_dsl(spa); + uint64_t guid; + /* * If we fail to parse the config during spa_load(), we can go through * the error path (which posts an ereport) and end up here with no root * vdev. We stash the original pool guid in 'spa_config_guid' to handle * this case. */ - if (spa->spa_root_vdev != NULL) + if (spa->spa_root_vdev == NULL) + return (spa->spa_config_guid); + + guid = spa->spa_last_synced_guid != 0 ? + spa->spa_last_synced_guid : spa->spa_root_vdev->vdev_guid; + + /* + * Return the most recently synced out guid unless we're + * in syncing context. + */ + if (dp && dsl_pool_sync_context(dp)) return (spa->spa_root_vdev->vdev_guid); else - return (spa->spa_config_guid); + return (guid); } uint64_t diff --git a/usr/src/uts/common/fs/zfs/sys/spa_impl.h b/usr/src/uts/common/fs/zfs/sys/spa_impl.h index 5118954b00..027832e858 100644 --- a/usr/src/uts/common/fs/zfs/sys/spa_impl.h +++ b/usr/src/uts/common/fs/zfs/sys/spa_impl.h @@ -141,6 +141,7 @@ struct spa { vdev_t *spa_root_vdev; /* top-level vdev container */ uint64_t spa_config_guid; /* config pool guid */ uint64_t spa_load_guid; /* spa_load initialized guid */ + uint64_t spa_last_synced_guid; /* last synced guid */ list_t spa_config_dirty_list; /* vdevs with dirty config */ list_t spa_state_dirty_list; /* vdevs with dirty state */ spa_aux_vdev_t spa_spares; /* hot spares */ diff --git a/usr/src/uts/common/fs/zfs/sys/vdev.h b/usr/src/uts/common/fs/zfs/sys/vdev.h index 2329d5b85c..7e34889b61 100644 --- a/usr/src/uts/common/fs/zfs/sys/vdev.h +++ b/usr/src/uts/common/fs/zfs/sys/vdev.h @@ -142,7 +142,7 @@ extern nvlist_t *vdev_config_generate(spa_t *spa, vdev_t *vd, struct uberblock; extern uint64_t vdev_label_offset(uint64_t psize, int l, uint64_t offset); extern int vdev_label_number(uint64_t psise, uint64_t offset); -extern nvlist_t *vdev_label_read_config(vdev_t *vd, int label); +extern nvlist_t *vdev_label_read_config(vdev_t *vd, uint64_t txg); extern void vdev_uberblock_load(vdev_t *, struct uberblock *, nvlist_t **); typedef enum { diff --git a/usr/src/uts/common/fs/zfs/vdev.c b/usr/src/uts/common/fs/zfs/vdev.c index 6fbaf7b7ec..0b8e073f90 100644 --- a/usr/src/uts/common/fs/zfs/vdev.c +++ b/usr/src/uts/common/fs/zfs/vdev.c @@ -1327,9 +1327,9 @@ vdev_validate(vdev_t *vd, boolean_t strict) if (vd->vdev_ops->vdev_op_leaf && vdev_readable(vd)) { uint64_t aux_guid = 0; nvlist_t *nvl; + uint64_t txg = strict ? spa->spa_config_txg : -1ULL; - if ((label = vdev_label_read_config(vd, VDEV_BEST_LABEL)) == - NULL) { + if ((label = vdev_label_read_config(vd, txg)) == NULL) { vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN, VDEV_AUX_BAD_LABEL); return (0); @@ -1511,7 +1511,7 @@ vdev_reopen(vdev_t *vd) !l2arc_vdev_present(vd)) l2arc_add_vdev(spa, vd); } else { - (void) vdev_validate(vd, B_TRUE); + (void) vdev_validate(vd, spa_last_synced_txg(spa)); } /* @@ -1970,7 +1970,7 @@ vdev_validate_aux(vdev_t *vd) if (!vdev_readable(vd)) return (0); - if ((label = vdev_label_read_config(vd, VDEV_BEST_LABEL)) == NULL) { + if ((label = vdev_label_read_config(vd, -1ULL)) == NULL) { vdev_set_state(vd, B_TRUE, VDEV_STATE_CANT_OPEN, VDEV_AUX_CORRUPT_DATA); return (-1); diff --git a/usr/src/uts/common/fs/zfs/vdev_label.c b/usr/src/uts/common/fs/zfs/vdev_label.c index b943647249..e573feb5d2 100644 --- a/usr/src/uts/common/fs/zfs/vdev_label.c +++ b/usr/src/uts/common/fs/zfs/vdev_label.c @@ -433,17 +433,22 @@ vdev_top_config_generate(spa_t *spa, nvlist_t *config) } /* - * Returns the configuration from the label of the given vdev. If 'label' is - * VDEV_BEST_LABEL, each label of the vdev will be read until a valid - * configuration is found; otherwise, only the specified label will be read. + * Returns the configuration from the label of the given vdev. For vdevs + * which don't have a txg value stored on their label (i.e. spares/cache) + * or have not been completely initialized (txg = 0) just return + * the configuration from the first valid label we find. Otherwise, + * find the most up-to-date label that does not exceed the specified + * 'txg' value. */ nvlist_t * -vdev_label_read_config(vdev_t *vd, int label) +vdev_label_read_config(vdev_t *vd, uint64_t txg) { spa_t *spa = vd->vdev_spa; nvlist_t *config = NULL; vdev_phys_t *vp; zio_t *zio; + uint64_t best_txg = 0; + int error = 0; int flags = ZIO_FLAG_CONFIG_WRITER | ZIO_FLAG_CANFAIL | ZIO_FLAG_SPECULATIVE; @@ -456,8 +461,7 @@ vdev_label_read_config(vdev_t *vd, int label) retry: for (int l = 0; l < VDEV_LABELS; l++) { - if (label >= 0 && label < VDEV_LABELS && label != l) - continue; + nvlist_t *label = NULL; zio = zio_root(spa, NULL, NULL, flags); @@ -467,12 +471,31 @@ retry: if (zio_wait(zio) == 0 && nvlist_unpack(vp->vp_nvlist, sizeof (vp->vp_nvlist), - &config, 0) == 0) - break; + &label, 0) == 0) { + uint64_t label_txg = 0; + + /* + * Auxiliary vdevs won't have txg values in their + * labels and newly added vdevs may not have been + * completely initialized so just return the + * configuration from the first valid label we + * encounter. + */ + error = nvlist_lookup_uint64(label, + ZPOOL_CONFIG_POOL_TXG, &label_txg); + if ((error || label_txg == 0) && !config) { + config = label; + break; + } else if (label_txg <= txg && label_txg > best_txg) { + best_txg = label_txg; + nvlist_free(config); + config = fnvlist_dup(label); + } + } - if (config != NULL) { - nvlist_free(config); - config = NULL; + if (label != NULL) { + nvlist_free(label); + label = NULL; } } @@ -507,7 +530,7 @@ vdev_inuse(vdev_t *vd, uint64_t crtxg, vdev_labeltype_t reason, /* * Read the label, if any, and perform some basic sanity checks. */ - if ((label = vdev_label_read_config(vd, VDEV_BEST_LABEL)) == NULL) + if ((label = vdev_label_read_config(vd, -1ULL)) == NULL) return (B_FALSE); (void) nvlist_lookup_uint64(label, ZPOOL_CONFIG_CREATE_TXG, @@ -867,7 +890,6 @@ vdev_uberblock_compare(uberblock_t *ub1, uberblock_t *ub2) struct ubl_cbdata { uberblock_t *ubl_ubbest; /* Best uberblock */ vdev_t *ubl_vd; /* vdev associated with the above */ - int ubl_label; /* Label associated with the above */ }; static void @@ -886,15 +908,13 @@ vdev_uberblock_load_done(zio_t *zio) if (ub->ub_txg <= spa->spa_load_max_txg && vdev_uberblock_compare(ub, cbp->ubl_ubbest) > 0) { /* - * Keep track of the vdev and label in which this - * uberblock was found. We will use this information - * later to obtain the config nvlist associated with + * Keep track of the vdev in which this uberblock + * was found. We will use this information later + * to obtain the config nvlist associated with * this uberblock. */ *cbp->ubl_ubbest = *ub; cbp->ubl_vd = vd; - cbp->ubl_label = vdev_label_number(vd->vdev_psize, - zio->io_offset); } mutex_exit(&rio->io_lock); } @@ -926,12 +946,11 @@ vdev_uberblock_load_impl(zio_t *zio, vdev_t *vd, int flags, * Reads the 'best' uberblock from disk along with its associated * configuration. First, we read the uberblock array of each label of each * vdev, keeping track of the uberblock with the highest txg in each array. - * Then, we read the configuration from the same label as the best uberblock. + * Then, we read the configuration from the same vdev as the best uberblock. */ void vdev_uberblock_load(vdev_t *rvd, uberblock_t *ub, nvlist_t **config) { - int i; zio_t *zio; spa_t *spa = rvd->vdev_spa; struct ubl_cbdata cb; @@ -951,13 +970,15 @@ vdev_uberblock_load(vdev_t *rvd, uberblock_t *ub, nvlist_t **config) zio = zio_root(spa, NULL, &cb, flags); vdev_uberblock_load_impl(zio, rvd, flags, &cb); (void) zio_wait(zio); - if (cb.ubl_vd != NULL) { - for (i = cb.ubl_label % 2; i < VDEV_LABELS; i += 2) { - *config = vdev_label_read_config(cb.ubl_vd, i); - if (*config != NULL) - break; - } - } + + /* + * It's possible that the best uberblock was discovered on a label + * that has a configuration which was written in a future txg. + * Search all labels on this vdev to find the configuration that + * matches the txg for our uberblock. + */ + if (cb.ubl_vd != NULL) + *config = vdev_label_read_config(cb.ubl_vd, ub->ub_txg); spa_config_exit(spa, SCL_ALL, FTAG); } -- cgit v1.2.3 From 2c2d21e98a95cba5687ec6574c974a5c6c4a6adb Mon Sep 17 00:00:00 2001 From: Richard Lowe Date: Sun, 8 Jul 2012 03:19:56 +0100 Subject: 3063 many instances of unlike enum comparison Reviewed by: Robert Mustacchi Approved by: Garrett D'Amore --- usr/src/cmd/cmd-inet/usr.lib/ilbd/ilbd_rules.c | 4 +- usr/src/cmd/cmd-inet/usr.sbin/snoop/snoop_nlm.c | 20 +++++----- usr/src/cmd/fs.d/autofs/autod_nfs.c | 4 +- usr/src/cmd/fs.d/nfs/mount/mount.c | 4 +- usr/src/cmd/mdb/common/modules/smbsrv/smbsrv.c | 2 +- usr/src/cmd/pcidr/plugins/default/pcidr_cfga.c | 4 +- usr/src/lib/cfgadm_plugins/fp/common/cfga_fp.c | 45 +++++++++++----------- usr/src/lib/cfgadm_plugins/ib/common/cfga_ib.c | 2 +- usr/src/lib/cfgadm_plugins/sata/common/cfga_sata.c | 2 +- .../lib/krb5/plugins/preauth/pkinit/pkinit_srv.c | 5 ++- usr/src/lib/libsun_ima/common/ima.c | 2 +- usr/src/lib/lvm/libmeta/common/meta_smf.c | 6 +-- usr/src/lib/lvm/libmeta/common/meta_trans.c | 40 +++++++++---------- usr/src/uts/common/fs/nfs/nfs3_xdr.c | 6 ++- usr/src/uts/common/fs/nfs/nfs4_xdr.c | 10 ++--- usr/src/uts/common/fs/nfs/nfs_server.c | 4 +- usr/src/uts/common/fs/sockfs/nl7chttp.c | 2 +- usr/src/uts/common/io/ib/mgt/ibcm/ibcm_ti.c | 2 +- usr/src/uts/common/io/scsi/targets/st.c | 4 +- usr/src/uts/common/io/softmac/softmac_main.c | 1 - usr/src/uts/common/sys/softmac_impl.h | 5 --- usr/src/uts/i86pc/io/pci/pci.c | 5 ++- usr/src/uts/intel/io/heci/heci_intr.c | 2 +- 23 files changed, 84 insertions(+), 97 deletions(-) (limited to 'usr/src/lib') diff --git a/usr/src/cmd/cmd-inet/usr.lib/ilbd/ilbd_rules.c b/usr/src/cmd/cmd-inet/usr.lib/ilbd/ilbd_rules.c index ed67861e4f..1f6db58c15 100644 --- a/usr/src/cmd/cmd-inet/usr.lib/ilbd/ilbd_rules.c +++ b/usr/src/cmd/cmd-inet/usr.lib/ilbd/ilbd_rules.c @@ -343,8 +343,8 @@ ilbd_retrieve_rule(ilbd_name_t rl_name, uint32_t *rbuf, size_t *rbufsz) return (rc); if (rinfo->rl_conndrain == 0) rinfo->rl_conndrain = tmp_info.rl_conndrain; - if ((rinfo->rl_topo == ILB_TOPO_IMPL_NAT || - rinfo->rl_topo == ILB_TOPO_IMPL_HALF_NAT) && + if ((rinfo->rl_topo == ILB_TOPO_NAT || + rinfo->rl_topo == ILB_TOPO_HALF_NAT) && rinfo->rl_nat_timeout == 0) { rinfo->rl_nat_timeout = tmp_info.rl_nat_timeout; } diff --git a/usr/src/cmd/cmd-inet/usr.sbin/snoop/snoop_nlm.c b/usr/src/cmd/cmd-inet/usr.sbin/snoop/snoop_nlm.c index 569aee1936..2834788a8c 100644 --- a/usr/src/cmd/cmd-inet/usr.sbin/snoop/snoop_nlm.c +++ b/usr/src/cmd/cmd-inet/usr.sbin/snoop/snoop_nlm.c @@ -24,8 +24,6 @@ * All rights reserved. */ -#pragma ident "%Z%%M% %I% %E% SMI" - #include #include #include @@ -466,8 +464,8 @@ show_stat() s = (enum nlm_stats) getxdr_u_long(); (void) sprintf(get_line(0, 0), - "Status = %d (%s)", - s, nameof_stat((ulong_t)s)); + "Status = %d (%s)", + s, nameof_stat((ulong_t)s)); return (s); } @@ -653,8 +651,8 @@ show_nlm_mode() m = (enum fsh_mode) getxdr_u_long(); (void) sprintf(get_line(0, 0), - "Mode = %d (%s)", - m, nameof_mode((uint_t)m)); + "Mode = %d (%s)", + m, nameof_mode((uint_t)m)); } static void @@ -664,8 +662,8 @@ show_nlm_access() a = (enum fsh_access) getxdr_u_long(); (void) sprintf(get_line(0, 0), - "Access = %d (%s)", - a, nameof_access((uint_t)a)); + "Access = %d (%s)", + a, nameof_access((uint_t)a)); } static char * @@ -1105,8 +1103,8 @@ show_stat4() s = (enum nlm4_stats) getxdr_u_long(); (void) sprintf(get_line(0, 0), - "Status = %d (%s)", - s, nameof_stat4((ulong_t)s)); + "Status = %d (%s)", + s, nameof_stat4((ulong_t)s)); return (s); } @@ -1115,7 +1113,7 @@ static void show_testres4() { show_netobj("Cookie = %s"); - if (show_stat() == NLM4_DENIED) { + if (show_stat() == nlm_denied) { showxdr_bool("Exclusive = %s"); showxdr_long("Svid = %ld (process id)"); show_netobj("Owner handle = %s"); diff --git a/usr/src/cmd/fs.d/autofs/autod_nfs.c b/usr/src/cmd/fs.d/autofs/autod_nfs.c index 89cb2b1111..bf1c1c406e 100644 --- a/usr/src/cmd/fs.d/autofs/autod_nfs.c +++ b/usr/src/cmd/fs.d/autofs/autod_nfs.c @@ -3128,7 +3128,7 @@ get_server_fh(char *hostname, rpcprog_t prog, rpcvers_t vers, memset((char *)&res, 0, sizeof (wnl_diropres)); arg.name = fspath; if (wnlproc_lookup_2(&arg, &res, cl) != - RPC_SUCCESS || res.status != NFS_OK) + RPC_SUCCESS || res.status != WNL_OK) goto done; *fhp = malloc(sizeof (wnl_fh)); @@ -3153,7 +3153,7 @@ get_server_fh(char *hostname, rpcprog_t prog, rpcvers_t vers, memset((char *)&res, 0, sizeof (WNL_LOOKUP3res)); arg.what.name = fspath; if (wnlproc3_lookup_3(&arg, &res, cl) != - RPC_SUCCESS || res.status != NFS3_OK) + RPC_SUCCESS || res.status != WNL3_OK) goto done; fh3p = (nfs_fh3 *)malloc(sizeof (*fh3p)); diff --git a/usr/src/cmd/fs.d/nfs/mount/mount.c b/usr/src/cmd/fs.d/nfs/mount/mount.c index e664fca769..c228a91d05 100644 --- a/usr/src/cmd/fs.d/nfs/mount/mount.c +++ b/usr/src/cmd/fs.d/nfs/mount/mount.c @@ -1588,7 +1588,7 @@ get_the_addr(char *hostname, ulong_t prog, ulong_t vers, arg.name = fspath; memset((char *)&res, 0, sizeof (wnl_diropres)); if (wnlproc_lookup_2(&arg, &res, cl) != - RPC_SUCCESS || res.status != NFS_OK) + RPC_SUCCESS || res.status != WNL_OK) goto done; *fhp = malloc(sizeof (wnl_fh)); @@ -1610,7 +1610,7 @@ get_the_addr(char *hostname, ulong_t prog, ulong_t vers, arg.what.name = fspath; memset((char *)&res, 0, sizeof (WNL_LOOKUP3res)); if (wnlproc3_lookup_3(&arg, &res, cl) != - RPC_SUCCESS || res.status != NFS3_OK) + RPC_SUCCESS || res.status != WNL3_OK) goto done; fh3p = (nfs_fh3 *)malloc(sizeof (*fh3p)); diff --git a/usr/src/cmd/mdb/common/modules/smbsrv/smbsrv.c b/usr/src/cmd/mdb/common/modules/smbsrv/smbsrv.c index cfc954a7ad..932637d26e 100644 --- a/usr/src/cmd/mdb/common/modules/smbsrv/smbsrv.c +++ b/usr/src/cmd/mdb/common/modules/smbsrv/smbsrv.c @@ -1237,7 +1237,7 @@ smb_dcmd_ofile(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv) if (opts & SMB_OPT_VERBOSE) { const char *state; - if (of->f_state >= SMB_ODIR_STATE_SENTINEL) + if (of->f_state >= SMB_OFILE_STATE_SENTINEL) state = "INVALID"; else state = smb_ofile_state[of->f_state]; diff --git a/usr/src/cmd/pcidr/plugins/default/pcidr_cfga.c b/usr/src/cmd/pcidr/plugins/default/pcidr_cfga.c index 631c602a8f..859467ff93 100644 --- a/usr/src/cmd/pcidr/plugins/default/pcidr_cfga.c +++ b/usr/src/cmd/pcidr/plugins/default/pcidr_cfga.c @@ -24,8 +24,6 @@ * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" - #include #include #include @@ -65,7 +63,7 @@ pcidr_cfga_stat_name(cfga_stat_t val) static struct { - cfga_stat_t cmd; + cfga_cmd_t cmd; char *name; } pcidr_cfga_cmd_nametab[] = { {CFGA_CMD_NONE, "CFGA_CMD_NONE"}, diff --git a/usr/src/lib/cfgadm_plugins/fp/common/cfga_fp.c b/usr/src/lib/cfgadm_plugins/fp/common/cfga_fp.c index d24104c900..6bb74889e7 100644 --- a/usr/src/lib/cfgadm_plugins/fp/common/cfga_fp.c +++ b/usr/src/lib/cfgadm_plugins/fp/common/cfga_fp.c @@ -23,9 +23,6 @@ * Use is subject to license terms. */ - - - #include "cfga_fp.h" /* @@ -70,11 +67,11 @@ cfga_change_state( /* Only configure and unconfigure operations are supported */ if (state_change_cmd != CFGA_CMD_CONFIGURE && - state_change_cmd != CFGA_CMD_UNCONFIGURE) { + state_change_cmd != CFGA_CMD_UNCONFIGURE) { return (CFGA_OPNOTSUPP); } - if ((ret = apidt_create(ap_id, &apidt, errstring)) != CFGA_OK) { + if ((ret = apidt_create(ap_id, &apidt, errstring)) != FPCFGA_OK) { return (err_cvt(ret)); } @@ -84,7 +81,8 @@ cfga_change_state( hw_option_p = hw_option; /* Use getsubopt() if more options get added */ while (*hw_option_p != '\0') { - switch (getsubopt(&hw_option_p, fp_cs_hw_opts, &value)) { + switch (getsubopt(&hw_option_p, fp_cs_hw_opts, + &value)) { case OPT_DISABLE_RCM : apidt.flags |= FLAG_DISABLE_RCM; break; @@ -98,7 +96,7 @@ cfga_change_state( case OPT_REMOVE_UNUSABLE_SCSI_LUN: if (state_change_cmd != CFGA_CMD_UNCONFIGURE) { cfga_err(errstring, 0, ERRARG_OPT_INVAL, - options, 0); + options, 0); S_FREE(hw_option); apidt_free(&apidt); return (CFGA_ERROR); @@ -108,11 +106,11 @@ cfga_change_state( default : /* process unknonw option. */ cfga_err(errstring, 0, ERRARG_OPT_INVAL, - options, 0); + options, 0); S_FREE(hw_option); apidt_free(&apidt); return (CFGA_ERROR); - } + } } S_FREE(hw_option); } @@ -138,15 +136,15 @@ cfga_change_state( if ((ret = findMatchingAdapterPort(apidt.xport_phys, &handle, &portIndex, &portAttrs, errstring)) == FPCFGA_OK) { - ret = dev_change_state(state_change_cmd, &apidt, &pwwn, - flags, errstring, handle, portAttrs); - HBA_CloseAdapter(handle); - HBA_FreeLibrary(); + ret = dev_change_state(state_change_cmd, &apidt, &pwwn, + flags, errstring, handle, portAttrs); + HBA_CloseAdapter(handle); + HBA_FreeLibrary(); } } else { /* Change state of all devices on FCA and the FCA itself */ ret = fca_change_state(state_change_cmd, &apidt, - flags, errstring); + flags, errstring); } apidt_free(&apidt); @@ -241,7 +239,8 @@ cfga_list_ext( hw_option_p = hw_option; /* Use getsubopt() if more options get added */ while (*hw_option_p != '\0') { - switch (getsubopt(&hw_option_p, fp_list_hw_opts, &value)) { + switch (getsubopt(&hw_option_p, fp_list_hw_opts, + &value)) { case OPT_DEVINFO_FORCE : fp_flags |= FLAG_DEVINFO_FORCE; break; @@ -252,17 +251,17 @@ cfga_list_ext( default : /* process unknonw option. */ cfga_err(errstring, 0, ERRARG_OPT_INVAL, - options, 0); + options, 0); S_FREE(hw_option); return (CFGA_ERROR); - } + } } S_FREE(hw_option); } /* if force_devinfo is specified check uid = 0 or not. */ if (((fp_flags & FLAG_DEVINFO_FORCE) == FLAG_DEVINFO_FORCE) && - (geteuid() != 0)) { + (geteuid() != 0)) { return (CFGA_PRIV); } @@ -294,14 +293,14 @@ cfga_list_ext( if ((fp_flags & FLAG_FCP_DEV) == FLAG_FCP_DEV) { ret = do_list_FCP_dev(ap_id, fp_flags, cmd, &ldatalistp, &nelem, - errstring); + errstring); if (ret != FPCFGA_OK) { list_free(&ldatalistp); return (err_cvt(ret)); } } else { if ((ret = apidt_create(ap_id, &apidt, errstring)) - != FPCFGA_OK) { + != FPCFGA_OK) { return (err_cvt(ret)); } @@ -371,10 +370,10 @@ cfga_ap_id_cmp(const char *ap_id1, const char *ap_id2) i++; if ((ap_id1[i] == '\0') && - !(strncmp(&ap_id2[i], LUN_COMP_SEP, strlen(LUN_COMP_SEP)))) { + !(strncmp(&ap_id2[i], LUN_COMP_SEP, strlen(LUN_COMP_SEP)))) { return (0); } else if ((ap_id2[i] == '\0') && - !(strncmp(&ap_id1[i], LUN_COMP_SEP, strlen(LUN_COMP_SEP)))) { + !(strncmp(&ap_id1[i], LUN_COMP_SEP, strlen(LUN_COMP_SEP)))) { return (0); } @@ -388,7 +387,7 @@ cfga_ap_id_cmp(const char *ap_id1, const char *ap_id2) if (isxdigit(ap_id1[i]) && isxdigit(ap_id2[i])) { ret = (strtoll((ap_id1 + i), NULL, 16)) - - (strtoll((ap_id2 + i), NULL, 16)); + (strtoll((ap_id2 + i), NULL, 16)); if (ret > 0) { return (1); } else if (ret < 0) { diff --git a/usr/src/lib/cfgadm_plugins/ib/common/cfga_ib.c b/usr/src/lib/cfgadm_plugins/ib/common/cfga_ib.c index 6dc2c8cf2e..b5689ccf35 100644 --- a/usr/src/lib/cfgadm_plugins/ib/common/cfga_ib.c +++ b/usr/src/lib/cfgadm_plugins/ib/common/cfga_ib.c @@ -1557,7 +1557,7 @@ ib_fill_static_apids(char *ap_id, cfga_list_data_t *clp) /* Get /dev/cfg path to corresponding to the physical ap_id */ /* Remember ap_id_log must be freed */ - if ((cfga_ib_ret_t)ib_physpath_to_devlink(ap_id, &ap_id_log, + if (ib_physpath_to_devlink(ap_id, &ap_id_log, &l_err) != ICFGA_OK) { DPRINTF("ib_fill_static_apids: " "ib_physpath_to_devlink failed\n"); diff --git a/usr/src/lib/cfgadm_plugins/sata/common/cfga_sata.c b/usr/src/lib/cfgadm_plugins/sata/common/cfga_sata.c index 10d85ace37..29f059b2db 100644 --- a/usr/src/lib/cfgadm_plugins/sata/common/cfga_sata.c +++ b/usr/src/lib/cfgadm_plugins/sata/common/cfga_sata.c @@ -1695,7 +1695,7 @@ cfga_list_ext( } else { /* This is an empty port */ - if (get_port_num(ap_id, &port) != SATA_CFGA_OK) { + if (get_port_num(ap_id, &port) != CFGA_SATA_OK) { goto bailout; } diff --git a/usr/src/lib/krb5/plugins/preauth/pkinit/pkinit_srv.c b/usr/src/lib/krb5/plugins/preauth/pkinit/pkinit_srv.c index 04f45828e5..17ee00992c 100644 --- a/usr/src/lib/krb5/plugins/preauth/pkinit/pkinit_srv.c +++ b/usr/src/lib/krb5/plugins/preauth/pkinit/pkinit_srv.c @@ -789,8 +789,9 @@ pkinit_server_return_padata(krb5_context context, } /* if this DH, then process finish computing DH key */ - if (rep != NULL && (rep->choice == choice_pa_pk_as_rep_dhInfo || - rep->choice == choice_pa_pk_as_rep_draft9_dhSignedData)) { + if (((rep != NULL) && (rep->choice == choice_pa_pk_as_rep_dhInfo)) || + ((rep9 != NULL) && rep9->choice == + choice_pa_pk_as_rep_draft9_dhSignedData)) { pkiDebug("received DH key delivery AS REQ\n"); retval = server_process_dh(context, plgctx->cryptoctx, reqctx->cryptoctx, plgctx->idctx, subjectPublicKey, diff --git a/usr/src/lib/libsun_ima/common/ima.c b/usr/src/lib/libsun_ima/common/ima.c index b479cf4f95..0a8787756a 100644 --- a/usr/src/lib/libsun_ima/common/ima.c +++ b/usr/src/lib/libsun_ima/common/ima.c @@ -2714,7 +2714,7 @@ getAuthMethods( } i = 0; - if (auth.a_auth_method == IMA_AUTHMETHOD_NONE) { + if (auth.a_auth_method == authMethodNone) { pMethodList[i++] = IMA_AUTHMETHOD_NONE; } else if (auth.a_auth_method & authMethodCHAP) { pMethodList[i++] = IMA_AUTHMETHOD_CHAP; diff --git a/usr/src/lib/lvm/libmeta/common/meta_smf.c b/usr/src/lib/lvm/libmeta/common/meta_smf.c index cc0de9e9fa..eaa2198fe9 100644 --- a/usr/src/lib/lvm/libmeta/common/meta_smf.c +++ b/usr/src/lib/lvm/libmeta/common/meta_smf.c @@ -23,8 +23,6 @@ * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" - /* * Service Management Facility (SMF) interfaces. */ @@ -184,7 +182,7 @@ meta_smf_getmask() if ((sp = metasetnosetname(i, ep)) == NULL) { if (!mdisok(ep) && !mdiserror(ep, MDE_NO_SET) && - !mdismddberror(ep, MDE_NOTENOUGH_DB) && + !mdiserror(ep, MDE_NOTENOUGH_DB) && !mdiserror(ep, MDE_SMF_NO_SERVICE) && ep->info.errclass != MDEC_RPC) { /* @@ -257,7 +255,7 @@ enabled(char *svc_name) int rval = 0; prop = scf_simple_prop_get(NULL, svc_name, SCF_PG_GENERAL, - SCF_PROPERTY_ENABLED); + SCF_PROPERTY_ENABLED); if (scf_simple_prop_numvalues(prop) == 1) { if (*scf_simple_prop_next_boolean(prop) != 0) diff --git a/usr/src/lib/lvm/libmeta/common/meta_trans.c b/usr/src/lib/lvm/libmeta/common/meta_trans.c index 240ac4b3c0..f01e6b9c08 100644 --- a/usr/src/lib/lvm/libmeta/common/meta_trans.c +++ b/usr/src/lib/lvm/libmeta/common/meta_trans.c @@ -23,8 +23,6 @@ * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" - /* * Just in case we're not in a build environment, make sure that * TEXT_DOMAIN gets set to something. @@ -55,10 +53,8 @@ meta_trans_replace(mdsetname_t *sp, mdname_t *transnp, mdname_t *oldnp, mdname_t *newnp, mdcmdopts_t options, md_error_t *ep) { replace_params_t params; - md_dev64_t old_dev, - new_dev; - daddr_t new_start_blk, - new_end_blk; + md_dev64_t old_dev, new_dev; + daddr_t new_start_blk, new_end_blk; /* should have same set */ assert(sp != NULL); @@ -657,7 +653,7 @@ mt_l_error_to_action( is_mounted = (meta_check_inuse(sp, p->namep, MDCHK_MOUNTED, ep) != 0); - if (!mdisok(ep) && mdiserror(ep, MDE_IS_MOUNTED)) { + if (!mdisok(ep) && mdisuseerror(ep, MDE_IS_MOUNTED)) { goto out; } @@ -714,7 +710,7 @@ mt_l_error_to_action( is_mounted = (meta_check_inuse(sp, p->namep, MDCHK_MOUNTED, ep) != 0); - if (!mdisok(ep) && mdiserror(ep, MDE_IS_MOUNTED)) { + if (!mdisok(ep) && mdisuseerror(ep, MDE_IS_MOUNTED)) { goto out; } @@ -771,13 +767,13 @@ mt_l_error_to_action( } len = strlen(umnt_msg) + strlen(fsck_msg) + strlen(mnt_msg) + - (only_fsck? 1: 0) + 1; + (only_fsck? 1: 0) + 1; if (!(rmsg = Zalloc(len))) { len = 0; goto out; } rc = snprintf(rmsg, len, "%s%s%s%s", umnt_msg, fsck_msg, - !only_fsck? "\n": "", mnt_msg); + !only_fsck? "\n": "", mnt_msg); if (rc == EOF) { goto out; } @@ -982,22 +978,22 @@ trans_report( dgettext(TEXT_DOMAIN, "Master Device"), dgettext(TEXT_DOMAIN, "Start Block"), dgettext(TEXT_DOMAIN, "Dbase"), - dgettext(TEXT_DOMAIN, "Reloc")) == EOF) { + dgettext(TEXT_DOMAIN, "Reloc")) == EOF) { goto out; } /* populate the key in the name_p structure */ if ((didnp = metadevname(&sp, - transp->masternamep->dev, ep)) == NULL) { + transp->masternamep->dev, ep)) == NULL) { return (-1); } /* determine if devid does NOT exist */ if (options & PRINT_DEVID) - if ((dtp = meta_getdidbykey(sp->setno, getmyside(sp, ep), - didnp->key, ep)) == NULL) + if ((dtp = meta_getdidbykey(sp->setno, + getmyside(sp, ep), didnp->key, ep)) == NULL) { devid = dgettext(TEXT_DOMAIN, "No "); - else { + } else { devid = dgettext(TEXT_DOMAIN, "Yes"); free(dtp); } @@ -1338,7 +1334,7 @@ log_report( dgettext(TEXT_DOMAIN, "Logging Device"), dgettext(TEXT_DOMAIN, "Start Block"), dgettext(TEXT_DOMAIN, "Dbase"), - dgettext(TEXT_DOMAIN, "Reloc")) == EOF) { + dgettext(TEXT_DOMAIN, "Reloc")) == EOF) { goto out; } /* get info */ @@ -1361,10 +1357,10 @@ log_report( /* determine if devid does NOT exist */ if (options & PRINT_DEVID) - if ((dtp = meta_getdidbykey(sp->setno, getmyside(sp, ep), - didnp->key, ep)) == NULL) + if ((dtp = meta_getdidbykey(sp->setno, + getmyside(sp, ep), didnp->key, ep)) == NULL) { devid = dgettext(TEXT_DOMAIN, "No "); - else { + } else { devid = dgettext(TEXT_DOMAIN, "Yes"); free(dtp); } @@ -1504,7 +1500,7 @@ meta_lockfs_common(mdname_t *fs, void **cookie, int lockit) (void) fclose(m); switch (pid = fork()) { - case -1: + case -1: /* * We've got some major trouble here and shouldn't * continue. The user needs to clear up the problems @@ -1515,7 +1511,7 @@ meta_lockfs_common(mdname_t *fs, void **cookie, int lockit) *cookie = 0; return (1); - case 0: + case 0: (void) execl("/usr/sbin/lockfs", "lockfs", lockit ? "-w" : "-u", "-c", "Solaris Volume Manager detach lock", tab_match.mnt_mountp, 0); @@ -1527,7 +1523,7 @@ meta_lockfs_common(mdname_t *fs, void **cookie, int lockit) */ exit(1); - default: + default: if (waitpid(pid, &lock_exit, 0) != pid) { /* * We couldn't get status regarding the diff --git a/usr/src/uts/common/fs/nfs/nfs3_xdr.c b/usr/src/uts/common/fs/nfs/nfs3_xdr.c index cdec8ffc96..87da2d4577 100644 --- a/usr/src/uts/common/fs/nfs/nfs3_xdr.c +++ b/usr/src/uts/common/fs/nfs/nfs3_xdr.c @@ -591,7 +591,8 @@ xdr_fattr3_to_vattr(XDR *xdrs, fattr3_res *objp) * Common case */ vap->va_type = IXDR_GET_ENUM(ptr, enum vtype); - if (vap->va_type < NF3REG || vap->va_type > NF3FIFO) + if ((ftype3)vap->va_type < NF3REG || + (ftype3)vap->va_type > NF3FIFO) vap->va_type = VBAD; else vap->va_type = nf3_to_vt[vap->va_type]; @@ -745,7 +746,8 @@ xdr_fattr3_to_vattr(XDR *xdrs, fattr3_res *objp) /* * Fixup as needed */ - if (vap->va_type < NF3REG || vap->va_type > NF3FIFO) + if ((ftype3)vap->va_type < NF3REG || + (ftype3)vap->va_type > NF3FIFO) vap->va_type = VBAD; else vap->va_type = nf3_to_vt[vap->va_type]; diff --git a/usr/src/uts/common/fs/nfs/nfs4_xdr.c b/usr/src/uts/common/fs/nfs/nfs4_xdr.c index d4294983be..e945473fbe 100644 --- a/usr/src/uts/common/fs/nfs/nfs4_xdr.c +++ b/usr/src/uts/common/fs/nfs/nfs4_xdr.c @@ -903,8 +903,8 @@ xdr_ga_fattr_res(XDR *xdrs, struct nfs4_ga_res *garp, bitmap4 resbmap, if (!XDR_GETINT32(xdrs, (int *)&vap->va_type)) return (FALSE); - if (vap->va_type < NF4REG || - vap->va_type > NF4NAMEDATTR) + if ((nfs_ftype4)vap->va_type < NF4REG || + (nfs_ftype4)vap->va_type > NF4NAMEDATTR) vap->va_type = VBAD; else vap->va_type = nf4_to_vt[vap->va_type]; @@ -1573,8 +1573,8 @@ xdr_ga_fattr_res_inline(uint32_t *ptr, struct nfs4_ga_res *garp, if (resbmap & FATTR4_TYPE_MASK) { vap->va_type = IXDR_GET_U_INT32(ptr); - if (vap->va_type < NF4REG || - vap->va_type > NF4NAMEDATTR) + if ((nfs_ftype4)vap->va_type < NF4REG || + (nfs_ftype4)vap->va_type > NF4NAMEDATTR) vap->va_type = VBAD; else vap->va_type = nf4_to_vt[vap->va_type]; @@ -5043,7 +5043,7 @@ xdr_COMPOUND4res_clnt(XDR *xdrs, COMPOUND4res_clnt *objp) if (objp->array_len > objp->argsp->array_len) return (FALSE); - if (objp->status == NFS_OK && + if (objp->status == NFS4_OK && objp->array_len != objp->argsp->array_len) return (FALSE); diff --git a/usr/src/uts/common/fs/nfs/nfs_server.c b/usr/src/uts/common/fs/nfs/nfs_server.c index ad2fed01dc..ff0ebfe6d8 100644 --- a/usr/src/uts/common/fs/nfs/nfs_server.c +++ b/usr/src/uts/common/fs/nfs/nfs_server.c @@ -1452,11 +1452,11 @@ auth_tooweak(struct svc_req *req, char *res) if (req->rq_vers == NFS_VERSION && req->rq_proc == RFS_LOOKUP) { struct nfsdiropres *dr = (struct nfsdiropres *)res; - if (dr->dr_status == WNFSERR_CLNT_FLAVOR) + if ((enum wnfsstat)dr->dr_status == WNFSERR_CLNT_FLAVOR) return (TRUE); } else if (req->rq_vers == NFS_V3 && req->rq_proc == NFSPROC3_LOOKUP) { LOOKUP3res *resp = (LOOKUP3res *)res; - if (resp->status == WNFSERR_CLNT_FLAVOR) + if ((enum wnfsstat)resp->status == WNFSERR_CLNT_FLAVOR) return (TRUE); } return (FALSE); diff --git a/usr/src/uts/common/fs/sockfs/nl7chttp.c b/usr/src/uts/common/fs/sockfs/nl7chttp.c index 8019295836..e22c9d300c 100644 --- a/usr/src/uts/common/fs/sockfs/nl7chttp.c +++ b/usr/src/uts/common/fs/sockfs/nl7chttp.c @@ -155,7 +155,7 @@ typedef struct http_s { clock_t date; /* Response Date: */ clock_t expire; /* Response Expire: */ clock_t moddate; /* Request *Modified-Since date */ - act_t modtokid; /* Request *Modified-Since tokid */ + enum tokid_e modtokid; /* Request *Modified-Since tokid */ time_t lastmod; /* Response Last-Modified: */ str_t accept; /* Request Accept: */ str_t acceptchar; /* Request Accept-Charset: */ diff --git a/usr/src/uts/common/io/ib/mgt/ibcm/ibcm_ti.c b/usr/src/uts/common/io/ib/mgt/ibcm/ibcm_ti.c index 45fa0f63ce..feb60d22e7 100644 --- a/usr/src/uts/common/io/ib/mgt/ibcm/ibcm_ti.c +++ b/usr/src/uts/common/io/ib/mgt/ibcm/ibcm_ti.c @@ -890,7 +890,7 @@ ibt_open_rc_channel(ibt_channel_hdl_t channel, ibt_chan_open_flags_t flags, * In the case that open_channel() fails because of a * REJ or timeout, change retval to IBT_CM_FAILURE */ - if (statep->open_return_data->rc_status != IBT_CM_ACCEPT) { + if (statep->open_return_data->rc_status != IBT_CM_SUCCESS) { status = IBT_CM_FAILURE; ibtl_cm_chan_open_is_aborted(channel); } diff --git a/usr/src/uts/common/io/scsi/targets/st.c b/usr/src/uts/common/io/scsi/targets/st.c index 431fbaae56..15823ba402 100644 --- a/usr/src/uts/common/io/scsi/targets/st.c +++ b/usr/src/uts/common/io/scsi/targets/st.c @@ -11572,11 +11572,11 @@ st_calc_bnum(struct scsi_tape *un, struct buf *bp, struct scsi_pkt *pkt) if (attrib->transfers_data != TRAN_NONE) { if (count == 0) { if (attrib->transfers_data == TRAN_WRTE) { - ASSERT(un->un_pos.pmode == ST_EOM); + ASSERT(un->un_pos.eof == ST_EOM); nblks = 0; nfiles = 0; } else { - ASSERT(un->un_pos.pmode == ST_EOF_PENDING); + ASSERT(un->un_pos.eof == ST_EOF_PENDING); nblks = 0; nfiles = 1; } diff --git a/usr/src/uts/common/io/softmac/softmac_main.c b/usr/src/uts/common/io/softmac/softmac_main.c index 05f74dd4c1..e19df40e0c 100644 --- a/usr/src/uts/common/io/softmac/softmac_main.c +++ b/usr/src/uts/common/io/softmac/softmac_main.c @@ -143,7 +143,6 @@ softmac_destructor(void *buf, void *arg) ASSERT(softmac->smac_mh == NULL); ASSERT(softmac->smac_softmac[0] == NULL && softmac->smac_softmac[1] == NULL); - ASSERT(softmac->smac_state == SOFTMAC_INITIALIZED); ASSERT(softmac->smac_lower == NULL); ASSERT(softmac->smac_active == B_FALSE); ASSERT(softmac->smac_nactive == 0); diff --git a/usr/src/uts/common/sys/softmac_impl.h b/usr/src/uts/common/sys/softmac_impl.h index bd94d4982e..00c37d3422 100644 --- a/usr/src/uts/common/sys/softmac_impl.h +++ b/usr/src/uts/common/sys/softmac_impl.h @@ -72,11 +72,6 @@ typedef struct softmac_lower_s { mblk_t *sl_ack_mp; } softmac_lower_t; -typedef enum { - SOFTMAC_INITIALIZED, - SOFTMAC_READY -} softmac_lower_state_t; - typedef enum { SOFTMAC_UNINIT, SOFTMAC_ATTACH_INPROG, diff --git a/usr/src/uts/i86pc/io/pci/pci.c b/usr/src/uts/i86pc/io/pci/pci.c index b67b466cd1..122906945d 100644 --- a/usr/src/uts/i86pc/io/pci/pci.c +++ b/usr/src/uts/i86pc/io/pci/pci.c @@ -545,6 +545,7 @@ pci_ctlops(dev_info_t *dip, dev_info_t *rdip, int totreg; pci_state_t *pcip; struct attachspec *asp; + struct detachspec *dsp; switch (ctlop) { case DDI_CTLOPS_REPORTDEV: @@ -622,8 +623,8 @@ pci_ctlops(dev_info_t *dip, dev_info_t *rdip, return (ddi_ctlops(dip, rdip, ctlop, arg, result)); case DDI_CTLOPS_DETACH: - asp = (struct attachspec *)arg; - if (asp->cmd == DDI_SUSPEND && asp->when == DDI_POST) + dsp = (struct detachspec *)arg; + if (dsp->cmd == DDI_SUSPEND && dsp->when == DDI_POST) if (pci_post_suspend(rdip) != DDI_SUCCESS) return (DDI_FAILURE); return (ddi_ctlops(dip, rdip, ctlop, arg, result)); diff --git a/usr/src/uts/intel/io/heci/heci_intr.c b/usr/src/uts/intel/io/heci/heci_intr.c index d0c4ea7347..56c75308fc 100644 --- a/usr/src/uts/intel/io/heci/heci_intr.c +++ b/usr/src/uts/intel/io/heci/heci_intr.c @@ -1123,7 +1123,7 @@ heci_bh_write_handler(struct io_heci_list *cmpl_list, list_del(&priv_cb_pos->cb_list); if ((HECI_WRITING == file_ext->writing_state) && (priv_cb_pos->major_file_operations == - HECI_WRITING) && + HECI_WRITE) && (file_ext != &dev->iamthif_file_ext)) { DBG("HECI WRITE COMPLETE\n"); file_ext->writing_state = -- cgit v1.2.3 From 2e2c135528b3edfe9aaf67d1f004dc0202fa1a54 Mon Sep 17 00:00:00 2001 From: Matthew Ahrens Date: Fri, 24 Aug 2012 07:12:46 -0700 Subject: 3100 zvol rename fails with EBUSY when dirty 3103 zfs mdb module may get wrong refcount struct Reviewed by: Christopher Siden Reviewed by: Adam H. Leventhal Reviewed by: George Wilson Reviewed by: Garrett D'Amore Approved by: Eric Schrock --- usr/src/cmd/mdb/common/modules/zfs/zfs.c | 9 ++++++++- usr/src/lib/libzfs/common/libzfs_dataset.c | 2 +- usr/src/uts/common/fs/zfs/dmu_objset.c | 9 --------- usr/src/uts/common/fs/zfs/dsl_dataset.c | 17 +++++++++++------ usr/src/uts/common/fs/zfs/dsl_dir.c | 6 ------ usr/src/uts/common/fs/zfs/dsl_pool.c | 2 -- usr/src/uts/common/fs/zfs/sys/dmu_objset.h | 1 - usr/src/uts/common/fs/zfs/sys/dsl_dataset.h | 1 + usr/src/uts/common/fs/zfs/zfs_vfsops.c | 6 +++--- usr/src/uts/common/fs/zfs/zvol.c | 10 ++++++++++ 10 files changed, 34 insertions(+), 29 deletions(-) (limited to 'usr/src/lib') diff --git a/usr/src/cmd/mdb/common/modules/zfs/zfs.c b/usr/src/cmd/mdb/common/modules/zfs/zfs.c index ffb030ab07..d907a5057a 100644 --- a/usr/src/cmd/mdb/common/modules/zfs/zfs.c +++ b/usr/src/cmd/mdb/common/modules/zfs/zfs.c @@ -2338,7 +2338,14 @@ refcount(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv) return (DCMD_USAGE); if (!gotid) { - if (mdb_ctf_lookup_by_name("struct refcount", &rc_id) == -1) { + /* + * The refcount structure is different when compiled debug + * vs nondebug. Therefore, we want to make sure we get the + * refcount definition from the ZFS module, in case it has + * been compiled debug but genunix is nondebug. + */ + if (mdb_ctf_lookup_by_name("struct " ZFS_OBJ_NAME "`refcount", + &rc_id) == -1) { mdb_warn("couldn't find struct refcount"); return (DCMD_ERR); } diff --git a/usr/src/lib/libzfs/common/libzfs_dataset.c b/usr/src/lib/libzfs/common/libzfs_dataset.c index cc2603cf89..809e203b68 100644 --- a/usr/src/lib/libzfs/common/libzfs_dataset.c +++ b/usr/src/lib/libzfs/common/libzfs_dataset.c @@ -3511,7 +3511,7 @@ zfs_rollback(zfs_handle_t *zhp, zfs_handle_t *snap, boolean_t force) zhp->zfs_type == ZFS_TYPE_VOLUME); /* - * Destroy all recent snapshots and its dependends. + * Destroy all recent snapshots and their dependents. */ cb.cb_force = force; cb.cb_target = snap->zfs_name; diff --git a/usr/src/uts/common/fs/zfs/dmu_objset.c b/usr/src/uts/common/fs/zfs/dmu_objset.c index 09c4ecf4dd..b840881486 100644 --- a/usr/src/uts/common/fs/zfs/dmu_objset.c +++ b/usr/src/uts/common/fs/zfs/dmu_objset.c @@ -1236,15 +1236,6 @@ dmu_objset_is_dirty(objset_t *os, uint64_t txg) !list_is_empty(&os->os_free_dnodes[txg & TXG_MASK])); } -boolean_t -dmu_objset_is_dirty_anywhere(objset_t *os) -{ - for (int t = 0; t < TXG_SIZE; t++) - if (dmu_objset_is_dirty(os, t)) - return (B_TRUE); - return (B_FALSE); -} - static objset_used_cb_t *used_cbs[DMU_OST_NUMTYPES]; void diff --git a/usr/src/uts/common/fs/zfs/dsl_dataset.c b/usr/src/uts/common/fs/zfs/dsl_dataset.c index eb38f08d78..0a2e7191c8 100644 --- a/usr/src/uts/common/fs/zfs/dsl_dataset.c +++ b/usr/src/uts/common/fs/zfs/dsl_dataset.c @@ -1210,6 +1210,17 @@ dsl_dataset_dirty(dsl_dataset_t *ds, dmu_tx_t *tx) } } +boolean_t +dsl_dataset_is_dirty(dsl_dataset_t *ds) +{ + for (int t = 0; t < TXG_SIZE; t++) { + if (txg_list_member(&ds->ds_dir->dd_pool->dp_dirty_datasets, + ds, t)) + return (B_TRUE); + } + return (B_FALSE); +} + /* * The unique space in the head dataset can be calculated by subtracting * the space used in the most recent snapshot, that is still being used @@ -3432,9 +3443,6 @@ dsl_dataset_set_quota_sync(void *arg1, void *arg2, dmu_tx_t *tx) if (ds->ds_quota != effective_value) { dmu_buf_will_dirty(ds->ds_dbuf, tx); ds->ds_quota = effective_value; - - spa_history_log_internal_ds(ds, "set refquota", tx, - "refquota=%lld", (longlong_t)ds->ds_quota); } } @@ -3538,9 +3546,6 @@ dsl_dataset_set_reservation_sync(void *arg1, void *arg2, dmu_tx_t *tx) dsl_dir_diduse_space(ds->ds_dir, DD_USED_REFRSRV, delta, 0, 0, tx); mutex_exit(&ds->ds_dir->dd_lock); - - spa_history_log_internal_ds(ds, "set refreservation", tx, - "refreservation=%lld", (longlong_t)effective_value); } int diff --git a/usr/src/uts/common/fs/zfs/dsl_dir.c b/usr/src/uts/common/fs/zfs/dsl_dir.c index 8c867df86f..3656128793 100644 --- a/usr/src/uts/common/fs/zfs/dsl_dir.c +++ b/usr/src/uts/common/fs/zfs/dsl_dir.c @@ -1050,9 +1050,6 @@ dsl_dir_set_quota_sync(void *arg1, void *arg2, dmu_tx_t *tx) mutex_enter(&dd->dd_lock); dd->dd_phys->dd_quota = effective_value; mutex_exit(&dd->dd_lock); - - spa_history_log_internal_dd(dd, "set quota", tx, - "quota=%lld", (longlong_t)effective_value); } int @@ -1172,9 +1169,6 @@ dsl_dir_set_reservation_sync(void *arg1, void *arg2, dmu_tx_t *tx) DSL_PROP_CHECK_PREDICTION(dd, psa); dsl_dir_set_reservation_sync_impl(dd, value, tx); - - spa_history_log_internal_dd(dd, "set reservation", tx, - "reservation=%lld", (longlong_t)value); } int diff --git a/usr/src/uts/common/fs/zfs/dsl_pool.c b/usr/src/uts/common/fs/zfs/dsl_pool.c index 7a83c7b626..864b58cb41 100644 --- a/usr/src/uts/common/fs/zfs/dsl_pool.c +++ b/usr/src/uts/common/fs/zfs/dsl_pool.c @@ -126,8 +126,6 @@ dsl_pool_open(dsl_pool_t *dp) dsl_dataset_t *ds; uint64_t obj; - ASSERT(!dmu_objset_is_dirty_anywhere(dp->dp_meta_objset)); - rw_enter(&dp->dp_config_rwlock, RW_WRITER); err = zap_lookup(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, DMU_POOL_ROOT_DATASET, sizeof (uint64_t), 1, diff --git a/usr/src/uts/common/fs/zfs/sys/dmu_objset.h b/usr/src/uts/common/fs/zfs/sys/dmu_objset.h index 9439993ace..578b94732e 100644 --- a/usr/src/uts/common/fs/zfs/sys/dmu_objset.h +++ b/usr/src/uts/common/fs/zfs/sys/dmu_objset.h @@ -152,7 +152,6 @@ timestruc_t dmu_objset_snap_cmtime(objset_t *os); /* called from dsl */ void dmu_objset_sync(objset_t *os, zio_t *zio, dmu_tx_t *tx); boolean_t dmu_objset_is_dirty(objset_t *os, uint64_t txg); -boolean_t dmu_objset_is_dirty_anywhere(objset_t *os); objset_t *dmu_objset_create_impl(spa_t *spa, struct dsl_dataset *ds, blkptr_t *bp, dmu_objset_type_t type, dmu_tx_t *tx); int dmu_objset_open_impl(spa_t *spa, struct dsl_dataset *ds, blkptr_t *bp, diff --git a/usr/src/uts/common/fs/zfs/sys/dsl_dataset.h b/usr/src/uts/common/fs/zfs/sys/dsl_dataset.h index 6c43d97fd9..272c3ecde2 100644 --- a/usr/src/uts/common/fs/zfs/sys/dsl_dataset.h +++ b/usr/src/uts/common/fs/zfs/sys/dsl_dataset.h @@ -262,6 +262,7 @@ int dsl_dataset_space_written(dsl_dataset_t *oldsnap, dsl_dataset_t *new, uint64_t *usedp, uint64_t *compp, uint64_t *uncompp); int dsl_dataset_space_wouldfree(dsl_dataset_t *firstsnap, dsl_dataset_t *last, uint64_t *usedp, uint64_t *compp, uint64_t *uncompp); +boolean_t dsl_dataset_is_dirty(dsl_dataset_t *ds); int dsl_dsobj_to_dsname(char *pname, uint64_t obj, char *buf); diff --git a/usr/src/uts/common/fs/zfs/zfs_vfsops.c b/usr/src/uts/common/fs/zfs/zfs_vfsops.c index 21ac731c1e..8c3e9b093b 100644 --- a/usr/src/uts/common/fs/zfs/zfs_vfsops.c +++ b/usr/src/uts/common/fs/zfs/zfs_vfsops.c @@ -1831,9 +1831,9 @@ zfsvfs_teardown(zfsvfs_t *zfsvfs, boolean_t unmounting) /* * Evict cached data */ - if (dmu_objset_is_dirty_anywhere(zfsvfs->z_os)) - if (!(zfsvfs->z_vfs->vfs_flag & VFS_RDONLY)) - txg_wait_synced(dmu_objset_pool(zfsvfs->z_os), 0); + if (dsl_dataset_is_dirty(dmu_objset_ds(zfsvfs->z_os)) && + !(zfsvfs->z_vfs->vfs_flag & VFS_RDONLY)) + txg_wait_synced(dmu_objset_pool(zfsvfs->z_os), 0); (void) dmu_objset_evict_dbufs(zfsvfs->z_os); return (0); diff --git a/usr/src/uts/common/fs/zfs/zvol.c b/usr/src/uts/common/fs/zfs/zvol.c index edf574e3c9..fa26629c6e 100644 --- a/usr/src/uts/common/fs/zfs/zvol.c +++ b/usr/src/uts/common/fs/zfs/zvol.c @@ -641,8 +641,18 @@ zvol_last_close(zvol_state_t *zv) { zil_close(zv->zv_zilog); zv->zv_zilog = NULL; + dmu_buf_rele(zv->zv_dbuf, zvol_tag); zv->zv_dbuf = NULL; + + /* + * Evict cached data + */ + if (dsl_dataset_is_dirty(dmu_objset_ds(zv->zv_objset)) && + !(zv->zv_flags & ZVOL_RDONLY)) + txg_wait_synced(dmu_objset_pool(zv->zv_objset), 0); + (void) dmu_objset_evict_dbufs(zv->zv_objset); + dmu_objset_disown(zv->zv_objset, zvol_tag); zv->zv_objset = NULL; } -- cgit v1.2.3 From edb348833aaacfa1176e502ad38875fd0b2717ab Mon Sep 17 00:00:00 2001 From: "Adam H. Leventhal" Date: Tue, 28 Aug 2012 21:33:17 -0400 Subject: 3123 need a way to force loading of DTrace helpers Reviewed by: Richard Lowe Reviewed by: Robert Mustacchi Reviewed by: Bryan Cantrill Approved by: Richard Lowe --- usr/src/cmd/dtrace/test/tst/common/Makefile | 26 ++- .../common/drops/drp.DTRACEDROP_STKSTROVERFLOW.d | 12 +- .../dtrace/test/tst/common/pid/tst.emptystack.exe | 11 +- .../cmd/dtrace/test/tst/common/usdt/lazyprobe.d | 22 +++ .../dtrace/test/tst/common/usdt/tst.lazyprobe.c | 30 ++++ .../dtrace/test/tst/common/usdt/tst.lazyprobe1.ksh | 63 +++++++ .../dtrace/test/tst/common/usdt/tst.lazyprobe2.ksh | 64 +++++++ usr/src/lib/libdtrace/Makefile.com | 45 +++-- usr/src/lib/libdtrace/common/dlink.h | 40 +++++ usr/src/lib/libdtrace/common/dlink_audit.c | 128 ++++++++++++++ usr/src/lib/libdtrace/common/dlink_common.c | 166 ++++++++++++++++++ usr/src/lib/libdtrace/common/dlink_init.c | 85 +++++++++ usr/src/lib/libdtrace/common/drti.c | 190 --------------------- usr/src/pkg/manifests/developer-dtrace.mf | 46 ++--- usr/src/pkg/manifests/system-dtrace-tests.mf | 3 + 15 files changed, 702 insertions(+), 229 deletions(-) create mode 100644 usr/src/cmd/dtrace/test/tst/common/usdt/lazyprobe.d create mode 100644 usr/src/cmd/dtrace/test/tst/common/usdt/tst.lazyprobe.c create mode 100644 usr/src/cmd/dtrace/test/tst/common/usdt/tst.lazyprobe1.ksh create mode 100644 usr/src/cmd/dtrace/test/tst/common/usdt/tst.lazyprobe2.ksh create mode 100644 usr/src/lib/libdtrace/common/dlink.h create mode 100644 usr/src/lib/libdtrace/common/dlink_audit.c create mode 100644 usr/src/lib/libdtrace/common/dlink_common.c create mode 100644 usr/src/lib/libdtrace/common/dlink_init.c delete mode 100644 usr/src/lib/libdtrace/common/drti.c (limited to 'usr/src/lib') diff --git a/usr/src/cmd/dtrace/test/tst/common/Makefile b/usr/src/cmd/dtrace/test/tst/common/Makefile index 065124ada0..9853f3be16 100644 --- a/usr/src/cmd/dtrace/test/tst/common/Makefile +++ b/usr/src/cmd/dtrace/test/tst/common/Makefile @@ -23,7 +23,9 @@ # Copyright 2008 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # -# ident "%Z%%M% %I% %E% SMI" + +# +# Copyright (c) 2012 by Delphix. All rights reserved. # include $(SRC)/Makefile.master @@ -77,16 +79,16 @@ usdt/args.o: usdt/args.d usdt/tst.args.o $(COMPILE.d) -o usdt/args.o -s usdt/args.d usdt/tst.args.o usdt/tst.argmap.exe: usdt/tst.argmap.o usdt/argmap.o - $(LINK.c) -o usdt/tst.argmap.exe usdt/tst.argmap.o usdt/argmap.o \ - $(LDLIBS) + $(LINK.c) -o usdt/tst.argmap.exe \ + usdt/tst.argmap.o usdt/argmap.o $(LDLIBS) $(POST_PROCESS) ; $(STRIP_STABS) usdt/argmap.o: usdt/argmap.d usdt/tst.argmap.o $(COMPILE.d) -o usdt/argmap.o -s usdt/argmap.d usdt/tst.argmap.o usdt/tst.forker.exe: usdt/tst.forker.o usdt/forker.o - $(LINK.c) -o usdt/tst.forker.exe usdt/tst.forker.o usdt/forker.o \ - $(LDLIBS) + $(LINK.c) -o usdt/tst.forker.exe \ + usdt/tst.forker.o usdt/forker.o $(LDLIBS) $(POST_PROCESS) ; $(STRIP_STABS) usdt/forker.o: usdt/forker.d usdt/tst.forker.o @@ -97,5 +99,19 @@ usdt/tst.forker.o: usdt/forker.h usdt/forker.h: usdt/forker.d $(DTRACE) -h -s usdt/forker.d -o usdt/forker.h +usdt/tst.lazyprobe.exe: usdt/tst.lazyprobe.o usdt/lazyprobe.o + $(LINK.c) -o usdt/tst.lazyprobe.exe \ + usdt/tst.lazyprobe.o usdt/lazyprobe.o $(LDLIBS) + $(POST_PROCESS) ; $(STRIP_STABS) + +usdt/lazyprobe.o: usdt/lazyprobe.d usdt/tst.lazyprobe.o + $(COMPILE.d) -xlazyload -o usdt/lazyprobe.o \ + -s usdt/lazyprobe.d usdt/tst.lazyprobe.o + +usdt/tst.lazyprobe.o: usdt/lazyprobe.h + +usdt/lazyprobe.h: usdt/lazyprobe.d + $(DTRACE) -h -s usdt/lazyprobe.d -o usdt/lazyprobe.h + SUBDIRS = java_api include ../../Makefile.subdirs diff --git a/usr/src/cmd/dtrace/test/tst/common/drops/drp.DTRACEDROP_STKSTROVERFLOW.d b/usr/src/cmd/dtrace/test/tst/common/drops/drp.DTRACEDROP_STKSTROVERFLOW.d index f5d6416bce..0911addaa6 100644 --- a/usr/src/cmd/dtrace/test/tst/common/drops/drp.DTRACEDROP_STKSTROVERFLOW.d +++ b/usr/src/cmd/dtrace/test/tst/common/drops/drp.DTRACEDROP_STKSTROVERFLOW.d @@ -24,7 +24,9 @@ * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ #pragma D option destructive #pragma D option jstackstrsize=1 @@ -32,7 +34,13 @@ BEGIN { - system("java -version"); + /* + * Since some java versions are erroneously compiled with -xlazyload + * and therefore don't activate their ustack() helper by default, we + * use the DTrace helper audit library to activate it. + */ + system("LD_AUDIT_32=/usr/lib/dtrace/libdtrace_forceload.so %s", + "java -version"); } syscall:::entry diff --git a/usr/src/cmd/dtrace/test/tst/common/pid/tst.emptystack.exe b/usr/src/cmd/dtrace/test/tst/common/pid/tst.emptystack.exe index a8bc8cb351..173c44d82c 100644 --- a/usr/src/cmd/dtrace/test/tst/common/pid/tst.emptystack.exe +++ b/usr/src/cmd/dtrace/test/tst/common/pid/tst.emptystack.exe @@ -24,6 +24,13 @@ # Copyright 2006 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. # -#ident "%Z%%M% %I% %E% SMI" -exec find / > /dev/null 2>&1 +# +# Copyright (c) 2012 by Delphix. All rights reserved. +# + +# +# For this test we simply require a process that will generate a bunch of +# activity and run for a little while. +# +exec find / -type f -exec sleep 1 \; >/dev/null 2>&1 diff --git a/usr/src/cmd/dtrace/test/tst/common/usdt/lazyprobe.d b/usr/src/cmd/dtrace/test/tst/common/usdt/lazyprobe.d new file mode 100644 index 0000000000..86c5742a18 --- /dev/null +++ b/usr/src/cmd/dtrace/test/tst/common/usdt/lazyprobe.d @@ -0,0 +1,22 @@ +/* + * CDDL HEADER START + * + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +provider lazyprobe { + probe fire(); +}; diff --git a/usr/src/cmd/dtrace/test/tst/common/usdt/tst.lazyprobe.c b/usr/src/cmd/dtrace/test/tst/common/usdt/tst.lazyprobe.c new file mode 100644 index 0000000000..ef88321807 --- /dev/null +++ b/usr/src/cmd/dtrace/test/tst/common/usdt/tst.lazyprobe.c @@ -0,0 +1,30 @@ +/* + * CDDL HEADER START + * + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +#include "lazyprobe.h" + +int +main(int argc, char **argv) +{ + for (;;) { + LAZYPROBE_FIRE(); + } + + return (0); +} diff --git a/usr/src/cmd/dtrace/test/tst/common/usdt/tst.lazyprobe1.ksh b/usr/src/cmd/dtrace/test/tst/common/usdt/tst.lazyprobe1.ksh new file mode 100644 index 0000000000..ee77cc2fa3 --- /dev/null +++ b/usr/src/cmd/dtrace/test/tst/common/usdt/tst.lazyprobe1.ksh @@ -0,0 +1,63 @@ +#!/usr/bin/ksh +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +# +# Copyright 2007 Sun Microsystems, Inc. All rights reserved. +# Use is subject to license terms. +# + +# +# Copyright (c) 2012 by Delphix. All rights reserved. +# + +if [ $# != 1 ]; then + echo expected one argument: '<'dtrace-path'>' + exit 2 +fi + +dtrace=$1 + +# +# Verify that USDT objects built with -xlazyload don't fire by default. +# + +./tst.lazyprobe.exe & +id=$! + +ret=1 + +$dtrace -Z -s /dev/stdin <<-EOF + lazyprobe*:::fire + { + exit(1); + } + tick-10hz + /i++ > 20/ + { + exit(0); + } +EOF +ret=$? + +kill -9 $id + +exit $ret diff --git a/usr/src/cmd/dtrace/test/tst/common/usdt/tst.lazyprobe2.ksh b/usr/src/cmd/dtrace/test/tst/common/usdt/tst.lazyprobe2.ksh new file mode 100644 index 0000000000..d0a9ca8e1f --- /dev/null +++ b/usr/src/cmd/dtrace/test/tst/common/usdt/tst.lazyprobe2.ksh @@ -0,0 +1,64 @@ +#!/usr/bin/ksh +# +# CDDL HEADER START +# +# The contents of this file are subject to the terms of the +# Common Development and Distribution License (the "License"). +# You may not use this file except in compliance with the License. +# +# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE +# or http://www.opensolaris.org/os/licensing. +# See the License for the specific language governing permissions +# and limitations under the License. +# +# When distributing Covered Code, include this CDDL HEADER in each +# file and include the License file at usr/src/OPENSOLARIS.LICENSE. +# If applicable, add the following below this CDDL HEADER, with the +# fields enclosed by brackets "[]" replaced with your own identifying +# information: Portions Copyright [yyyy] [name of copyright owner] +# +# CDDL HEADER END +# + +# +# Copyright 2007 Sun Microsystems, Inc. All rights reserved. +# Use is subject to license terms. +# + +# +# Copyright (c) 2012 by Delphix. All rights reserved. +# + +if [ $# != 1 ]; then + echo expected one argument: '<'dtrace-path'>' + exit 2 +fi + +dtrace=$1 + +# +# Verify that USDT objects built with -xlazyload fire by default when using +# the DTrace audit library. +# + +LD_AUDIT_32=/usr/lib/dtrace/libdtrace_forceload.so ./tst.lazyprobe.exe & +id=$! + +ret=1 + +$dtrace -Z -s /dev/stdin <<-EOF + lazyprobe*:::fire + { + exit(0); + } + tick-10hz + /i++ > 20/ + { + exit(1); + } +EOF +ret=$? + +kill -9 $id + +exit $ret diff --git a/usr/src/lib/libdtrace/Makefile.com b/usr/src/lib/libdtrace/Makefile.com index a55435459d..3fb5a093d8 100644 --- a/usr/src/lib/libdtrace/Makefile.com +++ b/usr/src/lib/libdtrace/Makefile.com @@ -70,8 +70,15 @@ LIBISASRCS = \ OBJECTS = dt_lex.o dt_grammar.o $(MACHOBJS) $(LIBSRCS:%.c=%.o) $(LIBISASRCS:%.c=%.o) -DRTISRC = drti.c -DRTIOBJ = $(DRTISRC:%.c=%.o) +DRTISRCS = dlink_init.c dlink_common.c +DRTIOBJS = $(DRTISRCS:%.c=pics/%.o) +DRTIOBJ = drti.o + +LIBDAUDITSRCS = dlink_audit.c dlink_common.c +LIBDAUDITOBJS = $(LIBDAUDITSRCS:%.c=pics/%.o) +LIBDAUDIT = libdtrace_forceload.so + +DLINKSRCS = dlink_common.c dlink_init.c dlink_audit.c DLIBSRCS += \ errno.d \ @@ -131,17 +138,23 @@ ROOTDLIBDIR = $(ROOT)/usr/lib/dtrace ROOTDLIBDIR64 = $(ROOT)/usr/lib/dtrace/64 ROOTDLIBS = $(DLIBSRCS:%=$(ROOTDLIBDIR)/%) -ROOTDOBJS = $(ROOTDLIBDIR)/$(DRTIOBJ) -ROOTDOBJS64 = $(ROOTDLIBDIR64)/$(DRTIOBJ) +ROOTDOBJS = $(ROOTDLIBDIR)/$(DRTIOBJ) $(ROOTDLIBDIR)/$(LIBDAUDIT) +ROOTDOBJS64 = $(ROOTDLIBDIR64)/$(DRTIOBJ) $(ROOTDLIBDIR64)/$(LIBDAUDIT) + +$(ROOTDLIBDIR)/%.d := FILEMODE=444 +$(ROOTDLIBDIR)/%.o := FILEMODE=444 +$(ROOTDLIBDIR64)/%.o := FILEMODE=444 +$(ROOTDLIBDIR)/%.so := FILEMODE=555 +$(ROOTDLIBDIR64)/%.so := FILEMODE=555 .KEEP_STATE: -all: $(LIBS) $(DRTIOBJ) +all: $(LIBS) $(DRTIOBJ) $(LIBDAUDIT) -lint: lintdrti lintcheck +lint: lintdlink lintcheck -lintdrti: ../common/$(DRTISRC) - $(LINT.c) ../common/$(DRTISRC) $(DRTILDLIBS) +lintdlink: $(DLINKSRCS:%.c=../common/%.c) + $(LINT.c) $(DLINKSRCS:%.c=../common/%.c) $(DRTILDLIBS) dt_lex.c: $(SRCDIR)/dt_lex.l dt_grammar.h $(LEX) $(LFLAGS) $(SRCDIR)/dt_lex.l > $@ @@ -202,10 +215,16 @@ pics/%.o: ../$(MACH)/%.s $(COMPILE.s) -o $@ $< $(POST_PROCESS_O) -%.o: ../common/%.c - $(COMPILE.c) -o $@ $< +$(DRTIOBJ): $(DRTIOBJS) + $(LD) -o $@ -r -Blocal -Breduce $(DRTIOBJS) $(POST_PROCESS_O) +$(LIBDAUDIT): $(LIBDAUDITOBJS) + $(LINK.c) -o $@ $(GSHARED) -h$(LIBDAUDIT) $(ZTEXT) $(ZDEFS) $(BDIRECT) \ + $(MAPFILE.PGA:%=-M%) $(MAPFILE.NED:%=-M%) $(LIBDAUDITOBJS) \ + -lmapmalloc -lc -lproc + $(POST_PROCESS_SO) + $(ROOTDLIBDIR): $(INS.dir) @@ -227,6 +246,12 @@ $(ROOTDLIBDIR)/%.o: %.o $(ROOTDLIBDIR64)/%.o: %.o $(INS.file) +$(ROOTDLIBDIR)/%.so: %.so + $(INS.file) + +$(ROOTDLIBDIR64)/%.so: %.so + $(INS.file) + $(ROOTDLIBS): $(ROOTDLIBDIR) $(ROOTDOBJS): $(ROOTDLIBDIR) diff --git a/usr/src/lib/libdtrace/common/dlink.h b/usr/src/lib/libdtrace/common/dlink.h new file mode 100644 index 0000000000..16f0bd892d --- /dev/null +++ b/usr/src/lib/libdtrace/common/dlink.h @@ -0,0 +1,40 @@ +/* + * CDDL HEADER START + * + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +#ifndef _DLINK_H +#define _DLINK_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern const char *devname; + +extern void dprintf(int, const char *, ...); +extern void dtrace_link_init(void); +extern void dtrace_link_dof(dof_hdr_t *, Lmid_t, const char *, uintptr_t); + +#ifdef __cplusplus +} +#endif + +#endif /* _DLINK_H */ diff --git a/usr/src/lib/libdtrace/common/dlink_audit.c b/usr/src/lib/libdtrace/common/dlink_audit.c new file mode 100644 index 0000000000..57ca8d7fb7 --- /dev/null +++ b/usr/src/lib/libdtrace/common/dlink_audit.c @@ -0,0 +1,128 @@ +/* + * CDDL HEADER START + * + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +/* + * This file implements an audit library that can be used to force the loading + * of helper providers. The default disposition for a helper provider -- USDT + * and ustack helpers -- is to load itself from it's containing object's .init + * section. In cases where startup time is deemed critical, USDT authors can + * use the -xlazyload option to dtrace(1M) to disable automatic loading (it's + * difficult to make the case for the utility of this feature for anything + * other than libc which, indeed, was the sole motivation). If a binary has + * been compiled with automatic loading disabled, this audit library may be + * used to force automatic loading: + * + * LD_AUDIT_32=/usr/lib/dtrace/libdaudit.so + * LD_AUDIT_64=/usr/lib/dtrace/64/libdaudit.so + */ + +#include +#include +#include +#include + +#include + +typedef struct obj_list { + struct obj_list *ol_next; + char *ol_name; + uintptr_t ol_addr; + Lmid_t ol_lmid; +} obj_list_t; + +static obj_list_t *list; + +#pragma init(dtrace_daudit_init) +static void +dtrace_daudit_init(void) +{ + dtrace_link_init(); +} + +/*ARGSUSED*/ +uint_t +la_version(uint_t version) +{ + return (LAV_CURRENT); +} + +/* + * Record objects into our linked list as they're loaded. + */ +/*ARGSUSED*/ +uint_t +la_objopen(Link_map *lmp, Lmid_t lmid, uintptr_t *cookie) +{ + obj_list_t *node; + + /* + * If we can't allocate the next node in our list, we'll try to emit a + * message, but it's possible that might fail as well. + */ + if ((node = malloc(sizeof (obj_list_t))) == NULL) { + dprintf(0, "libdaudit: failed to allocate"); + return (0); + } + node->ol_next = list; + node->ol_name = strdup(lmp->l_name); + node->ol_addr = lmp->l_addr; + node->ol_lmid = lmid; + list = node; + + return (0); +} + +/* + * Once the link maps have reached a consistent state, process the list of + * objects that were loaded. We need to use libproc to search for the + * ___SUNW_dof symbol rather than dlsym(3C) since the symbol is not in the + * dynamic (run-time) symbol table (though it is, of course, in the symtab). + * Once we find it, we ioctl(2) it to the kernel just as we would have from + * the .init section if automatic loading were enabled. + */ +/*ARGSUSED*/ +void +la_activity(uintptr_t *cookie, uint_t flags) +{ + struct ps_prochandle *P; + int err, ret; + GElf_Sym sym; + + if (flags != LA_ACT_CONSISTENT) + return; + + while (list != NULL) { + obj_list_t *node = list; + char *name = node->ol_name; + + list = node->ol_next; + + P = Pgrab(getpid(), PGRAB_RDONLY, &err); + ret = Plookup_by_name(P, name, "___SUNW_dof", &sym); + Prelease(P, 0); + + if (ret == 0) { + dtrace_link_dof((void *)(uintptr_t)sym.st_value, + node->ol_lmid, node->ol_name, node->ol_addr); + } + + free(node->ol_name); + free(node); + } +} diff --git a/usr/src/lib/libdtrace/common/dlink_common.c b/usr/src/lib/libdtrace/common/dlink_common.c new file mode 100644 index 0000000000..c47ec273ab --- /dev/null +++ b/usr/src/lib/libdtrace/common/dlink_common.c @@ -0,0 +1,166 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +/* + * Common functions for helper provider loading both compiled into the + * executable via drti.o and dtrace(1M) -G, and the libdaudit.so library. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include + +/* + * In Solaris 10 GA, the only mechanism for communicating helper information + * is through the DTrace helper pseudo-device node in /devices; there is + * no /dev link. Because of this, USDT providers and helper actions don't + * work inside of non-global zones. This issue was addressed by adding + * the /dev and having this initialization code use that /dev link. If the + * /dev link doesn't exist it falls back to looking for the /devices node + * as this code may be embedded in a binary which runs on Solaris 10 GA. + */ +const char *devname = "/dev/dtrace/helper"; +static const char *olddevname = "/devices/pseudo/dtrace@0:helper"; + +static boolean_t dof_init_debug = B_FALSE; + +void +dprintf(int debug, const char *fmt, ...) +{ + va_list ap; + + if (debug && !dof_init_debug) + return; + + va_start(ap, fmt); + + (void) fprintf(stderr, "dtrace DOF: "); + + (void) vfprintf(stderr, fmt, ap); + + if (fmt[strlen(fmt) - 1] != '\n') + (void) fprintf(stderr, ": %s\n", strerror(errno)); + + va_end(ap); +} + +/* + * Users may set the following environment variable to affect the way + * helper initialization takes place: + * + * DTRACE_DOF_INIT_DEBUG enable debugging output + * DTRACE_DOF_INIT_DISABLE disable helper loading + * DTRACE_DOF_INIT_DEVNAME set the path to the helper node + */ +void +dtrace_link_init(void) +{ + if (getenv("DTRACE_DOF_INIT_DEBUG") != NULL) + dof_init_debug = B_TRUE; +} + +void +dtrace_link_dof(dof_hdr_t *dof, Lmid_t lmid, const char *name, uintptr_t addr) +{ + const char *modname; + const char *p; +#ifdef _LP64 + Elf64_Ehdr *elf; +#else + Elf32_Ehdr *elf; +#endif + dof_helper_t dh; + int fd; + + if (getenv("DTRACE_DOF_INIT_DISABLE") != NULL) + return; + + if ((modname = strrchr(name, '/')) == NULL) + modname = name; + else + modname++; + + if (dof->dofh_ident[DOF_ID_MAG0] != DOF_MAG_MAG0 || + dof->dofh_ident[DOF_ID_MAG1] != DOF_MAG_MAG1 || + dof->dofh_ident[DOF_ID_MAG2] != DOF_MAG_MAG2 || + dof->dofh_ident[DOF_ID_MAG3] != DOF_MAG_MAG3) { + dprintf(0, ".SUNW_dof section corrupt for %s\n", modname); + return; + } + + elf = (void *)addr; + + dh.dofhp_dof = (uintptr_t)dof; + dh.dofhp_addr = elf->e_type == ET_DYN ? addr : 0; + + if (lmid == LM_ID_BASE) { + (void) snprintf(dh.dofhp_mod, sizeof (dh.dofhp_mod), + "%s", modname); + } else { + (void) snprintf(dh.dofhp_mod, sizeof (dh.dofhp_mod), + "LM%lu`%s", lmid, modname); + } + + if ((p = getenv("DTRACE_DOF_INIT_DEVNAME")) != NULL) + devname = p; + + if ((fd = open64(devname, O_RDWR)) < 0) { + dprintf(1, "failed to open helper device %s", devname); + + /* + * If the device path wasn't explicitly set, try again with + * the old device path. + */ + if (p != NULL) + return; + + devname = olddevname; + + if ((fd = open64(devname, O_RDWR)) < 0) { + dprintf(1, "failed to open helper device %s", devname); + return; + } + } + + if (ioctl(fd, DTRACEHIOC_ADDDOF, &dh) == -1) { + dprintf(1, "DTrace ioctl failed for DOF at %p in %s", dof, + name); + } else { + dprintf(1, "DTrace ioctl succeeded for DOF at %p in %s\n", dof, + name); + } + (void) close(fd); +} diff --git a/usr/src/lib/libdtrace/common/dlink_init.c b/usr/src/lib/libdtrace/common/dlink_init.c new file mode 100644 index 0000000000..7c00a49c21 --- /dev/null +++ b/usr/src/lib/libdtrace/common/dlink_init.c @@ -0,0 +1,85 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ + +/* + * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + */ + +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +/* + * This is the basis for drti.o which dt_link.c links into the object file + * generated by dtrace(1M) -G by default (note that -xlazyload disables this). + */ + +#include +#include +#include +#include + +#include + +static int gen; /* DOF helper generation */ +extern dof_hdr_t __SUNW_dof; /* DOF defined in the .SUNW_dof section */ + +#pragma init(dtrace_drti_init) +static void +dtrace_drti_init(void) +{ + Link_map *lmp; + Lmid_t lmid; + + dtrace_link_init(); + + if (dlinfo(RTLD_SELF, RTLD_DI_LINKMAP, &lmp) == -1 || lmp == NULL) { + dprintf(1, "couldn't discover module name or address\n"); + return; + } + + if (dlinfo(RTLD_SELF, RTLD_DI_LMID, &lmid) == -1) { + dprintf(1, "couldn't discover link map ID\n"); + return; + } + + dtrace_link_dof(&__SUNW_dof, lmid, lmp->l_name, lmp->l_addr); +} + +#pragma fini(dtrace_drti_fini) +static void +dtrace_drti_fini(void) +{ + int fd; + + if ((fd = open64(devname, O_RDWR)) < 0) { + dprintf(1, "failed to open helper device %s", devname); + return; + } + + if ((gen = ioctl(fd, DTRACEHIOC_REMOVE, gen)) == -1) + dprintf(1, "DTrace ioctl failed to remove DOF (%d)\n", gen); + else + dprintf(1, "DTrace ioctl removed DOF (%d)\n", gen); + + (void) close(fd); +} diff --git a/usr/src/lib/libdtrace/common/drti.c b/usr/src/lib/libdtrace/common/drti.c deleted file mode 100644 index 3b5f0cbbdf..0000000000 --- a/usr/src/lib/libdtrace/common/drti.c +++ /dev/null @@ -1,190 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License (the "License"). - * You may not use this file except in compliance with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -/* - * In Solaris 10 GA, the only mechanism for communicating helper information - * is through the DTrace helper pseudo-device node in /devices; there is - * no /dev link. Because of this, USDT providers and helper actions don't - * work inside of non-global zones. This issue was addressed by adding - * the /dev and having this initialization code use that /dev link. If the - * /dev link doesn't exist it falls back to looking for the /devices node - * as this code may be embedded in a binary which runs on Solaris 10 GA. - * - * Users may set the following environment variable to affect the way - * helper initialization takes place: - * - * DTRACE_DOF_INIT_DEBUG enable debugging output - * DTRACE_DOF_INIT_DISABLE disable helper loading - * DTRACE_DOF_INIT_DEVNAME set the path to the helper node - */ - -static const char *devname = "/dev/dtrace/helper"; -static const char *olddevname = "/devices/pseudo/dtrace@0:helper"; - -static const char *modname; /* Name of this load object */ -static int gen; /* DOF helper generation */ -extern dof_hdr_t __SUNW_dof; /* DOF defined in the .SUNW_dof section */ -static boolean_t dof_init_debug = B_FALSE; /* From DTRACE_DOF_INIT_DEBUG */ - -static void -dprintf(int debug, const char *fmt, ...) -{ - va_list ap; - - if (debug && !dof_init_debug) - return; - - va_start(ap, fmt); - - if (modname == NULL) - (void) fprintf(stderr, "dtrace DOF: "); - else - (void) fprintf(stderr, "dtrace DOF %s: ", modname); - - (void) vfprintf(stderr, fmt, ap); - - if (fmt[strlen(fmt) - 1] != '\n') - (void) fprintf(stderr, ": %s\n", strerror(errno)); - - va_end(ap); -} - -#pragma init(dtrace_dof_init) -static void -dtrace_dof_init(void) -{ - dof_hdr_t *dof = &__SUNW_dof; -#ifdef _LP64 - Elf64_Ehdr *elf; -#else - Elf32_Ehdr *elf; -#endif - dof_helper_t dh; - Link_map *lmp; - Lmid_t lmid; - int fd; - const char *p; - - if (getenv("DTRACE_DOF_INIT_DISABLE") != NULL) - return; - - if (getenv("DTRACE_DOF_INIT_DEBUG") != NULL) - dof_init_debug = B_TRUE; - - if (dlinfo(RTLD_SELF, RTLD_DI_LINKMAP, &lmp) == -1 || lmp == NULL) { - dprintf(1, "couldn't discover module name or address\n"); - return; - } - - if (dlinfo(RTLD_SELF, RTLD_DI_LMID, &lmid) == -1) { - dprintf(1, "couldn't discover link map ID\n"); - return; - } - - if ((modname = strrchr(lmp->l_name, '/')) == NULL) - modname = lmp->l_name; - else - modname++; - - if (dof->dofh_ident[DOF_ID_MAG0] != DOF_MAG_MAG0 || - dof->dofh_ident[DOF_ID_MAG1] != DOF_MAG_MAG1 || - dof->dofh_ident[DOF_ID_MAG2] != DOF_MAG_MAG2 || - dof->dofh_ident[DOF_ID_MAG3] != DOF_MAG_MAG3) { - dprintf(0, ".SUNW_dof section corrupt\n"); - return; - } - - elf = (void *)lmp->l_addr; - - dh.dofhp_dof = (uintptr_t)dof; - dh.dofhp_addr = elf->e_type == ET_DYN ? lmp->l_addr : 0; - - if (lmid == 0) { - (void) snprintf(dh.dofhp_mod, sizeof (dh.dofhp_mod), - "%s", modname); - } else { - (void) snprintf(dh.dofhp_mod, sizeof (dh.dofhp_mod), - "LM%lu`%s", lmid, modname); - } - - if ((p = getenv("DTRACE_DOF_INIT_DEVNAME")) != NULL) - devname = p; - - if ((fd = open64(devname, O_RDWR)) < 0) { - dprintf(1, "failed to open helper device %s", devname); - - /* - * If the device path wasn't explicitly set, try again with - * the old device path. - */ - if (p != NULL) - return; - - devname = olddevname; - - if ((fd = open64(devname, O_RDWR)) < 0) { - dprintf(1, "failed to open helper device %s", devname); - return; - } - } - - if ((gen = ioctl(fd, DTRACEHIOC_ADDDOF, &dh)) == -1) - dprintf(1, "DTrace ioctl failed for DOF at %p", dof); - else - dprintf(1, "DTrace ioctl succeeded for DOF at %p\n", dof); - - (void) close(fd); -} - -#pragma fini(dtrace_dof_fini) -static void -dtrace_dof_fini(void) -{ - int fd; - - if ((fd = open64(devname, O_RDWR)) < 0) { - dprintf(1, "failed to open helper device %s", devname); - return; - } - - if ((gen = ioctl(fd, DTRACEHIOC_REMOVE, gen)) == -1) - dprintf(1, "DTrace ioctl failed to remove DOF (%d)\n", gen); - else - dprintf(1, "DTrace ioctl removed DOF (%d)\n", gen); - - (void) close(fd); -} diff --git a/usr/src/pkg/manifests/developer-dtrace.mf b/usr/src/pkg/manifests/developer-dtrace.mf index 013e0b1736..31ad4856c0 100644 --- a/usr/src/pkg/manifests/developer-dtrace.mf +++ b/usr/src/pkg/manifests/developer-dtrace.mf @@ -23,6 +23,10 @@ # Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. # +# +# Copyright (c) 2012 by Delphix. All rights reserved. +# + set name=pkg.fmri value=pkg:/developer/dtrace@$(PKGVERS) set name=pkg.description value="Dynamic Tracing (DTrace) Clients" set name=pkg.summary value="DTrace Clients" @@ -178,26 +182,28 @@ file path=usr/lib/$(ARCH64)/libdtrace.so.1 file path=usr/lib/$(ARCH64)/libdtrace_jni.so.1 file path=usr/lib/$(ARCH64)/llib-ldtrace.ln file path=usr/lib/devfsadm/linkmod/SUNW_dtrace_link.so group=sys -file path=usr/lib/dtrace/64/drti.o -file path=usr/lib/dtrace/drti.o -file path=usr/lib/dtrace/errno.d -file path=usr/lib/dtrace/fc.d -file path=usr/lib/dtrace/io.d -file path=usr/lib/dtrace/ip.d -file path=usr/lib/dtrace/iscsit.d -file path=usr/lib/dtrace/net.d -file path=usr/lib/dtrace/nfs.d -file path=usr/lib/dtrace/nfssrv.d -file path=usr/lib/dtrace/procfs.d -file path=usr/lib/dtrace/regs.d -file path=usr/lib/dtrace/sched.d -file path=usr/lib/dtrace/scsi.d -file path=usr/lib/dtrace/signal.d -file path=usr/lib/dtrace/srp.d -file path=usr/lib/dtrace/sysevent.d -file path=usr/lib/dtrace/tcp.d -file path=usr/lib/dtrace/udp.d -file path=usr/lib/dtrace/unistd.d +file path=usr/lib/dtrace/64/drti.o mode=0444 +file path=usr/lib/dtrace/64/libdtrace_forceload.so mode=0555 +file path=usr/lib/dtrace/drti.o mode=0444 +file path=usr/lib/dtrace/errno.d mode=0444 +file path=usr/lib/dtrace/fc.d mode=0444 +file path=usr/lib/dtrace/io.d mode=0444 +file path=usr/lib/dtrace/ip.d mode=0444 +file path=usr/lib/dtrace/iscsit.d mode=0444 +file path=usr/lib/dtrace/libdtrace_forceload.so mode=0555 +file path=usr/lib/dtrace/net.d mode=0444 +file path=usr/lib/dtrace/nfs.d mode=0444 +file path=usr/lib/dtrace/nfssrv.d mode=0444 +file path=usr/lib/dtrace/procfs.d mode=0444 +file path=usr/lib/dtrace/regs.d mode=0444 +file path=usr/lib/dtrace/sched.d mode=0444 +file path=usr/lib/dtrace/scsi.d mode=0444 +file path=usr/lib/dtrace/signal.d mode=0444 +file path=usr/lib/dtrace/srp.d mode=0444 +file path=usr/lib/dtrace/sysevent.d mode=0444 +file path=usr/lib/dtrace/tcp.d mode=0444 +file path=usr/lib/dtrace/udp.d mode=0444 +file path=usr/lib/dtrace/unistd.d mode=0444 file path=usr/lib/libdtrace.so.1 file path=usr/lib/libdtrace_jni.so.1 file path=usr/lib/llib-ldtrace diff --git a/usr/src/pkg/manifests/system-dtrace-tests.mf b/usr/src/pkg/manifests/system-dtrace-tests.mf index 8b58c5a342..b740da5a4f 100644 --- a/usr/src/pkg/manifests/system-dtrace-tests.mf +++ b/usr/src/pkg/manifests/system-dtrace-tests.mf @@ -1997,6 +1997,9 @@ file path=opt/SUNWdtrt/tst/common/usdt/tst.guess32.ksh mode=0444 file path=opt/SUNWdtrt/tst/common/usdt/tst.guess64.ksh mode=0444 file path=opt/SUNWdtrt/tst/common/usdt/tst.header.ksh mode=0444 file path=opt/SUNWdtrt/tst/common/usdt/tst.include.ksh mode=0444 +file path=opt/SUNWdtrt/tst/common/usdt/tst.lazyprobe.exe mode=0555 +file path=opt/SUNWdtrt/tst/common/usdt/tst.lazyprobe1.ksh mode=0444 +file path=opt/SUNWdtrt/tst/common/usdt/tst.lazyprobe2.ksh mode=0444 file path=opt/SUNWdtrt/tst/common/usdt/tst.linkpriv.ksh mode=0444 file path=opt/SUNWdtrt/tst/common/usdt/tst.linkunpriv.ksh mode=0444 file path=opt/SUNWdtrt/tst/common/usdt/tst.multiple.ksh mode=0444 -- cgit v1.2.3 From cd1c8b85eb30b568e9816221430c479ace7a559d Mon Sep 17 00:00:00 2001 From: Matthew Ahrens Date: Thu, 30 Aug 2012 05:13:49 -0700 Subject: 3112 ztest does not honor ZFS_DEBUG 3113 ztest should use watchpoints to protect frozen arc bufs 3114 some leaked nvlists in zfsdev_ioctl 3115 poll(2) returns prematurely in presence of spurious wakeups Reviewed by: Adam Leventhal Reviewed by: Matt Amdur Reviewed by: George Wilson Reviewed by: Christopher Siden Approved by: Eric Schrock --- usr/src/cmd/ztest/ztest.c | 2 + usr/src/lib/libzpool/common/sys/zfs_context.h | 1 + usr/src/uts/common/fs/zfs/arc.c | 74 +++++++++++++++++++++++---- usr/src/uts/common/fs/zfs/dsl_dataset.c | 1 - usr/src/uts/common/fs/zfs/dsl_synctask.c | 7 +-- usr/src/uts/common/fs/zfs/spa_history.c | 5 +- usr/src/uts/common/fs/zfs/spa_misc.c | 12 +++++ usr/src/uts/common/fs/zfs/sys/arc.h | 6 +++ usr/src/uts/common/fs/zfs/sys/zfs_debug.h | 5 ++ usr/src/uts/common/fs/zfs/zio.c | 14 ++++- usr/src/uts/common/io/devpoll.c | 60 ++++++++++++---------- usr/src/uts/common/os/condvar.c | 47 ++++++++--------- usr/src/uts/common/sys/condvar.h | 7 +-- usr/src/uts/common/syscall/poll.c | 60 +++++++++------------- 14 files changed, 190 insertions(+), 111 deletions(-) (limited to 'usr/src/lib') diff --git a/usr/src/cmd/ztest/ztest.c b/usr/src/cmd/ztest/ztest.c index bb6398cbda..caa7834584 100644 --- a/usr/src/cmd/ztest/ztest.c +++ b/usr/src/cmd/ztest/ztest.c @@ -5835,6 +5835,8 @@ main(int argc, char **argv) (void) setvbuf(stdout, NULL, _IOLBF, 0); + dprintf_setup(&argc, argv); + if (!ischild) { process_options(argc, argv); diff --git a/usr/src/lib/libzpool/common/sys/zfs_context.h b/usr/src/lib/libzpool/common/sys/zfs_context.h index 39af927f71..8ca60b7625 100644 --- a/usr/src/lib/libzpool/common/sys/zfs_context.h +++ b/usr/src/lib/libzpool/common/sys/zfs_context.h @@ -61,6 +61,7 @@ extern "C" { #include #include #include +#include #include #include #include diff --git a/usr/src/uts/common/fs/zfs/arc.c b/usr/src/uts/common/fs/zfs/arc.c index bd6bda5c9b..630a4477ad 100644 --- a/usr/src/uts/common/fs/zfs/arc.c +++ b/usr/src/uts/common/fs/zfs/arc.c @@ -135,6 +135,12 @@ #include #include +#ifndef _KERNEL +/* set with ZFS_DEBUG=watch, to enable watchpoints on frozen buffers */ +boolean_t arc_watch = B_FALSE; +int arc_procfd; +#endif + static kmutex_t arc_reclaim_thr_lock; static kcondvar_t arc_reclaim_thr_cv; /* used to signal reclaim thr */ static uint8_t arc_thread_exit; @@ -474,6 +480,7 @@ static void arc_get_data_buf(arc_buf_t *buf); static void arc_access(arc_buf_hdr_t *buf, kmutex_t *hash_lock); static int arc_evict_needed(arc_buf_contents_t type); static void arc_evict_ghost(arc_state_t *state, uint64_t spa, int64_t bytes); +static void arc_buf_watch(arc_buf_t *buf); static boolean_t l2arc_write_eligible(uint64_t spa_guid, arc_buf_hdr_t *ab); @@ -949,6 +956,50 @@ arc_cksum_compute(arc_buf_t *buf, boolean_t force) fletcher_2_native(buf->b_data, buf->b_hdr->b_size, buf->b_hdr->b_freeze_cksum); mutex_exit(&buf->b_hdr->b_freeze_lock); + arc_buf_watch(buf); +} + +#ifndef _KERNEL +typedef struct procctl { + long cmd; + prwatch_t prwatch; +} procctl_t; +#endif + +/* ARGSUSED */ +static void +arc_buf_unwatch(arc_buf_t *buf) +{ +#ifndef _KERNEL + if (arc_watch) { + int result; + procctl_t ctl; + ctl.cmd = PCWATCH; + ctl.prwatch.pr_vaddr = (uintptr_t)buf->b_data; + ctl.prwatch.pr_size = 0; + ctl.prwatch.pr_wflags = 0; + result = write(arc_procfd, &ctl, sizeof (ctl)); + ASSERT3U(result, ==, sizeof (ctl)); + } +#endif +} + +/* ARGSUSED */ +static void +arc_buf_watch(arc_buf_t *buf) +{ +#ifndef _KERNEL + if (arc_watch) { + int result; + procctl_t ctl; + ctl.cmd = PCWATCH; + ctl.prwatch.pr_vaddr = (uintptr_t)buf->b_data; + ctl.prwatch.pr_size = buf->b_hdr->b_size; + ctl.prwatch.pr_wflags = WA_WRITE; + result = write(arc_procfd, &ctl, sizeof (ctl)); + ASSERT3U(result, ==, sizeof (ctl)); + } +#endif } void @@ -975,6 +1026,8 @@ arc_buf_thaw(arc_buf_t *buf) } mutex_exit(&buf->b_hdr->b_freeze_lock); + + arc_buf_unwatch(buf); } void @@ -992,6 +1045,7 @@ arc_buf_freeze(arc_buf_t *buf) buf->b_hdr->b_state == arc_anon); arc_cksum_compute(buf, B_FALSE); mutex_exit(hash_lock); + } static void @@ -1348,21 +1402,22 @@ arc_buf_add_ref(arc_buf_t *buf, void* tag) * the buffer is placed on l2arc_free_on_write to be freed later. */ static void -arc_buf_data_free(arc_buf_hdr_t *hdr, void (*free_func)(void *, size_t), - void *data, size_t size) +arc_buf_data_free(arc_buf_t *buf, void (*free_func)(void *, size_t)) { + arc_buf_hdr_t *hdr = buf->b_hdr; + if (HDR_L2_WRITING(hdr)) { l2arc_data_free_t *df; df = kmem_alloc(sizeof (l2arc_data_free_t), KM_SLEEP); - df->l2df_data = data; - df->l2df_size = size; + df->l2df_data = buf->b_data; + df->l2df_size = hdr->b_size; df->l2df_func = free_func; mutex_enter(&l2arc_free_on_write_mtx); list_insert_head(l2arc_free_on_write, df); mutex_exit(&l2arc_free_on_write_mtx); ARCSTAT_BUMP(arcstat_l2_free_on_write); } else { - free_func(data, size); + free_func(buf->b_data, hdr->b_size); } } @@ -1378,16 +1433,15 @@ arc_buf_destroy(arc_buf_t *buf, boolean_t recycle, boolean_t all) arc_buf_contents_t type = buf->b_hdr->b_type; arc_cksum_verify(buf); + arc_buf_unwatch(buf); if (!recycle) { if (type == ARC_BUFC_METADATA) { - arc_buf_data_free(buf->b_hdr, zio_buf_free, - buf->b_data, size); + arc_buf_data_free(buf, zio_buf_free); arc_space_return(size, ARC_SPACE_DATA); } else { ASSERT(type == ARC_BUFC_DATA); - arc_buf_data_free(buf->b_hdr, - zio_data_buf_free, buf->b_data, size); + arc_buf_data_free(buf, zio_data_buf_free); ARCSTAT_INCR(arcstat_data_size, -size); atomic_add_64(&arc_size, -size); } @@ -2556,6 +2610,7 @@ arc_read_done(zio_t *zio) } arc_cksum_compute(buf, B_FALSE); + arc_buf_watch(buf); if (hash_lock && zio->io_error == 0 && hdr->b_state == arc_anon) { /* @@ -3113,6 +3168,7 @@ arc_release(arc_buf_t *buf, void *tag) } hdr->b_datacnt -= 1; arc_cksum_verify(buf); + arc_buf_unwatch(buf); mutex_exit(hash_lock); diff --git a/usr/src/uts/common/fs/zfs/dsl_dataset.c b/usr/src/uts/common/fs/zfs/dsl_dataset.c index 0a2e7191c8..4571fa8743 100644 --- a/usr/src/uts/common/fs/zfs/dsl_dataset.c +++ b/usr/src/uts/common/fs/zfs/dsl_dataset.c @@ -2302,7 +2302,6 @@ dsl_dataset_stats(dsl_dataset_t *ds, nvlist_t *nv) } } } - } void diff --git a/usr/src/uts/common/fs/zfs/dsl_synctask.c b/usr/src/uts/common/fs/zfs/dsl_synctask.c index 312423e943..4e56d28d82 100644 --- a/usr/src/uts/common/fs/zfs/dsl_synctask.c +++ b/usr/src/uts/common/fs/zfs/dsl_synctask.c @@ -230,12 +230,7 @@ dsl_sync_task_do_nowait(dsl_pool_t *dp, dsl_checkfunc_t *checkfunc, dsl_syncfunc_t *syncfunc, void *arg1, void *arg2, int blocks_modified, dmu_tx_t *tx) { - dsl_sync_task_group_t *dstg; - - if (!spa_writeable(dp->dp_spa)) - return; - - dstg = dsl_sync_task_group_create(dp); + dsl_sync_task_group_t *dstg = dsl_sync_task_group_create(dp); dsl_sync_task_create(dstg, checkfunc, syncfunc, arg1, arg2, blocks_modified); dsl_sync_task_group_nowait(dstg, tx); diff --git a/usr/src/uts/common/fs/zfs/spa_history.c b/usr/src/uts/common/fs/zfs/spa_history.c index 96970dafba..9ae28739f3 100644 --- a/usr/src/uts/common/fs/zfs/spa_history.c +++ b/usr/src/uts/common/fs/zfs/spa_history.c @@ -303,7 +303,7 @@ spa_history_log_nvl(spa_t *spa, nvlist_t *nvl) dmu_tx_t *tx; nvlist_t *nvarg; - if (spa_version(spa) < SPA_VERSION_ZPOOL_HISTORY) + if (spa_version(spa) < SPA_VERSION_ZPOOL_HISTORY || !spa_writeable(spa)) return (EINVAL); tx = dmu_tx_create_dd(spa_get_dsl(spa)->dp_mos_dir); @@ -439,8 +439,9 @@ log_internal(nvlist_t *nvl, const char *operation, spa_t *spa, /* * If this is part of creating a pool, not everything is * initialized yet, so don't bother logging the internal events. + * Likewise if the pool is not writeable. */ - if (tx->tx_txg == TXG_INITIAL) { + if (tx->tx_txg == TXG_INITIAL || !spa_writeable(spa)) { fnvlist_free(nvl); return; } diff --git a/usr/src/uts/common/fs/zfs/spa_misc.c b/usr/src/uts/common/fs/zfs/spa_misc.c index 9f50e38652..30681b6464 100644 --- a/usr/src/uts/common/fs/zfs/spa_misc.c +++ b/usr/src/uts/common/fs/zfs/spa_misc.c @@ -1600,6 +1600,18 @@ spa_init(int mode) spa_mode_global = mode; +#ifndef _KERNEL + if (spa_mode_global != FREAD && dprintf_find_string("watch")) { + arc_procfd = open("/proc/self/ctl", O_WRONLY); + if (arc_procfd == -1) { + perror("could not enable watchpoints: " + "opening /proc/self/ctl failed: "); + } else { + arc_watch = B_TRUE; + } + } +#endif + refcount_init(); unique_init(); zio_init(); diff --git a/usr/src/uts/common/fs/zfs/sys/arc.h b/usr/src/uts/common/fs/zfs/sys/arc.h index 8f189c62d3..28dbc57275 100644 --- a/usr/src/uts/common/fs/zfs/sys/arc.h +++ b/usr/src/uts/common/fs/zfs/sys/arc.h @@ -20,6 +20,7 @@ */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 by Delphix. All rights reserved. */ #ifndef _SYS_ARC_H @@ -135,6 +136,11 @@ void l2arc_fini(void); void l2arc_start(void); void l2arc_stop(void); +#ifndef _KERNEL +extern boolean_t arc_watch; +extern int arc_procfd; +#endif + #ifdef __cplusplus } #endif diff --git a/usr/src/uts/common/fs/zfs/sys/zfs_debug.h b/usr/src/uts/common/fs/zfs/sys/zfs_debug.h index 50ecf9b362..94626229ad 100644 --- a/usr/src/uts/common/fs/zfs/sys/zfs_debug.h +++ b/usr/src/uts/common/fs/zfs/sys/zfs_debug.h @@ -20,6 +20,7 @@ */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 by Delphix. All rights reserved. */ #ifndef _SYS_ZFS_DEBUG_H @@ -75,6 +76,10 @@ extern void zfs_dbgmsg_init(void); extern void zfs_dbgmsg_fini(void); extern void zfs_dbgmsg(const char *fmt, ...); +#ifndef _KERNEL +extern int dprintf_find_string(const char *string); +#endif + #ifdef __cplusplus } #endif diff --git a/usr/src/uts/common/fs/zfs/zio.c b/usr/src/uts/common/fs/zfs/zio.c index cfb5733f2b..33807a1a16 100644 --- a/usr/src/uts/common/fs/zfs/zio.c +++ b/usr/src/uts/common/fs/zfs/zio.c @@ -125,11 +125,21 @@ zio_init(void) while (p2 & (p2 - 1)) p2 &= p2 - 1; +#ifndef _KERNEL + /* + * If we are using watchpoints, put each buffer on its own page, + * to eliminate the performance overhead of trapping to the + * kernel when modifying a non-watched buffer that shares the + * page with a watched buffer. + */ + if (arc_watch && !IS_P2ALIGNED(size, PAGESIZE)) + continue; +#endif if (size <= 4 * SPA_MINBLOCKSIZE) { align = SPA_MINBLOCKSIZE; - } else if (P2PHASE(size, PAGESIZE) == 0) { + } else if (IS_P2ALIGNED(size, PAGESIZE)) { align = PAGESIZE; - } else if (P2PHASE(size, p2 >> 2) == 0) { + } else if (IS_P2ALIGNED(size, p2 >> 2)) { align = p2 >> 2; } diff --git a/usr/src/uts/common/io/devpoll.c b/usr/src/uts/common/io/devpoll.c index 111c4c243f..7d311aaa10 100644 --- a/usr/src/uts/common/io/devpoll.c +++ b/usr/src/uts/common/io/devpoll.c @@ -23,7 +23,9 @@ * Use is subject to license terms. */ -/* Copyright (c) 2011 by Delphix. All rights reserved. */ +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ #include #include @@ -695,9 +697,15 @@ dpioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *credp, int *rvalp) minor_t minor; dp_entry_t *dpep; pollcache_t *pcp; + hrtime_t now; int error = 0; STRUCT_DECL(dvpoll, dvpoll); + if (cmd == DP_POLL) { + /* do this now, before we sleep on DP_WRITER_PRESENT */ + now = gethrtime(); + } + minor = getminor(dev); mutex_enter(&devpoll_lock); ASSERT(minor < dptblsize); @@ -725,9 +733,7 @@ dpioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *credp, int *rvalp) pollstate_t *ps; nfds_t nfds; int fdcnt = 0; - int time_out; - clock_t *deltap = NULL; - clock_t delta; + hrtime_t deadline = 0; STRUCT_INIT(dvpoll, mode); error = copyin((caddr_t)arg, STRUCT_BUF(dvpoll), @@ -737,18 +743,16 @@ dpioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *credp, int *rvalp) return (EFAULT); } - time_out = STRUCT_FGET(dvpoll, dp_timeout); - if (time_out > 0) { + deadline = STRUCT_FGET(dvpoll, dp_timeout); + if (deadline > 0) { /* - * cv_relwaituntil_sig operates at the tick - * granularity, which by default is 10 ms. - * This results in rounding user specified - * timeouts up but prevents the system - * from being flooded with small high - * resolution timers. + * Convert the deadline from relative milliseconds + * to absolute nanoseconds. They must wait for at + * least a tick. */ - delta = MSEC_TO_TICK_ROUNDUP(time_out); - deltap = δ + deadline = deadline * NANOSEC / MILLISEC; + deadline = MAX(deadline, nsec_per_tick); + deadline += now; } if ((nfds = STRUCT_FGET(dvpoll, dp_nfds)) == 0) { @@ -758,16 +762,15 @@ dpioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *credp, int *rvalp) * Do not check for signals if we have a zero timeout. */ DP_REFRELE(dpep); - if (time_out == 0) + if (deadline == 0) return (0); mutex_enter(&curthread->t_delay_lock); - while ((delta = cv_relwaituntil_sig( - &curthread->t_delay_cv, &curthread->t_delay_lock, - deltap, TR_MILLISEC)) > 0) { + while ((error = + cv_timedwait_sig_hrtime(&curthread->t_delay_cv, + &curthread->t_delay_lock, deadline)) > 0) continue; - } mutex_exit(&curthread->t_delay_lock); - return (delta == 0 ? EINTR : 0); + return (error == 0 ? EINTR : 0); } /* @@ -814,21 +817,22 @@ dpioctl(dev_t dev, int cmd, intptr_t arg, int mode, cred_t *credp, int *rvalp) /* * Sleep until we are notified, signaled, or timed out. - * Do not check for signals if we have a zero timeout. */ - if (time_out == 0) /* immediate timeout */ + if (deadline == 0) { + /* immediate timeout; do not check signals */ break; - - delta = cv_relwaituntil_sig(&pcp->pc_cv, &pcp->pc_lock, - deltap, TR_MILLISEC); + } + error = cv_timedwait_sig_hrtime(&pcp->pc_cv, + &pcp->pc_lock, deadline); /* * If we were awakened by a signal or timeout * then break the loop, else poll again. */ - if (delta <= 0) { - if (delta == 0) /* signal */ - error = EINTR; + if (error <= 0) { + error = (error == 0) ? EINTR : 0; break; + } else { + error = 0; } } mutex_exit(&pcp->pc_lock); diff --git a/usr/src/uts/common/os/condvar.c b/usr/src/uts/common/os/condvar.c index 62945ae41f..60ff344d82 100644 --- a/usr/src/uts/common/os/condvar.c +++ b/usr/src/uts/common/os/condvar.c @@ -24,7 +24,9 @@ * Use is subject to license terms. */ -/* Copyright (c) 2011 by Delphix. All rights reserved. */ +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ #include #include @@ -480,6 +482,21 @@ cv_timedwait_sig(kcondvar_t *cvp, kmutex_t *mp, clock_t tim) return (cv_timedwait_sig_hires(cvp, mp, hrtim, nsec_per_tick, 0)); } +/* + * Wait until the specified time. + * If tim == -1, waits without timeout using cv_wait_sig_swap(). + */ +int +cv_timedwait_sig_hrtime(kcondvar_t *cvp, kmutex_t *mp, hrtime_t tim) +{ + if (tim == -1) { + return (cv_wait_sig_swap(cvp, mp)); + } else { + return (cv_timedwait_sig_hires(cvp, mp, tim, 1, + CALLOUT_FLAG_ABSOLUTE | CALLOUT_FLAG_ROUNDUP)); + } +} + /* * Same as cv_timedwait_sig() except that the third argument is a relative * timeout value, as opposed to an absolute one. There is also a fourth @@ -501,30 +518,6 @@ cv_reltimedwait_sig(kcondvar_t *cvp, kmutex_t *mp, clock_t delta, return (cv_timedwait_sig_hires(cvp, mp, exp, time_res[res], 0)); } -/* - * Same as cv_reltimedwait_sig() except that the timeout is optional. If - * there is no timeout then the function will block until woken up - * or interrupted. - */ -clock_t -cv_relwaituntil_sig(kcondvar_t *cvp, kmutex_t *mp, clock_t *delta, - time_res_t res) -{ - /* - * If there is no timeout specified wait indefinitely for a - * signal or a wakeup. - */ - if (delta == NULL) { - return (cv_wait_sig_swap(cvp, mp)); - } - - /* - * cv_reltimedwait_sig will wait for the relative timeout - * specified by delta. - */ - return (cv_reltimedwait_sig(cvp, mp, *delta, res)); -} - /* * Like cv_wait_sig_swap but allows the caller to indicate (with a * non-NULL sigret) that they will take care of signalling the cv @@ -766,6 +759,10 @@ cv_wait_stop(kcondvar_t *cvp, kmutex_t *mp, int wakeup_time) * so the caller can return a premature timeout to the calling process * so it can reevaluate the situation in light of the new system time. * (The system clock has been reset if timecheck != timechanged.) + * + * Generally, cv_timedwait_sig_hrtime() should be used instead of this + * routine. It waits based on hrtime rather than wall-clock time and therefore + * does not need to deal with the time changing. */ int cv_waituntil_sig(kcondvar_t *cvp, kmutex_t *mp, diff --git a/usr/src/uts/common/sys/condvar.h b/usr/src/uts/common/sys/condvar.h index 3aa569a73e..56e660e5e2 100644 --- a/usr/src/uts/common/sys/condvar.h +++ b/usr/src/uts/common/sys/condvar.h @@ -23,7 +23,9 @@ * Use is subject to license terms. */ -/* Copyright (c) 2011 by Delphix. All rights reserved. */ +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ /* * condvar.h: @@ -95,10 +97,9 @@ extern clock_t cv_timedwait(kcondvar_t *, kmutex_t *, clock_t); extern clock_t cv_reltimedwait(kcondvar_t *, kmutex_t *, clock_t, time_res_t); extern int cv_wait_sig(kcondvar_t *, kmutex_t *); extern clock_t cv_timedwait_sig(kcondvar_t *, kmutex_t *, clock_t); +extern int cv_timedwait_sig_hrtime(kcondvar_t *, kmutex_t *, hrtime_t); extern clock_t cv_reltimedwait_sig(kcondvar_t *, kmutex_t *, clock_t, time_res_t); -extern clock_t cv_relwaituntil_sig(kcondvar_t *, kmutex_t *, clock_t *, - time_res_t); extern int cv_wait_sig_swap(kcondvar_t *, kmutex_t *); extern int cv_wait_sig_swap_core(kcondvar_t *, kmutex_t *, int *); extern void cv_signal(kcondvar_t *); diff --git a/usr/src/uts/common/syscall/poll.c b/usr/src/uts/common/syscall/poll.c index 04bd862478..5e87d073e3 100644 --- a/usr/src/uts/common/syscall/poll.c +++ b/usr/src/uts/common/syscall/poll.c @@ -24,10 +24,13 @@ * Use is subject to license terms. */ -/* Copyright (c) 2011 by Delphix. All rights reserved. */ /* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */ +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + /* * Portions of this source code were derived from Berkeley 4.3 BSD * under license from the Regents of the University of California. @@ -288,9 +291,7 @@ poll_common(pollfd_t *fds, nfds_t nfds, timespec_t *tsp, k_sigset_t *ksetp) proc_t *p = ttoproc(t); int fdcnt = 0; int i; - int imm_timeout = 0; - clock_t *deltap = NULL; - clock_t delta; + hrtime_t deadline; /* hrtime value when we want to return */ pollfd_t *pollfdp; pollstate_t *ps; pollcache_t *pcp; @@ -301,24 +302,15 @@ poll_common(pollfd_t *fds, nfds_t nfds, timespec_t *tsp, k_sigset_t *ksetp) /* * Determine the precise future time of the requested timeout, if any. */ - if (tsp != NULL) { - if (tsp->tv_sec == 0 && tsp->tv_nsec == 0) { - imm_timeout = 1; - } else { - /* - * cv_relwaituntil_sig operates at - * the tick granularity, which by default is 10 ms. - * Convert the specified timespec to ticks, rounding - * up to at least 1 tick to avoid flooding the - * system with small high resolution timers. - */ - delta = SEC_TO_TICK(tsp->tv_sec) + - NSEC_TO_TICK(tsp->tv_nsec); - if (delta < 1) { - delta = 1; - } - deltap = δ - } + if (tsp == NULL) { + deadline = -1; + } else if (tsp->tv_sec == 0 && tsp->tv_nsec == 0) { + deadline = 0; + } else { + /* They must wait at least a tick. */ + deadline = tsp->tv_sec * NANOSEC + tsp->tv_nsec; + deadline = MAX(deadline, nsec_per_tick); + deadline += gethrtime(); } /* @@ -351,16 +343,15 @@ poll_common(pollfd_t *fds, nfds_t nfds, timespec_t *tsp, k_sigset_t *ksetp) /* * Sleep until we have passed the requested future * time or until interrupted by a signal. - * Do not check for signals if we have a zero timeout. + * Do not check for signals if we do not want to wait. */ - if (!imm_timeout) { + if (deadline != 0) { mutex_enter(&t->t_delay_lock); - while ((delta = cv_relwaituntil_sig(&t->t_delay_cv, - &t->t_delay_lock, deltap, TR_MILLISEC)) > 0) + while ((error = cv_timedwait_sig_hrtime(&t->t_delay_cv, + &t->t_delay_lock, deadline)) > 0) continue; mutex_exit(&t->t_delay_lock); - if (delta == 0) - error = EINTR; + error = (error == 0) ? EINTR : 0; } goto pollout; } @@ -550,20 +541,19 @@ poll_common(pollfd_t *fds, nfds_t nfds, timespec_t *tsp, k_sigset_t *ksetp) * Do not check for signals if we have a zero timeout. */ mutex_exit(&ps->ps_lock); - if (imm_timeout) { - delta = -1; + if (deadline == 0) { + error = -1; } else { - delta = cv_relwaituntil_sig(&pcp->pc_cv, &pcp->pc_lock, - deltap, TR_MILLISEC); + error = cv_timedwait_sig_hrtime(&pcp->pc_cv, + &pcp->pc_lock, deadline); } mutex_exit(&pcp->pc_lock); /* * If we have received a signal or timed out * then break out and return. */ - if (delta <= 0) { - if (delta == 0) - error = EINTR; + if (error <= 0) { + error = (error == 0) ? EINTR : 0; break; } /* -- cgit v1.2.3 From 53d0048154a4fcb93c3f1e9c98fcb1f543e65421 Mon Sep 17 00:00:00 2001 From: Yuri Pankov Date: Fri, 31 Aug 2012 15:12:34 -0500 Subject: 3138 smb_token_create_privs() passes const char to smb_lgrp_getbyname() Reviewed by: Garrett D'Amore Reviewed by: Richard Lowe Approved by: Richard Lowe --- usr/src/lib/smbsrv/libmlsvc/common/smb_logon.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'usr/src/lib') diff --git a/usr/src/lib/smbsrv/libmlsvc/common/smb_logon.c b/usr/src/lib/smbsrv/libmlsvc/common/smb_logon.c index 71b6f278d6..4b7a1cd178 100644 --- a/usr/src/lib/smbsrv/libmlsvc/common/smb_logon.c +++ b/usr/src/lib/smbsrv/libmlsvc/common/smb_logon.c @@ -308,7 +308,9 @@ smb_token_create_privs(smb_token_t *token) smb_lgrp_iterclose(&gi); if (token->tkn_flags & SMB_ATF_ADMIN) { - rc = smb_lgrp_getbyname("Administrators", &grp); + char admgrp[] = "Administrators"; + + rc = smb_lgrp_getbyname(admgrp, &grp); if (rc == SMB_LGRP_SUCCESS) { smb_privset_merge(privs, grp.sg_privs); smb_lgrp_free(&grp); -- cgit v1.2.3 From 87da98afc11395cc0d41873b67d8f4317eca8f37 Mon Sep 17 00:00:00 2001 From: Vitaliy Gusev Date: Tue, 28 Aug 2012 20:28:15 -0500 Subject: 3109 libshare_nfs: findopt() should return index Reviewed by: Eric Schrock Approved by: Richard Lowe --- usr/src/lib/libshare/nfs/libshare_nfs.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'usr/src/lib') diff --git a/usr/src/lib/libshare/nfs/libshare_nfs.c b/usr/src/lib/libshare/nfs/libshare_nfs.c index 8d18ecee95..0be7bf4690 100644 --- a/usr/src/lib/libshare/nfs/libshare_nfs.c +++ b/usr/src/lib/libshare/nfs/libshare_nfs.c @@ -22,6 +22,9 @@ /* * Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved. */ +/* + * Copyright 2012 Nexenta Systems, Inc. All rights reserved. + */ /* * NFS specific functions @@ -252,7 +255,7 @@ findopt(char *name) if (name != NULL) { for (i = 0; optdefs[i].tag != NULL; i++) { if (strcmp(optdefs[i].tag, name) == 0) - return (i); + return (optdefs[i].index); } if (findcharset(name)) return (OPT_CHARSET_MAP); -- cgit v1.2.3 From 7894022e4e9cf70fb564b6c5c78c24ee1903e5fe Mon Sep 17 00:00:00 2001 From: Richard Lowe Date: Fri, 7 Sep 2012 01:52:31 +0100 Subject: 3021 option for time-ordered output from dtrace(1M) (fix lint) --- usr/src/lib/libdtrace/common/dt_consume.c | 1 + 1 file changed, 1 insertion(+) (limited to 'usr/src/lib') diff --git a/usr/src/lib/libdtrace/common/dt_consume.c b/usr/src/lib/libdtrace/common/dt_consume.c index f12a39991a..b1e8d2daa4 100644 --- a/usr/src/lib/libdtrace/common/dt_consume.c +++ b/usr/src/lib/libdtrace/common/dt_consume.c @@ -2463,6 +2463,7 @@ dt_buf_oldest(void *elem, void *arg) while (offs < buf->dtbd_size) { dtrace_rechdr_t *dtrh = + /* LINTED - alignment */ (dtrace_rechdr_t *)(buf->dtbd_data + offs); if (dtrh->dtrh_epid == DTRACE_EPIDNONE) { offs += sizeof (dtrace_epid_t); -- cgit v1.2.3 From fb09f5aad449c97fe309678f3f604982b563a96f Mon Sep 17 00:00:00 2001 From: Madhav Suresh Date: Fri, 7 Sep 2012 07:19:55 -0700 Subject: 3006 VERIFY[S,U,P] and ASSERT[S,U,P] frequently check if first argument is zero Reviewed by Matt Ahrens Reviewed by George Wilson Approved by Eric Schrock --- usr/src/cmd/zdb/Makefile.com | 7 +- usr/src/cmd/zhack/Makefile.com | 2 +- usr/src/cmd/ztest/Makefile.com | 6 +- usr/src/cmd/ztest/ztest.c | 24 +++--- usr/src/common/nvpair/fnvpair.c | 116 +++++++++++++------------- usr/src/lib/libc/port/threads/assfail.c | 4 +- usr/src/lib/libzpool/Makefile.com | 5 +- usr/src/lib/libzpool/common/sys/zfs_context.h | 56 +------------ usr/src/uts/common/disp/sysdc.c | 7 +- usr/src/uts/common/fs/zfs/arc.c | 10 +-- usr/src/uts/common/fs/zfs/bpobj.c | 2 +- usr/src/uts/common/fs/zfs/bptree.c | 14 ++-- usr/src/uts/common/fs/zfs/dbuf.c | 6 +- usr/src/uts/common/fs/zfs/dmu_send.c | 6 +- usr/src/uts/common/fs/zfs/dmu_traverse.c | 2 +- usr/src/uts/common/fs/zfs/dmu_tx.c | 2 +- usr/src/uts/common/fs/zfs/dnode.c | 76 ++++++++--------- usr/src/uts/common/fs/zfs/dnode_sync.c | 8 +- usr/src/uts/common/fs/zfs/dsl_dataset.c | 16 ++-- usr/src/uts/common/fs/zfs/dsl_dir.c | 12 +-- usr/src/uts/common/fs/zfs/dsl_pool.c | 2 +- usr/src/uts/common/fs/zfs/dsl_synctask.c | 2 +- usr/src/uts/common/fs/zfs/metaslab.c | 2 +- usr/src/uts/common/fs/zfs/spa.c | 4 +- usr/src/uts/common/fs/zfs/space_map.c | 9 +- usr/src/uts/common/fs/zfs/vdev.c | 14 ++-- usr/src/uts/common/fs/zfs/vdev_raidz.c | 6 +- usr/src/uts/common/fs/zfs/zap.c | 10 +-- usr/src/uts/common/fs/zfs/zap_micro.c | 2 +- usr/src/uts/common/fs/zfs/zfs_debug.c | 5 +- usr/src/uts/common/fs/zfs/zfs_ioctl.c | 2 +- usr/src/uts/common/fs/zfs/zfs_rlock.c | 9 +- usr/src/uts/common/fs/zfs/zfs_vfsops.c | 2 +- usr/src/uts/common/fs/zfs/zfs_vnops.c | 11 +-- usr/src/uts/common/fs/zfs/zfs_znode.c | 9 +- usr/src/uts/common/fs/zfs/zil.c | 2 +- usr/src/uts/common/fs/zfs/zio.c | 2 +- usr/src/uts/common/sys/debug.h | 8 ++ 38 files changed, 224 insertions(+), 258 deletions(-) (limited to 'usr/src/lib') diff --git a/usr/src/cmd/zdb/Makefile.com b/usr/src/cmd/zdb/Makefile.com index 259e32accb..0f018b6d6a 100644 --- a/usr/src/cmd/zdb/Makefile.com +++ b/usr/src/cmd/zdb/Makefile.com @@ -22,6 +22,7 @@ # # Copyright 2009 Sun Microsystems, Inc. All rights reserved. # Use is subject to license terms. +# Copyright (c) 2012 by Delphix. All rights reserved. # PROG:sh= cd ..; basename `pwd` @@ -42,11 +43,11 @@ C99LMODE= -Xc99=%all CFLAGS += $(CCVERBOSE) CFLAGS64 += $(CCVERBOSE) -CPPFLAGS += -D_LARGEFILE64_SOURCE=1 -D_REENTRANT $(INCS) +CPPFLAGS += -D_LARGEFILE64_SOURCE=1 -D_REENTRANT $(INCS) -DDEBUG # lint complains about unused _umem_* functions -LINTFLAGS += -xerroff=E_NAME_DEF_NOT_USED2 -LINTFLAGS64 += -xerroff=E_NAME_DEF_NOT_USED2 +LINTFLAGS += -xerroff=E_NAME_DEF_NOT_USED2 +LINTFLAGS64 += -xerroff=E_NAME_DEF_NOT_USED2 .KEEP_STATE: diff --git a/usr/src/cmd/zhack/Makefile.com b/usr/src/cmd/zhack/Makefile.com index b22aa347b5..d691fd4929 100644 --- a/usr/src/cmd/zhack/Makefile.com +++ b/usr/src/cmd/zhack/Makefile.com @@ -46,7 +46,7 @@ C99LMODE= -Xc99=%all CFLAGS += $(CCVERBOSE) CFLAGS64 += $(CCVERBOSE) -CPPFLAGS += -D_LARGEFILE64_SOURCE=1 -D_REENTRANT $(INCS) +CPPFLAGS += -D_LARGEFILE64_SOURCE=1 -D_REENTRANT -DDEBUG $(INCS) .KEEP_STATE: diff --git a/usr/src/cmd/ztest/Makefile.com b/usr/src/cmd/ztest/Makefile.com index 0199a68b1e..0f308ab2e3 100644 --- a/usr/src/cmd/ztest/Makefile.com +++ b/usr/src/cmd/ztest/Makefile.com @@ -40,11 +40,11 @@ C99MODE= -xc99=%all C99LMODE= -Xc99=%all CFLAGS += -g $(CCVERBOSE) CFLAGS64 += -g $(CCVERBOSE) -CPPFLAGS += -D_LARGEFILE64_SOURCE=1 -D_REENTRANT $(INCS) +CPPFLAGS += -D_LARGEFILE64_SOURCE=1 -D_REENTRANT $(INCS) -DDEBUG # lint complains about unused _umem_* functions -LINTFLAGS += -xerroff=E_NAME_DEF_NOT_USED2 -LINTFLAGS64 += -xerroff=E_NAME_DEF_NOT_USED2 +LINTFLAGS += -xerroff=E_NAME_DEF_NOT_USED2 +LINTFLAGS64 += -xerroff=E_NAME_DEF_NOT_USED2 .KEEP_STATE: diff --git a/usr/src/cmd/ztest/ztest.c b/usr/src/cmd/ztest/ztest.c index caa7834584..95b8e2ed79 100644 --- a/usr/src/cmd/ztest/ztest.c +++ b/usr/src/cmd/ztest/ztest.c @@ -979,7 +979,7 @@ ztest_dsl_prop_set_uint64(char *osname, zfs_prop_t prop, uint64_t value, ztest_record_enospc(FTAG); return (error); } - ASSERT3U(error, ==, 0); + ASSERT0(error); VERIFY3U(dsl_prop_get(osname, propname, sizeof (curval), 1, &curval, setpoint), ==, 0); @@ -1011,7 +1011,7 @@ ztest_spa_prop_set_uint64(zpool_prop_t prop, uint64_t value) ztest_record_enospc(FTAG); return (error); } - ASSERT3U(error, ==, 0); + ASSERT0(error); return (error); } @@ -1708,7 +1708,7 @@ ztest_replay_setattr(ztest_ds_t *zd, lr_setattr_t *lr, boolean_t byteswap) ASSERT3U(lr->lr_size, >=, sizeof (*bbt)); ASSERT3U(lr->lr_size, <=, db->db_size); - VERIFY3U(dmu_set_bonus(db, lr->lr_size, tx), ==, 0); + VERIFY0(dmu_set_bonus(db, lr->lr_size, tx)); bbt = ztest_bt_bonus(db); ztest_bt_generate(bbt, os, lr->lr_foid, -1ULL, lr->lr_mode, txg, crtxg); @@ -3043,7 +3043,7 @@ ztest_objset_destroy_cb(const char *name, void *arg) error = dmu_object_info(os, ZTEST_DIROBJ, &doi); if (error != ENOENT) { /* We could have crashed in the middle of destroying it */ - ASSERT3U(error, ==, 0); + ASSERT0(error); ASSERT3U(doi.doi_type, ==, DMU_OT_ZAP_OTHER); ASSERT3S(doi.doi_physical_blocks_512, >=, 0); } @@ -3452,10 +3452,10 @@ ztest_dmu_read_write(ztest_ds_t *zd, uint64_t id) */ error = dmu_read(os, packobj, packoff, packsize, packbuf, DMU_READ_PREFETCH); - ASSERT3U(error, ==, 0); + ASSERT0(error); error = dmu_read(os, bigobj, bigoff, bigsize, bigbuf, DMU_READ_PREFETCH); - ASSERT3U(error, ==, 0); + ASSERT0(error); /* * Get a tx for the mods to both packobj and bigobj. @@ -3765,10 +3765,10 @@ ztest_dmu_read_write_zcopy(ztest_ds_t *zd, uint64_t id) if (i != 0 || ztest_random(2) != 0) { error = dmu_read(os, packobj, packoff, packsize, packbuf, DMU_READ_PREFETCH); - ASSERT3U(error, ==, 0); + ASSERT0(error); error = dmu_read(os, bigobj, bigoff, bigsize, bigbuf, DMU_READ_PREFETCH); - ASSERT3U(error, ==, 0); + ASSERT0(error); } compare_and_update_pbbufs(s, packbuf, bigbuf, bigsize, n, chunksize, txg); @@ -4039,7 +4039,7 @@ ztest_zap(ztest_ds_t *zd, uint64_t id) if (error == ENOENT) return; - ASSERT3U(error, ==, 0); + ASSERT0(error); tx = dmu_tx_create(os); dmu_tx_hold_zap(tx, object, B_TRUE, NULL); @@ -4235,7 +4235,7 @@ ztest_commit_callback(void *arg, int error) data->zcd_called = B_TRUE; if (error == ECANCELED) { - ASSERT3U(data->zcd_txg, ==, 0); + ASSERT0(data->zcd_txg); ASSERT(!data->zcd_added); /* @@ -4440,7 +4440,7 @@ ztest_spa_prop_get_set(ztest_ds_t *zd, uint64_t id) (void) ztest_spa_prop_set_uint64(ZPOOL_PROP_DEDUPDITTO, ZIO_DEDUPDITTO_MIN + ztest_random(ZIO_DEDUPDITTO_MIN)); - VERIFY3U(spa_prop_get(ztest_spa, &props), ==, 0); + VERIFY0(spa_prop_get(ztest_spa, &props)); if (ztest_opts.zo_verbose >= 6) dump_nvlist(props, 4); @@ -5262,7 +5262,7 @@ ztest_dataset_open(int d) } ASSERT(error == 0 || error == EEXIST); - VERIFY3U(dmu_objset_hold(name, zd, &os), ==, 0); + VERIFY0(dmu_objset_hold(name, zd, &os)); (void) rw_unlock(&ztest_name_lock); ztest_zd_init(zd, ZTEST_GET_SHARED_DS(d), os); diff --git a/usr/src/common/nvpair/fnvpair.c b/usr/src/common/nvpair/fnvpair.c index 8d1bb98be3..8c5591c0b2 100644 --- a/usr/src/common/nvpair/fnvpair.c +++ b/usr/src/common/nvpair/fnvpair.c @@ -50,7 +50,7 @@ nvlist_t * fnvlist_alloc(void) { nvlist_t *nvl; - VERIFY3U(nvlist_alloc(&nvl, NV_UNIQUE_NAME, KM_SLEEP), ==, 0); + VERIFY0(nvlist_alloc(&nvl, NV_UNIQUE_NAME, KM_SLEEP)); return (nvl); } @@ -64,7 +64,7 @@ size_t fnvlist_size(nvlist_t *nvl) { size_t size; - VERIFY3U(nvlist_size(nvl, &size, NV_ENCODE_NATIVE), ==, 0); + VERIFY0(nvlist_size(nvl, &size, NV_ENCODE_NATIVE)); return (size); } @@ -96,7 +96,7 @@ nvlist_t * fnvlist_unpack(char *buf, size_t buflen) { nvlist_t *rv; - VERIFY3U(nvlist_unpack(buf, buflen, &rv, KM_SLEEP), ==, 0); + VERIFY0(nvlist_unpack(buf, buflen, &rv, KM_SLEEP)); return (rv); } @@ -104,195 +104,195 @@ nvlist_t * fnvlist_dup(nvlist_t *nvl) { nvlist_t *rv; - VERIFY3U(nvlist_dup(nvl, &rv, KM_SLEEP), ==, 0); + VERIFY0(nvlist_dup(nvl, &rv, KM_SLEEP)); return (rv); } void fnvlist_merge(nvlist_t *dst, nvlist_t *src) { - VERIFY3U(nvlist_merge(dst, src, KM_SLEEP), ==, 0); + VERIFY0(nvlist_merge(dst, src, KM_SLEEP)); } void fnvlist_add_boolean(nvlist_t *nvl, const char *name) { - VERIFY3U(nvlist_add_boolean(nvl, name), ==, 0); + VERIFY0(nvlist_add_boolean(nvl, name)); } void fnvlist_add_boolean_value(nvlist_t *nvl, const char *name, boolean_t val) { - VERIFY3U(nvlist_add_boolean_value(nvl, name, val), ==, 0); + VERIFY0(nvlist_add_boolean_value(nvl, name, val)); } void fnvlist_add_byte(nvlist_t *nvl, const char *name, uchar_t val) { - VERIFY3U(nvlist_add_byte(nvl, name, val), ==, 0); + VERIFY0(nvlist_add_byte(nvl, name, val)); } void fnvlist_add_int8(nvlist_t *nvl, const char *name, int8_t val) { - VERIFY3U(nvlist_add_int8(nvl, name, val), ==, 0); + VERIFY0(nvlist_add_int8(nvl, name, val)); } void fnvlist_add_uint8(nvlist_t *nvl, const char *name, uint8_t val) { - VERIFY3U(nvlist_add_uint8(nvl, name, val), ==, 0); + VERIFY0(nvlist_add_uint8(nvl, name, val)); } void fnvlist_add_int16(nvlist_t *nvl, const char *name, int16_t val) { - VERIFY3U(nvlist_add_int16(nvl, name, val), ==, 0); + VERIFY0(nvlist_add_int16(nvl, name, val)); } void fnvlist_add_uint16(nvlist_t *nvl, const char *name, uint16_t val) { - VERIFY3U(nvlist_add_uint16(nvl, name, val), ==, 0); + VERIFY0(nvlist_add_uint16(nvl, name, val)); } void fnvlist_add_int32(nvlist_t *nvl, const char *name, int32_t val) { - VERIFY3U(nvlist_add_int32(nvl, name, val), ==, 0); + VERIFY0(nvlist_add_int32(nvl, name, val)); } void fnvlist_add_uint32(nvlist_t *nvl, const char *name, uint32_t val) { - VERIFY3U(nvlist_add_uint32(nvl, name, val), ==, 0); + VERIFY0(nvlist_add_uint32(nvl, name, val)); } void fnvlist_add_int64(nvlist_t *nvl, const char *name, int64_t val) { - VERIFY3U(nvlist_add_int64(nvl, name, val), ==, 0); + VERIFY0(nvlist_add_int64(nvl, name, val)); } void fnvlist_add_uint64(nvlist_t *nvl, const char *name, uint64_t val) { - VERIFY3U(nvlist_add_uint64(nvl, name, val), ==, 0); + VERIFY0(nvlist_add_uint64(nvl, name, val)); } void fnvlist_add_string(nvlist_t *nvl, const char *name, const char *val) { - VERIFY3U(nvlist_add_string(nvl, name, val), ==, 0); + VERIFY0(nvlist_add_string(nvl, name, val)); } void fnvlist_add_nvlist(nvlist_t *nvl, const char *name, nvlist_t *val) { - VERIFY3U(nvlist_add_nvlist(nvl, name, val), ==, 0); + VERIFY0(nvlist_add_nvlist(nvl, name, val)); } void fnvlist_add_nvpair(nvlist_t *nvl, nvpair_t *pair) { - VERIFY3U(nvlist_add_nvpair(nvl, pair), ==, 0); + VERIFY0(nvlist_add_nvpair(nvl, pair)); } void fnvlist_add_boolean_array(nvlist_t *nvl, const char *name, boolean_t *val, uint_t n) { - VERIFY3U(nvlist_add_boolean_array(nvl, name, val, n), ==, 0); + VERIFY0(nvlist_add_boolean_array(nvl, name, val, n)); } void fnvlist_add_byte_array(nvlist_t *nvl, const char *name, uchar_t *val, uint_t n) { - VERIFY3U(nvlist_add_byte_array(nvl, name, val, n), ==, 0); + VERIFY0(nvlist_add_byte_array(nvl, name, val, n)); } void fnvlist_add_int8_array(nvlist_t *nvl, const char *name, int8_t *val, uint_t n) { - VERIFY3U(nvlist_add_int8_array(nvl, name, val, n), ==, 0); + VERIFY0(nvlist_add_int8_array(nvl, name, val, n)); } void fnvlist_add_uint8_array(nvlist_t *nvl, const char *name, uint8_t *val, uint_t n) { - VERIFY3U(nvlist_add_uint8_array(nvl, name, val, n), ==, 0); + VERIFY0(nvlist_add_uint8_array(nvl, name, val, n)); } void fnvlist_add_int16_array(nvlist_t *nvl, const char *name, int16_t *val, uint_t n) { - VERIFY3U(nvlist_add_int16_array(nvl, name, val, n), ==, 0); + VERIFY0(nvlist_add_int16_array(nvl, name, val, n)); } void fnvlist_add_uint16_array(nvlist_t *nvl, const char *name, uint16_t *val, uint_t n) { - VERIFY3U(nvlist_add_uint16_array(nvl, name, val, n), ==, 0); + VERIFY0(nvlist_add_uint16_array(nvl, name, val, n)); } void fnvlist_add_int32_array(nvlist_t *nvl, const char *name, int32_t *val, uint_t n) { - VERIFY3U(nvlist_add_int32_array(nvl, name, val, n), ==, 0); + VERIFY0(nvlist_add_int32_array(nvl, name, val, n)); } void fnvlist_add_uint32_array(nvlist_t *nvl, const char *name, uint32_t *val, uint_t n) { - VERIFY3U(nvlist_add_uint32_array(nvl, name, val, n), ==, 0); + VERIFY0(nvlist_add_uint32_array(nvl, name, val, n)); } void fnvlist_add_int64_array(nvlist_t *nvl, const char *name, int64_t *val, uint_t n) { - VERIFY3U(nvlist_add_int64_array(nvl, name, val, n), ==, 0); + VERIFY0(nvlist_add_int64_array(nvl, name, val, n)); } void fnvlist_add_uint64_array(nvlist_t *nvl, const char *name, uint64_t *val, uint_t n) { - VERIFY3U(nvlist_add_uint64_array(nvl, name, val, n), ==, 0); + VERIFY0(nvlist_add_uint64_array(nvl, name, val, n)); } void fnvlist_add_string_array(nvlist_t *nvl, const char *name, char * const *val, uint_t n) { - VERIFY3U(nvlist_add_string_array(nvl, name, val, n), ==, 0); + VERIFY0(nvlist_add_string_array(nvl, name, val, n)); } void fnvlist_add_nvlist_array(nvlist_t *nvl, const char *name, nvlist_t **val, uint_t n) { - VERIFY3U(nvlist_add_nvlist_array(nvl, name, val, n), ==, 0); + VERIFY0(nvlist_add_nvlist_array(nvl, name, val, n)); } void fnvlist_remove(nvlist_t *nvl, const char *name) { - VERIFY3U(nvlist_remove_all(nvl, name), ==, 0); + VERIFY0(nvlist_remove_all(nvl, name)); } void fnvlist_remove_nvpair(nvlist_t *nvl, nvpair_t *pair) { - VERIFY3U(nvlist_remove_nvpair(nvl, pair), ==, 0); + VERIFY0(nvlist_remove_nvpair(nvl, pair)); } nvpair_t * fnvlist_lookup_nvpair(nvlist_t *nvl, const char *name) { nvpair_t *rv; - VERIFY3U(nvlist_lookup_nvpair(nvl, name, &rv), ==, 0); + VERIFY0(nvlist_lookup_nvpair(nvl, name, &rv)); return (rv); } @@ -307,7 +307,7 @@ boolean_t fnvlist_lookup_boolean_value(nvlist_t *nvl, const char *name) { boolean_t rv; - VERIFY3U(nvlist_lookup_boolean_value(nvl, name, &rv), ==, 0); + VERIFY0(nvlist_lookup_boolean_value(nvl, name, &rv)); return (rv); } @@ -315,7 +315,7 @@ uchar_t fnvlist_lookup_byte(nvlist_t *nvl, const char *name) { uchar_t rv; - VERIFY3U(nvlist_lookup_byte(nvl, name, &rv), ==, 0); + VERIFY0(nvlist_lookup_byte(nvl, name, &rv)); return (rv); } @@ -323,7 +323,7 @@ int8_t fnvlist_lookup_int8(nvlist_t *nvl, const char *name) { int8_t rv; - VERIFY3U(nvlist_lookup_int8(nvl, name, &rv), ==, 0); + VERIFY0(nvlist_lookup_int8(nvl, name, &rv)); return (rv); } @@ -331,7 +331,7 @@ int16_t fnvlist_lookup_int16(nvlist_t *nvl, const char *name) { int16_t rv; - VERIFY3U(nvlist_lookup_int16(nvl, name, &rv), ==, 0); + VERIFY0(nvlist_lookup_int16(nvl, name, &rv)); return (rv); } @@ -339,7 +339,7 @@ int32_t fnvlist_lookup_int32(nvlist_t *nvl, const char *name) { int32_t rv; - VERIFY3U(nvlist_lookup_int32(nvl, name, &rv), ==, 0); + VERIFY0(nvlist_lookup_int32(nvl, name, &rv)); return (rv); } @@ -347,7 +347,7 @@ int64_t fnvlist_lookup_int64(nvlist_t *nvl, const char *name) { int64_t rv; - VERIFY3U(nvlist_lookup_int64(nvl, name, &rv), ==, 0); + VERIFY0(nvlist_lookup_int64(nvl, name, &rv)); return (rv); } @@ -355,7 +355,7 @@ uint8_t fnvlist_lookup_uint8_t(nvlist_t *nvl, const char *name) { uint8_t rv; - VERIFY3U(nvlist_lookup_uint8(nvl, name, &rv), ==, 0); + VERIFY0(nvlist_lookup_uint8(nvl, name, &rv)); return (rv); } @@ -363,7 +363,7 @@ uint16_t fnvlist_lookup_uint16(nvlist_t *nvl, const char *name) { uint16_t rv; - VERIFY3U(nvlist_lookup_uint16(nvl, name, &rv), ==, 0); + VERIFY0(nvlist_lookup_uint16(nvl, name, &rv)); return (rv); } @@ -371,7 +371,7 @@ uint32_t fnvlist_lookup_uint32(nvlist_t *nvl, const char *name) { uint32_t rv; - VERIFY3U(nvlist_lookup_uint32(nvl, name, &rv), ==, 0); + VERIFY0(nvlist_lookup_uint32(nvl, name, &rv)); return (rv); } @@ -379,7 +379,7 @@ uint64_t fnvlist_lookup_uint64(nvlist_t *nvl, const char *name) { uint64_t rv; - VERIFY3U(nvlist_lookup_uint64(nvl, name, &rv), ==, 0); + VERIFY0(nvlist_lookup_uint64(nvl, name, &rv)); return (rv); } @@ -387,7 +387,7 @@ char * fnvlist_lookup_string(nvlist_t *nvl, const char *name) { char *rv; - VERIFY3U(nvlist_lookup_string(nvl, name, &rv), ==, 0); + VERIFY0(nvlist_lookup_string(nvl, name, &rv)); return (rv); } @@ -395,7 +395,7 @@ nvlist_t * fnvlist_lookup_nvlist(nvlist_t *nvl, const char *name) { nvlist_t *rv; - VERIFY3U(nvlist_lookup_nvlist(nvl, name, &rv), ==, 0); + VERIFY0(nvlist_lookup_nvlist(nvl, name, &rv)); return (rv); } @@ -403,7 +403,7 @@ boolean_t fnvpair_value_boolean_value(nvpair_t *nvp) { boolean_t rv; - VERIFY3U(nvpair_value_boolean_value(nvp, &rv), ==, 0); + VERIFY0(nvpair_value_boolean_value(nvp, &rv)); return (rv); } @@ -411,7 +411,7 @@ uchar_t fnvpair_value_byte(nvpair_t *nvp) { uchar_t rv; - VERIFY3U(nvpair_value_byte(nvp, &rv), ==, 0); + VERIFY0(nvpair_value_byte(nvp, &rv)); return (rv); } @@ -419,7 +419,7 @@ int8_t fnvpair_value_int8(nvpair_t *nvp) { int8_t rv; - VERIFY3U(nvpair_value_int8(nvp, &rv), ==, 0); + VERIFY0(nvpair_value_int8(nvp, &rv)); return (rv); } @@ -427,7 +427,7 @@ int16_t fnvpair_value_int16(nvpair_t *nvp) { int16_t rv; - VERIFY3U(nvpair_value_int16(nvp, &rv), ==, 0); + VERIFY0(nvpair_value_int16(nvp, &rv)); return (rv); } @@ -435,7 +435,7 @@ int32_t fnvpair_value_int32(nvpair_t *nvp) { int32_t rv; - VERIFY3U(nvpair_value_int32(nvp, &rv), ==, 0); + VERIFY0(nvpair_value_int32(nvp, &rv)); return (rv); } @@ -443,7 +443,7 @@ int64_t fnvpair_value_int64(nvpair_t *nvp) { int64_t rv; - VERIFY3U(nvpair_value_int64(nvp, &rv), ==, 0); + VERIFY0(nvpair_value_int64(nvp, &rv)); return (rv); } @@ -451,7 +451,7 @@ uint8_t fnvpair_value_uint8_t(nvpair_t *nvp) { uint8_t rv; - VERIFY3U(nvpair_value_uint8(nvp, &rv), ==, 0); + VERIFY0(nvpair_value_uint8(nvp, &rv)); return (rv); } @@ -459,7 +459,7 @@ uint16_t fnvpair_value_uint16(nvpair_t *nvp) { uint16_t rv; - VERIFY3U(nvpair_value_uint16(nvp, &rv), ==, 0); + VERIFY0(nvpair_value_uint16(nvp, &rv)); return (rv); } @@ -467,7 +467,7 @@ uint32_t fnvpair_value_uint32(nvpair_t *nvp) { uint32_t rv; - VERIFY3U(nvpair_value_uint32(nvp, &rv), ==, 0); + VERIFY0(nvpair_value_uint32(nvp, &rv)); return (rv); } @@ -475,7 +475,7 @@ uint64_t fnvpair_value_uint64(nvpair_t *nvp) { uint64_t rv; - VERIFY3U(nvpair_value_uint64(nvp, &rv), ==, 0); + VERIFY0(nvpair_value_uint64(nvp, &rv)); return (rv); } @@ -483,7 +483,7 @@ char * fnvpair_value_string(nvpair_t *nvp) { char *rv; - VERIFY3U(nvpair_value_string(nvp, &rv), ==, 0); + VERIFY0(nvpair_value_string(nvp, &rv)); return (rv); } @@ -491,6 +491,6 @@ nvlist_t * fnvpair_value_nvlist(nvpair_t *nvp) { nvlist_t *rv; - VERIFY3U(nvpair_value_nvlist(nvp, &rv), ==, 0); + VERIFY0(nvpair_value_nvlist(nvp, &rv)); return (rv); } diff --git a/usr/src/lib/libc/port/threads/assfail.c b/usr/src/lib/libc/port/threads/assfail.c index 7cf0ea98e6..7a98884f4b 100644 --- a/usr/src/lib/libc/port/threads/assfail.c +++ b/usr/src/lib/libc/port/threads/assfail.c @@ -452,11 +452,11 @@ assfail3(const char *assertion, uintmax_t lv, const char *op, uintmax_t rv, { char buf[1000]; (void) strcpy(buf, assertion); - (void) strcat(buf, " (0x"); + (void) strcat(buf, " ("); ultos((uint64_t)lv, 16, buf + strlen(buf)); (void) strcat(buf, " "); (void) strcat(buf, op); - (void) strcat(buf, " 0x"); + (void) strcat(buf, " "); ultos((uint64_t)rv, 16, buf + strlen(buf)); (void) strcat(buf, ")"); __assfail(buf, filename, line_num); diff --git a/usr/src/lib/libzpool/Makefile.com b/usr/src/lib/libzpool/Makefile.com index 571881a47e..2485f7350f 100644 --- a/usr/src/lib/libzpool/Makefile.com +++ b/usr/src/lib/libzpool/Makefile.com @@ -20,6 +20,7 @@ # # # Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2012 by Delphix. All rights reserved. # LIBRARY= libzpool.a @@ -57,9 +58,9 @@ C99MODE= -xc99=%all C99LMODE= -Xc99=%all CFLAGS += -g $(CCVERBOSE) $(CNOGLOBAL) -CFLAGS64 += -g $(CCVERBOSE) $(CNOGLOBAL) +CFLAGS64 += -g $(CCVERBOSE) $(CNOGLOBAL) LDLIBS += -lcmdutils -lumem -lavl -lnvpair -lz -lc -lsysevent -lmd -CPPFLAGS += $(INCS) +CPPFLAGS += $(INCS) -DDEBUG .KEEP_STATE: diff --git a/usr/src/lib/libzpool/common/sys/zfs_context.h b/usr/src/lib/libzpool/common/sys/zfs_context.h index 8ca60b7625..9e6fd4455c 100644 --- a/usr/src/lib/libzpool/common/sys/zfs_context.h +++ b/usr/src/lib/libzpool/common/sys/zfs_context.h @@ -36,7 +36,6 @@ extern "C" { #define _SYS_RWLOCK_H #define _SYS_CONDVAR_H #define _SYS_SYSTM_H -#define _SYS_DEBUG_H #define _SYS_T_LOCK_H #define _SYS_VNODE_H #define _SYS_VFS_H @@ -79,6 +78,7 @@ extern "C" { #include #include #include +#include /* * Debugging @@ -111,60 +111,6 @@ extern void vpanic(const char *, __va_list); extern int aok; -/* This definition is copied from assert.h. */ -#if defined(__STDC__) -#if __STDC_VERSION__ - 0 >= 199901L -#define zverify(EX) (void)((EX) || (aok) || \ - (__assert_c99(#EX, __FILE__, __LINE__, __func__), 0)) -#else -#define zverify(EX) (void)((EX) || (aok) || \ - (__assert(#EX, __FILE__, __LINE__), 0)) -#endif /* __STDC_VERSION__ - 0 >= 199901L */ -#else -#define zverify(EX) (void)((EX) || (aok) || \ - (_assert("EX", __FILE__, __LINE__), 0)) -#endif /* __STDC__ */ - - -#define VERIFY zverify -#define ASSERT zverify -#undef assert -#define assert zverify - -extern void __assert(const char *, const char *, int); - -#ifdef lint -#define VERIFY3_IMPL(x, y, z, t) if (x == z) ((void)0) -#else -/* BEGIN CSTYLED */ -#define VERIFY3_IMPL(LEFT, OP, RIGHT, TYPE) do { \ - const TYPE __left = (TYPE)(LEFT); \ - const TYPE __right = (TYPE)(RIGHT); \ - if (!(__left OP __right) && (!aok)) { \ - char *__buf = alloca(256); \ - (void) snprintf(__buf, 256, "%s %s %s (0x%llx %s 0x%llx)", \ - #LEFT, #OP, #RIGHT, \ - (u_longlong_t)__left, #OP, (u_longlong_t)__right); \ - __assert(__buf, __FILE__, __LINE__); \ - } \ -_NOTE(CONSTCOND) } while (0) -/* END CSTYLED */ -#endif /* lint */ - -#define VERIFY3S(x, y, z) VERIFY3_IMPL(x, y, z, int64_t) -#define VERIFY3U(x, y, z) VERIFY3_IMPL(x, y, z, uint64_t) -#define VERIFY3P(x, y, z) VERIFY3_IMPL(x, y, z, uintptr_t) - -#ifdef NDEBUG -#define ASSERT3S(x, y, z) ((void)0) -#define ASSERT3U(x, y, z) ((void)0) -#define ASSERT3P(x, y, z) ((void)0) -#else -#define ASSERT3S(x, y, z) VERIFY3S(x, y, z) -#define ASSERT3U(x, y, z) VERIFY3U(x, y, z) -#define ASSERT3P(x, y, z) VERIFY3P(x, y, z) -#endif - /* * DTrace SDT probes have different signatures in userland than they do in * kernel. If they're being used in kernel code, re-define them out of diff --git a/usr/src/uts/common/disp/sysdc.c b/usr/src/uts/common/disp/sysdc.c index e295eaf323..c5d67deff5 100644 --- a/usr/src/uts/common/disp/sysdc.c +++ b/usr/src/uts/common/disp/sysdc.c @@ -20,6 +20,7 @@ */ /* * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 by Delphix. All rights reserved. */ /* @@ -1305,12 +1306,12 @@ sysdc_thread_enter(kthread_t *t, uint_t dc, uint_t flags) sdp.sdp_maxpri = sysdc_maxpri; sdp.sdp_DC = MAX(MIN(dc, sysdc_maxDC), sysdc_minDC); - VERIFY3U(CL_ALLOC(&buf, sysdccid, KM_SLEEP), ==, 0); + VERIFY0(CL_ALLOC(&buf, sysdccid, KM_SLEEP)); ASSERT(t->t_lwp != NULL); ASSERT(t->t_cid == syscid); ASSERT(t->t_cldata == NULL); - VERIFY3U(CL_CANEXIT(t, NULL), ==, 0); - VERIFY3U(CL_ENTERCLASS(t, sysdccid, &sdp, kcred, buf), ==, 0); + VERIFY0(CL_CANEXIT(t, NULL)); + VERIFY0(CL_ENTERCLASS(t, sysdccid, &sdp, kcred, buf)); CL_EXITCLASS(syscid, NULL); } diff --git a/usr/src/uts/common/fs/zfs/arc.c b/usr/src/uts/common/fs/zfs/arc.c index 630a4477ad..e6a2df18e9 100644 --- a/usr/src/uts/common/fs/zfs/arc.c +++ b/usr/src/uts/common/fs/zfs/arc.c @@ -1064,7 +1064,7 @@ add_reference(arc_buf_hdr_t *ab, kmutex_t *hash_lock, void *tag) ASSERT(list_link_active(&ab->b_arc_node)); list_remove(list, ab); if (GHOST_STATE(ab->b_state)) { - ASSERT3U(ab->b_datacnt, ==, 0); + ASSERT0(ab->b_datacnt); ASSERT3P(ab->b_buf, ==, NULL); delta = ab->b_size; } @@ -1691,7 +1691,7 @@ arc_evict(arc_state_t *state, uint64_t spa, int64_t bytes, boolean_t recycle, hash_lock = HDR_LOCK(ab); have_lock = MUTEX_HELD(hash_lock); if (have_lock || mutex_tryenter(hash_lock)) { - ASSERT3U(refcount_count(&ab->b_refcnt), ==, 0); + ASSERT0(refcount_count(&ab->b_refcnt)); ASSERT(ab->b_datacnt > 0); while (ab->b_buf) { arc_buf_t *buf = ab->b_buf; @@ -2519,7 +2519,7 @@ arc_access(arc_buf_hdr_t *buf, kmutex_t *hash_lock) * This is a prefetch access... * move this block back to the MRU state. */ - ASSERT3U(refcount_count(&buf->b_refcnt), ==, 0); + ASSERT0(refcount_count(&buf->b_refcnt)); new_state = arc_mru; } @@ -2861,7 +2861,7 @@ top: /* this block is in the ghost cache */ ASSERT(GHOST_STATE(hdr->b_state)); ASSERT(!HDR_IO_IN_PROGRESS(hdr)); - ASSERT3U(refcount_count(&hdr->b_refcnt), ==, 0); + ASSERT0(refcount_count(&hdr->b_refcnt)); ASSERT(hdr->b_buf == NULL); /* if this is a prefetch, we don't have a reference */ @@ -4436,7 +4436,7 @@ l2arc_write_buffers(spa_t *spa, l2arc_dev_t *dev, uint64_t target_sz) mutex_exit(&l2arc_buflist_mtx); if (pio == NULL) { - ASSERT3U(write_sz, ==, 0); + ASSERT0(write_sz); kmem_cache_free(hdr_cache, head); return (0); } diff --git a/usr/src/uts/common/fs/zfs/bpobj.c b/usr/src/uts/common/fs/zfs/bpobj.c index d5f8d4072d..1920da4408 100644 --- a/usr/src/uts/common/fs/zfs/bpobj.c +++ b/usr/src/uts/common/fs/zfs/bpobj.c @@ -43,7 +43,7 @@ bpobj_alloc_empty(objset_t *os, int blocksize, dmu_tx_t *tx) if (spa_feature_is_enabled(spa, empty_bpobj_feat)) { if (!spa_feature_is_active(spa, empty_bpobj_feat)) { - ASSERT3U(dp->dp_empty_bpobj, ==, 0); + ASSERT0(dp->dp_empty_bpobj); dp->dp_empty_bpobj = bpobj_alloc(os, SPA_MAXBLOCKSIZE, tx); VERIFY(zap_add(os, diff --git a/usr/src/uts/common/fs/zfs/bptree.c b/usr/src/uts/common/fs/zfs/bptree.c index ca4cd25468..1a009cfe57 100644 --- a/usr/src/uts/common/fs/zfs/bptree.c +++ b/usr/src/uts/common/fs/zfs/bptree.c @@ -94,9 +94,9 @@ bptree_free(objset_t *os, uint64_t obj, dmu_tx_t *tx) VERIFY3U(0, ==, dmu_bonus_hold(os, obj, FTAG, &db)); bt = db->db_data; ASSERT3U(bt->bt_begin, ==, bt->bt_end); - ASSERT3U(bt->bt_bytes, ==, 0); - ASSERT3U(bt->bt_comp, ==, 0); - ASSERT3U(bt->bt_uncomp, ==, 0); + ASSERT0(bt->bt_bytes); + ASSERT0(bt->bt_comp); + ASSERT0(bt->bt_uncomp); dmu_buf_rele(db, FTAG); return (dmu_object_free(os, obj, tx)); @@ -198,7 +198,7 @@ bptree_iterate(objset_t *os, uint64_t obj, boolean_t free, bptree_itor_t func, /* save bookmark for future resume */ ASSERT3U(bte.be_zb.zb_objset, ==, ZB_DESTROYED_OBJSET); - ASSERT3U(bte.be_zb.zb_level, ==, 0); + ASSERT0(bte.be_zb.zb_level); dmu_write(os, obj, i * sizeof (bte), sizeof (bte), &bte, tx); break; @@ -214,9 +214,9 @@ bptree_iterate(objset_t *os, uint64_t obj, boolean_t free, bptree_itor_t func, /* if all blocks are free there should be no used space */ if (ba.ba_phys->bt_begin == ba.ba_phys->bt_end) { - ASSERT3U(ba.ba_phys->bt_bytes, ==, 0); - ASSERT3U(ba.ba_phys->bt_comp, ==, 0); - ASSERT3U(ba.ba_phys->bt_uncomp, ==, 0); + ASSERT0(ba.ba_phys->bt_bytes); + ASSERT0(ba.ba_phys->bt_comp); + ASSERT0(ba.ba_phys->bt_uncomp); } dmu_buf_rele(db, FTAG); diff --git a/usr/src/uts/common/fs/zfs/dbuf.c b/usr/src/uts/common/fs/zfs/dbuf.c index 145cc01c67..a6048bb511 100644 --- a/usr/src/uts/common/fs/zfs/dbuf.c +++ b/usr/src/uts/common/fs/zfs/dbuf.c @@ -328,7 +328,7 @@ dbuf_verify(dmu_buf_impl_t *db) } else if (db->db_blkid == DMU_SPILL_BLKID) { ASSERT(dn != NULL); ASSERT3U(db->db.db_size, >=, dn->dn_bonuslen); - ASSERT3U(db->db.db_offset, ==, 0); + ASSERT0(db->db.db_offset); } else { ASSERT3U(db->db.db_offset, ==, db->db_blkid * db->db.db_size); } @@ -2308,7 +2308,7 @@ dbuf_sync_leaf(dbuf_dirty_record_t *dr, dmu_tx_t *tx) dbuf_dirty_record_t **drp; ASSERT(*datap != NULL); - ASSERT3U(db->db_level, ==, 0); + ASSERT0(db->db_level); ASSERT3U(dn->dn_phys->dn_bonuslen, <=, DN_MAX_BONUSLEN); bcopy(*datap, DN_BONUS(dn->dn_phys), dn->dn_phys->dn_bonuslen); DB_DNODE_EXIT(db); @@ -2507,7 +2507,7 @@ dbuf_write_done(zio_t *zio, arc_buf_t *buf, void *vdb) uint64_t txg = zio->io_txg; dbuf_dirty_record_t **drp, *dr; - ASSERT3U(zio->io_error, ==, 0); + ASSERT0(zio->io_error); ASSERT(db->db_blkptr == bp); if (zio->io_flags & ZIO_FLAG_IO_REWRITE) { diff --git a/usr/src/uts/common/fs/zfs/dmu_send.c b/usr/src/uts/common/fs/zfs/dmu_send.c index e2b0c822bb..e5644b5a0c 100644 --- a/usr/src/uts/common/fs/zfs/dmu_send.c +++ b/usr/src/uts/common/fs/zfs/dmu_send.c @@ -57,7 +57,7 @@ dump_bytes(dmu_sendarg_t *dsp, void *buf, int len) { dsl_dataset_t *ds = dsp->dsa_os->os_dsl_dataset; ssize_t resid; /* have to get resid to get detailed errno */ - ASSERT3U(len % 8, ==, 0); + ASSERT0(len % 8); fletcher_4_incremental_native(buf, len, &dsp->dsa_zc); dsp->dsa_err = vn_rdwr(UIO_WRITE, dsp->dsa_vp, @@ -961,7 +961,7 @@ restore_read(struct restorearg *ra, int len) int done = 0; /* some things will require 8-byte alignment, so everything must */ - ASSERT3U(len % 8, ==, 0); + ASSERT0(len % 8); while (done < len) { ssize_t resid; @@ -1638,7 +1638,7 @@ out: (void) add_ds_to_guidmap(drc->drc_guid_to_ds_map, ds); dsl_dataset_disown(ds, dmu_recv_tag); myerr = dsl_dataset_destroy(drc->drc_real_ds, dmu_recv_tag, B_FALSE); - ASSERT3U(myerr, ==, 0); + ASSERT0(myerr); return (err); } diff --git a/usr/src/uts/common/fs/zfs/dmu_traverse.c b/usr/src/uts/common/fs/zfs/dmu_traverse.c index a01c11bbab..34f19cdcbb 100644 --- a/usr/src/uts/common/fs/zfs/dmu_traverse.c +++ b/usr/src/uts/common/fs/zfs/dmu_traverse.c @@ -176,7 +176,7 @@ static void traverse_pause(traverse_data_t *td, const zbookmark_t *zb) { ASSERT(td->td_resume != NULL); - ASSERT3U(zb->zb_level, ==, 0); + ASSERT0(zb->zb_level); bcopy(zb, td->td_resume, sizeof (*td->td_resume)); } diff --git a/usr/src/uts/common/fs/zfs/dmu_tx.c b/usr/src/uts/common/fs/zfs/dmu_tx.c index 5e3971ad45..4af740441c 100644 --- a/usr/src/uts/common/fs/zfs/dmu_tx.c +++ b/usr/src/uts/common/fs/zfs/dmu_tx.c @@ -911,7 +911,7 @@ dmu_tx_try_assign(dmu_tx_t *tx, uint64_t txg_how) uint64_t memory, asize, fsize, usize; uint64_t towrite, tofree, tooverwrite, tounref, tohold, fudge; - ASSERT3U(tx->tx_txg, ==, 0); + ASSERT0(tx->tx_txg); if (tx->tx_err) return (tx->tx_err); diff --git a/usr/src/uts/common/fs/zfs/dnode.c b/usr/src/uts/common/fs/zfs/dnode.c index 05ccf9fc62..6838576dcf 100644 --- a/usr/src/uts/common/fs/zfs/dnode.c +++ b/usr/src/uts/common/fs/zfs/dnode.c @@ -137,32 +137,32 @@ dnode_dest(void *arg, void *unused) ASSERT(!list_link_active(&dn->dn_dirty_link[i])); avl_destroy(&dn->dn_ranges[i]); list_destroy(&dn->dn_dirty_records[i]); - ASSERT3U(dn->dn_next_nblkptr[i], ==, 0); - ASSERT3U(dn->dn_next_nlevels[i], ==, 0); - ASSERT3U(dn->dn_next_indblkshift[i], ==, 0); - ASSERT3U(dn->dn_next_bonustype[i], ==, 0); - ASSERT3U(dn->dn_rm_spillblk[i], ==, 0); - ASSERT3U(dn->dn_next_bonuslen[i], ==, 0); - ASSERT3U(dn->dn_next_blksz[i], ==, 0); + ASSERT0(dn->dn_next_nblkptr[i]); + ASSERT0(dn->dn_next_nlevels[i]); + ASSERT0(dn->dn_next_indblkshift[i]); + ASSERT0(dn->dn_next_bonustype[i]); + ASSERT0(dn->dn_rm_spillblk[i]); + ASSERT0(dn->dn_next_bonuslen[i]); + ASSERT0(dn->dn_next_blksz[i]); } - ASSERT3U(dn->dn_allocated_txg, ==, 0); - ASSERT3U(dn->dn_free_txg, ==, 0); - ASSERT3U(dn->dn_assigned_txg, ==, 0); - ASSERT3U(dn->dn_dirtyctx, ==, 0); + ASSERT0(dn->dn_allocated_txg); + ASSERT0(dn->dn_free_txg); + ASSERT0(dn->dn_assigned_txg); + ASSERT0(dn->dn_dirtyctx); ASSERT3P(dn->dn_dirtyctx_firstset, ==, NULL); ASSERT3P(dn->dn_bonus, ==, NULL); ASSERT(!dn->dn_have_spill); ASSERT3P(dn->dn_zio, ==, NULL); - ASSERT3U(dn->dn_oldused, ==, 0); - ASSERT3U(dn->dn_oldflags, ==, 0); - ASSERT3U(dn->dn_olduid, ==, 0); - ASSERT3U(dn->dn_oldgid, ==, 0); - ASSERT3U(dn->dn_newuid, ==, 0); - ASSERT3U(dn->dn_newgid, ==, 0); - ASSERT3U(dn->dn_id_flags, ==, 0); - - ASSERT3U(dn->dn_dbufs_count, ==, 0); + ASSERT0(dn->dn_oldused); + ASSERT0(dn->dn_oldflags); + ASSERT0(dn->dn_olduid); + ASSERT0(dn->dn_oldgid); + ASSERT0(dn->dn_newuid); + ASSERT0(dn->dn_newgid); + ASSERT0(dn->dn_id_flags); + + ASSERT0(dn->dn_dbufs_count); list_destroy(&dn->dn_dbufs); } @@ -361,7 +361,7 @@ dnode_rm_spill(dnode_t *dn, dmu_tx_t *tx) static void dnode_setdblksz(dnode_t *dn, int size) { - ASSERT3U(P2PHASE(size, SPA_MINBLOCKSIZE), ==, 0); + ASSERT0(P2PHASE(size, SPA_MINBLOCKSIZE)); ASSERT3U(size, <=, SPA_MAXBLOCKSIZE); ASSERT3U(size, >=, SPA_MINBLOCKSIZE); ASSERT3U(size >> SPA_MINBLOCKSHIFT, <, @@ -506,24 +506,24 @@ dnode_allocate(dnode_t *dn, dmu_object_type_t ot, int blocksize, int ibs, ASSERT(DMU_OT_IS_VALID(bonustype)); ASSERT3U(bonuslen, <=, DN_MAX_BONUSLEN); ASSERT(dn->dn_type == DMU_OT_NONE); - ASSERT3U(dn->dn_maxblkid, ==, 0); - ASSERT3U(dn->dn_allocated_txg, ==, 0); - ASSERT3U(dn->dn_assigned_txg, ==, 0); + ASSERT0(dn->dn_maxblkid); + ASSERT0(dn->dn_allocated_txg); + ASSERT0(dn->dn_assigned_txg); ASSERT(refcount_is_zero(&dn->dn_tx_holds)); ASSERT3U(refcount_count(&dn->dn_holds), <=, 1); ASSERT3P(list_head(&dn->dn_dbufs), ==, NULL); for (i = 0; i < TXG_SIZE; i++) { - ASSERT3U(dn->dn_next_nblkptr[i], ==, 0); - ASSERT3U(dn->dn_next_nlevels[i], ==, 0); - ASSERT3U(dn->dn_next_indblkshift[i], ==, 0); - ASSERT3U(dn->dn_next_bonuslen[i], ==, 0); - ASSERT3U(dn->dn_next_bonustype[i], ==, 0); - ASSERT3U(dn->dn_rm_spillblk[i], ==, 0); - ASSERT3U(dn->dn_next_blksz[i], ==, 0); + ASSERT0(dn->dn_next_nblkptr[i]); + ASSERT0(dn->dn_next_nlevels[i]); + ASSERT0(dn->dn_next_indblkshift[i]); + ASSERT0(dn->dn_next_bonuslen[i]); + ASSERT0(dn->dn_next_bonustype[i]); + ASSERT0(dn->dn_rm_spillblk[i]); + ASSERT0(dn->dn_next_blksz[i]); ASSERT(!list_link_active(&dn->dn_dirty_link[i])); ASSERT3P(list_head(&dn->dn_dirty_records[i]), ==, NULL); - ASSERT3U(avl_numnodes(&dn->dn_ranges[i]), ==, 0); + ASSERT0(avl_numnodes(&dn->dn_ranges[i])); } dn->dn_type = ot; @@ -565,7 +565,7 @@ dnode_reallocate(dnode_t *dn, dmu_object_type_t ot, int blocksize, ASSERT3U(blocksize, >=, SPA_MINBLOCKSIZE); ASSERT3U(blocksize, <=, SPA_MAXBLOCKSIZE); - ASSERT3U(blocksize % SPA_MINBLOCKSIZE, ==, 0); + ASSERT0(blocksize % SPA_MINBLOCKSIZE); ASSERT(dn->dn_object != DMU_META_DNODE_OBJECT || dmu_tx_private_ok(tx)); ASSERT(tx->tx_txg != 0); ASSERT((bonustype == DMU_OT_NONE && bonuslen == 0) || @@ -1235,9 +1235,9 @@ dnode_setdirty(dnode_t *dn, dmu_tx_t *tx) ASSERT(!refcount_is_zero(&dn->dn_holds) || list_head(&dn->dn_dbufs)); ASSERT(dn->dn_datablksz != 0); - ASSERT3U(dn->dn_next_bonuslen[txg&TXG_MASK], ==, 0); - ASSERT3U(dn->dn_next_blksz[txg&TXG_MASK], ==, 0); - ASSERT3U(dn->dn_next_bonustype[txg&TXG_MASK], ==, 0); + ASSERT0(dn->dn_next_bonuslen[txg&TXG_MASK]); + ASSERT0(dn->dn_next_blksz[txg&TXG_MASK]); + ASSERT0(dn->dn_next_bonustype[txg&TXG_MASK]); dprintf_ds(os->os_dsl_dataset, "obj=%llu txg=%llu\n", dn->dn_object, txg); @@ -1587,7 +1587,7 @@ dnode_free_range(dnode_t *dn, uint64_t off, uint64_t len, dmu_tx_t *tx) else tail = P2PHASE(len, blksz); - ASSERT3U(P2PHASE(off, blksz), ==, 0); + ASSERT0(P2PHASE(off, blksz)); /* zero out any partial block data at the end of the range */ if (tail) { if (len < tail) @@ -1769,7 +1769,7 @@ dnode_diduse_space(dnode_t *dn, int64_t delta) space += delta; if (spa_version(dn->dn_objset->os_spa) < SPA_VERSION_DNODE_BYTES) { ASSERT((dn->dn_phys->dn_flags & DNODE_FLAG_USED_BYTES) == 0); - ASSERT3U(P2PHASE(space, 1<dn_phys->dn_used = space >> DEV_BSHIFT; } else { dn->dn_phys->dn_used = space; diff --git a/usr/src/uts/common/fs/zfs/dnode_sync.c b/usr/src/uts/common/fs/zfs/dnode_sync.c index 8d817919b3..38dab665fc 100644 --- a/usr/src/uts/common/fs/zfs/dnode_sync.c +++ b/usr/src/uts/common/fs/zfs/dnode_sync.c @@ -274,7 +274,7 @@ free_children(dmu_buf_impl_t *db, uint64_t blkid, uint64_t nblks, int trunc, continue; rw_enter(&dn->dn_struct_rwlock, RW_READER); err = dbuf_hold_impl(dn, db->db_level-1, i, TRUE, FTAG, &subdb); - ASSERT3U(err, ==, 0); + ASSERT0(err); rw_exit(&dn->dn_struct_rwlock); if (free_children(subdb, blkid, nblks, trunc, tx) == ALL) { @@ -294,7 +294,7 @@ free_children(dmu_buf_impl_t *db, uint64_t blkid, uint64_t nblks, int trunc, continue; else if (i == end && !trunc) continue; - ASSERT3U(bp->blk_birth, ==, 0); + ASSERT0(bp->blk_birth); } #endif ASSERT(all || blocks_freed == 0 || db->db_last_dirty); @@ -350,7 +350,7 @@ dnode_sync_free_range(dnode_t *dn, uint64_t blkid, uint64_t nblks, dmu_tx_t *tx) continue; rw_enter(&dn->dn_struct_rwlock, RW_READER); err = dbuf_hold_impl(dn, dnlevel-1, i, TRUE, FTAG, &db); - ASSERT3U(err, ==, 0); + ASSERT0(err); rw_exit(&dn->dn_struct_rwlock); if (free_children(db, blkid, nblks, trunc, tx) == ALL) { @@ -471,7 +471,7 @@ dnode_sync_free(dnode_t *dn, dmu_tx_t *tx) * Our contents should have been freed in dnode_sync() by the * free range record inserted by the caller of dnode_free(). */ - ASSERT3U(DN_USED_BYTES(dn->dn_phys), ==, 0); + ASSERT0(DN_USED_BYTES(dn->dn_phys)); ASSERT(BP_IS_HOLE(dn->dn_phys->dn_blkptr)); dnode_undirty_dbufs(&dn->dn_dirty_records[txgoff]); diff --git a/usr/src/uts/common/fs/zfs/dsl_dataset.c b/usr/src/uts/common/fs/zfs/dsl_dataset.c index 4571fa8743..6625444e5a 100644 --- a/usr/src/uts/common/fs/zfs/dsl_dataset.c +++ b/usr/src/uts/common/fs/zfs/dsl_dataset.c @@ -1498,7 +1498,7 @@ remove_from_next_clones(dsl_dataset_t *ds, uint64_t obj, dmu_tx_t *tx) * remove this one. */ if (err != ENOENT) { - VERIFY3U(err, ==, 0); + VERIFY0(err); } ASSERT3U(0, ==, zap_count(mos, ds->ds_phys->ds_next_clones_obj, &count)); @@ -1585,7 +1585,7 @@ process_old_deadlist(dsl_dataset_t *ds, dsl_dataset_t *ds_prev, poa.pio = zio_root(dp->dp_spa, NULL, NULL, ZIO_FLAG_MUSTSUCCEED); VERIFY3U(0, ==, bpobj_iterate(&ds_next->ds_deadlist.dl_bpobj, process_old_cb, &poa, tx)); - VERIFY3U(zio_wait(poa.pio), ==, 0); + VERIFY0(zio_wait(poa.pio)); ASSERT3U(poa.used, ==, ds->ds_phys->ds_unique_bytes); /* change snapused */ @@ -1620,7 +1620,7 @@ old_synchronous_dataset_destroy(dsl_dataset_t *ds, dmu_tx_t *tx) err = traverse_dataset(ds, ds->ds_phys->ds_prev_snap_txg, TRAVERSE_POST, kill_blkptr, &ka); - ASSERT3U(err, ==, 0); + ASSERT0(err); ASSERT(!DS_UNIQUE_IS_ACCURATE(ds) || ds->ds_phys->ds_unique_bytes == 0); return (err); @@ -1676,7 +1676,7 @@ dsl_dataset_destroy_sync(void *arg1, void *tag, dmu_tx_t *tx) psa.psa_effective_value = 0; /* predict default value */ dsl_dataset_set_reservation_sync(ds, &psa, tx); - ASSERT3U(ds->ds_reserved, ==, 0); + ASSERT0(ds->ds_reserved); } ASSERT(RW_WRITE_HELD(&dp->dp_config_rwlock)); @@ -1943,7 +1943,7 @@ dsl_dataset_destroy_sync(void *arg1, void *tag, dmu_tx_t *tx) err = dsl_dataset_snap_lookup(ds_head, ds->ds_snapname, &val); - ASSERT3U(err, ==, 0); + ASSERT0(err); ASSERT3U(val, ==, obj); } #endif @@ -2437,13 +2437,13 @@ dsl_dataset_snapshot_rename_sync(void *arg1, void *arg2, dmu_tx_t *tx) VERIFY(0 == dsl_dataset_get_snapname(ds)); err = dsl_dataset_snap_remove(hds, ds->ds_snapname, tx); - ASSERT3U(err, ==, 0); + ASSERT0(err); mutex_enter(&ds->ds_lock); (void) strcpy(ds->ds_snapname, newsnapname); mutex_exit(&ds->ds_lock); err = zap_add(mos, hds->ds_phys->ds_snapnames_zapobj, ds->ds_snapname, 8, 1, &ds->ds_object, tx); - ASSERT3U(err, ==, 0); + ASSERT0(err); spa_history_log_internal_ds(ds, "rename", tx, "-> @%s", newsnapname); @@ -2897,7 +2897,7 @@ dsl_dataset_promote_sync(void *arg1, void *arg2, dmu_tx_t *tx) zap_cursor_fini(&zc); } - ASSERT3U(dsl_prop_numcb(ds), ==, 0); + ASSERT0(dsl_prop_numcb(ds)); } /* diff --git a/usr/src/uts/common/fs/zfs/dsl_dir.c b/usr/src/uts/common/fs/zfs/dsl_dir.c index e58260cdf4..df3f02b1df 100644 --- a/usr/src/uts/common/fs/zfs/dsl_dir.c +++ b/usr/src/uts/common/fs/zfs/dsl_dir.c @@ -492,10 +492,10 @@ dsl_dir_destroy_sync(void *arg1, void *tag, dmu_tx_t *tx) */ dsl_dir_set_reservation_sync_impl(dd, 0, tx); - ASSERT3U(dd->dd_phys->dd_used_bytes, ==, 0); - ASSERT3U(dd->dd_phys->dd_reserved, ==, 0); + ASSERT0(dd->dd_phys->dd_used_bytes); + ASSERT0(dd->dd_phys->dd_reserved); for (t = 0; t < DD_USED_NUM; t++) - ASSERT3U(dd->dd_phys->dd_used_breakdown[t], ==, 0); + ASSERT0(dd->dd_phys->dd_used_breakdown[t]); VERIFY(0 == zap_destroy(mos, dd->dd_phys->dd_child_dir_zapobj, tx)); VERIFY(0 == zap_destroy(mos, dd->dd_phys->dd_props_zapobj, tx)); @@ -584,7 +584,7 @@ dsl_dir_sync(dsl_dir_t *dd, dmu_tx_t *tx) ASSERT(dmu_tx_is_syncing(tx)); mutex_enter(&dd->dd_lock); - ASSERT3U(dd->dd_tempreserved[tx->tx_txg&TXG_MASK], ==, 0); + ASSERT0(dd->dd_tempreserved[tx->tx_txg&TXG_MASK]); dprintf_dd(dd, "txg=%llu towrite=%lluK\n", tx->tx_txg, dd->dd_space_towrite[tx->tx_txg&TXG_MASK] / 1024); dd->dd_space_towrite[tx->tx_txg&TXG_MASK] = 0; @@ -1326,7 +1326,7 @@ dsl_dir_rename_sync(void *arg1, void *arg2, dmu_tx_t *tx) /* remove from old parent zapobj */ err = zap_remove(mos, dd->dd_parent->dd_phys->dd_child_dir_zapobj, dd->dd_myname, tx); - ASSERT3U(err, ==, 0); + ASSERT0(err); (void) strcpy(dd->dd_myname, ra->mynewname); dsl_dir_close(dd->dd_parent, dd); @@ -1337,7 +1337,7 @@ dsl_dir_rename_sync(void *arg1, void *arg2, dmu_tx_t *tx) /* add to new parent zapobj */ err = zap_add(mos, ra->newparent->dd_phys->dd_child_dir_zapobj, dd->dd_myname, 8, 1, &dd->dd_object, tx); - ASSERT3U(err, ==, 0); + ASSERT0(err); } diff --git a/usr/src/uts/common/fs/zfs/dsl_pool.c b/usr/src/uts/common/fs/zfs/dsl_pool.c index c17deb68df..8ab6655b6f 100644 --- a/usr/src/uts/common/fs/zfs/dsl_pool.c +++ b/usr/src/uts/common/fs/zfs/dsl_pool.c @@ -264,7 +264,7 @@ dsl_pool_create(spa_t *spa, nvlist_t *zplprops, uint64_t txg) /* create the pool directory */ err = zap_create_claim(dp->dp_meta_objset, DMU_POOL_DIRECTORY_OBJECT, DMU_OT_OBJECT_DIRECTORY, DMU_OT_NONE, 0, tx); - ASSERT3U(err, ==, 0); + ASSERT0(err); /* Initialize scan structures */ VERIFY3U(0, ==, dsl_scan_init(dp, txg)); diff --git a/usr/src/uts/common/fs/zfs/dsl_synctask.c b/usr/src/uts/common/fs/zfs/dsl_synctask.c index 4e56d28d82..e2481281e0 100644 --- a/usr/src/uts/common/fs/zfs/dsl_synctask.c +++ b/usr/src/uts/common/fs/zfs/dsl_synctask.c @@ -163,7 +163,7 @@ dsl_sync_task_group_sync(dsl_sync_task_group_t *dstg, dmu_tx_t *tx) dsl_pool_t *dp = dstg->dstg_pool; uint64_t quota, used; - ASSERT3U(dstg->dstg_err, ==, 0); + ASSERT0(dstg->dstg_err); /* * Check for sufficient space. We just check against what's diff --git a/usr/src/uts/common/fs/zfs/metaslab.c b/usr/src/uts/common/fs/zfs/metaslab.c index 2f7c882c8c..9ccd5c04d3 100644 --- a/usr/src/uts/common/fs/zfs/metaslab.c +++ b/usr/src/uts/common/fs/zfs/metaslab.c @@ -769,7 +769,7 @@ metaslab_fini(metaslab_t *msp) for (int t = 0; t < TXG_DEFER_SIZE; t++) space_map_destroy(&msp->ms_defermap[t]); - ASSERT3S(msp->ms_deferspace, ==, 0); + ASSERT0(msp->ms_deferspace); mutex_exit(&msp->ms_lock); mutex_destroy(&msp->ms_lock); diff --git a/usr/src/uts/common/fs/zfs/spa.c b/usr/src/uts/common/fs/zfs/spa.c index 2bb6fac11a..d9cd70f1c8 100644 --- a/usr/src/uts/common/fs/zfs/spa.c +++ b/usr/src/uts/common/fs/zfs/spa.c @@ -5027,7 +5027,7 @@ spa_vdev_remove_evacuate(spa_t *spa, vdev_t *vd) * The evacuation succeeded. Remove any remaining MOS metadata * associated with this vdev, and wait for these changes to sync. */ - ASSERT3U(vd->vdev_stat.vs_alloc, ==, 0); + ASSERT0(vd->vdev_stat.vs_alloc); txg = spa_vdev_config_enter(spa); vd->vdev_removing = B_TRUE; vdev_dirty(vd, 0, NULL, txg); @@ -6019,7 +6019,7 @@ spa_sync(spa_t *spa, uint64_t txg) zio_t *zio = zio_root(spa, NULL, NULL, 0); VERIFY3U(bpobj_iterate(defer_bpo, spa_free_sync_cb, zio, tx), ==, 0); - VERIFY3U(zio_wait(zio), ==, 0); + VERIFY0(zio_wait(zio)); } /* diff --git a/usr/src/uts/common/fs/zfs/space_map.c b/usr/src/uts/common/fs/zfs/space_map.c index 1ce7b2a3d4..20c997385a 100644 --- a/usr/src/uts/common/fs/zfs/space_map.c +++ b/usr/src/uts/common/fs/zfs/space_map.c @@ -22,6 +22,9 @@ * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ #include #include @@ -73,7 +76,7 @@ void space_map_destroy(space_map_t *sm) { ASSERT(!sm->sm_loaded && !sm->sm_loading); - VERIFY3U(sm->sm_space, ==, 0); + VERIFY0(sm->sm_space); avl_destroy(&sm->sm_root); cv_destroy(&sm->sm_load_cv); } @@ -286,7 +289,7 @@ space_map_load(space_map_t *sm, space_map_ops_t *ops, uint8_t maptype, space = smo->smo_alloc; ASSERT(sm->sm_ops == NULL); - VERIFY3U(sm->sm_space, ==, 0); + VERIFY0(sm->sm_space); if (maptype == SM_FREE) { space_map_add(sm, sm->sm_start, sm->sm_size); @@ -475,7 +478,7 @@ space_map_sync(space_map_t *sm, uint8_t maptype, zio_buf_free(entry_map, bufsize); - VERIFY3U(sm->sm_space, ==, 0); + VERIFY0(sm->sm_space); } void diff --git a/usr/src/uts/common/fs/zfs/vdev.c b/usr/src/uts/common/fs/zfs/vdev.c index 0b8e073f90..fa0a579e66 100644 --- a/usr/src/uts/common/fs/zfs/vdev.c +++ b/usr/src/uts/common/fs/zfs/vdev.c @@ -592,9 +592,9 @@ vdev_free(vdev_t *vd) metaslab_group_destroy(vd->vdev_mg); } - ASSERT3U(vd->vdev_stat.vs_space, ==, 0); - ASSERT3U(vd->vdev_stat.vs_dspace, ==, 0); - ASSERT3U(vd->vdev_stat.vs_alloc, ==, 0); + ASSERT0(vd->vdev_stat.vs_space); + ASSERT0(vd->vdev_stat.vs_dspace); + ASSERT0(vd->vdev_stat.vs_alloc); /* * Remove this vdev from its parent's child list. @@ -1805,7 +1805,7 @@ vdev_dtl_sync(vdev_t *vd, uint64_t txg) if (vd->vdev_detached) { if (smo->smo_object != 0) { int err = dmu_object_free(mos, smo->smo_object, tx); - ASSERT3U(err, ==, 0); + ASSERT0(err); smo->smo_object = 0; } dmu_tx_commit(tx); @@ -2005,7 +2005,7 @@ vdev_remove(vdev_t *vd, uint64_t txg) tx = dmu_tx_create_assigned(spa_get_dsl(spa), txg); if (vd->vdev_dtl_smo.smo_object) { - ASSERT3U(vd->vdev_dtl_smo.smo_alloc, ==, 0); + ASSERT0(vd->vdev_dtl_smo.smo_alloc); (void) dmu_object_free(mos, vd->vdev_dtl_smo.smo_object, tx); vd->vdev_dtl_smo.smo_object = 0; } @@ -2017,7 +2017,7 @@ vdev_remove(vdev_t *vd, uint64_t txg) if (msp == NULL || msp->ms_smo.smo_object == 0) continue; - ASSERT3U(msp->ms_smo.smo_alloc, ==, 0); + ASSERT0(msp->ms_smo.smo_alloc); (void) dmu_object_free(mos, msp->ms_smo.smo_object, tx); msp->ms_smo.smo_object = 0; } @@ -2295,7 +2295,7 @@ top: (void) spa_vdev_state_exit(spa, vd, 0); goto top; } - ASSERT3U(tvd->vdev_stat.vs_alloc, ==, 0); + ASSERT0(tvd->vdev_stat.vs_alloc); } /* diff --git a/usr/src/uts/common/fs/zfs/vdev_raidz.c b/usr/src/uts/common/fs/zfs/vdev_raidz.c index 030ea42930..efae534257 100644 --- a/usr/src/uts/common/fs/zfs/vdev_raidz.c +++ b/usr/src/uts/common/fs/zfs/vdev_raidz.c @@ -281,7 +281,7 @@ vdev_raidz_map_free_vsd(zio_t *zio) { raidz_map_t *rm = zio->io_vsd; - ASSERT3U(rm->rm_freed, ==, 0); + ASSERT0(rm->rm_freed); rm->rm_freed = 1; if (rm->rm_reports == 0) @@ -1134,7 +1134,7 @@ vdev_raidz_matrix_invert(raidz_map_t *rm, int n, int nmissing, int *missing, */ for (i = 0; i < nmissing; i++) { for (j = 0; j < missing[i]; j++) { - ASSERT3U(rows[i][j], ==, 0); + ASSERT0(rows[i][j]); } ASSERT3U(rows[i][missing[i]], !=, 0); @@ -1175,7 +1175,7 @@ vdev_raidz_matrix_invert(raidz_map_t *rm, int n, int nmissing, int *missing, if (j == missing[i]) { ASSERT3U(rows[i][j], ==, 1); } else { - ASSERT3U(rows[i][j], ==, 0); + ASSERT0(rows[i][j]); } } } diff --git a/usr/src/uts/common/fs/zfs/zap.c b/usr/src/uts/common/fs/zfs/zap.c index c22f2ce673..009f0a4dd6 100644 --- a/usr/src/uts/common/fs/zfs/zap.c +++ b/usr/src/uts/common/fs/zfs/zap.c @@ -162,7 +162,7 @@ zap_table_grow(zap_t *zap, zap_table_phys_t *tbl, } else { newblk = zap_allocate_blocks(zap, tbl->zt_numblks * 2); tbl->zt_nextblk = newblk; - ASSERT3U(tbl->zt_blks_copied, ==, 0); + ASSERT0(tbl->zt_blks_copied); dmu_prefetch(zap->zap_objset, zap->zap_object, tbl->zt_blk << bs, tbl->zt_numblks << bs); } @@ -339,7 +339,7 @@ zap_grow_ptrtbl(zap_t *zap, dmu_tx_t *tx) ASSERT3U(zap->zap_f.zap_phys->zap_ptrtbl.zt_shift, ==, ZAP_EMBEDDED_PTRTBL_SHIFT(zap)); - ASSERT3U(zap->zap_f.zap_phys->zap_ptrtbl.zt_blk, ==, 0); + ASSERT0(zap->zap_f.zap_phys->zap_ptrtbl.zt_blk); newblk = zap_allocate_blocks(zap, 1); err = dmu_buf_hold(zap->zap_objset, zap->zap_object, @@ -475,7 +475,7 @@ zap_open_leaf(uint64_t blkid, dmu_buf_t *db) * chain. There should be no chained leafs (as we have removed * support for them). */ - ASSERT3U(l->l_phys->l_hdr.lh_pad1, ==, 0); + ASSERT0(l->l_phys->l_hdr.lh_pad1); /* * There should be more hash entries than there can be @@ -658,9 +658,9 @@ zap_expand_leaf(zap_name_t *zn, zap_leaf_t *l, dmu_tx_t *tx, zap_leaf_t **lp) zap_leaf_split(l, nl, zap->zap_normflags != 0); /* set sibling pointers */ - for (i = 0; i < (1ULL<l_blkid, tx); - ASSERT3U(err, ==, 0); /* we checked for i/o errors above */ + ASSERT0(err); /* we checked for i/o errors above */ } if (hash & (1ULL << (64 - l->l_phys->l_hdr.lh_prefix_len))) { diff --git a/usr/src/uts/common/fs/zfs/zap_micro.c b/usr/src/uts/common/fs/zfs/zap_micro.c index 3e80fb9c5d..62ea8a63b9 100644 --- a/usr/src/uts/common/fs/zfs/zap_micro.c +++ b/usr/src/uts/common/fs/zfs/zap_micro.c @@ -506,7 +506,7 @@ zap_lockdir(objset_t *os, uint64_t obj, dmu_tx_t *tx, return (mzap_upgrade(zapp, tx, 0)); } err = dmu_object_set_blocksize(os, obj, newsz, 0, tx); - ASSERT3U(err, ==, 0); + ASSERT0(err); zap->zap_m.zap_num_chunks = db->db_size / MZAP_ENT_LEN - 1; } diff --git a/usr/src/uts/common/fs/zfs/zfs_debug.c b/usr/src/uts/common/fs/zfs/zfs_debug.c index d0f411a993..44824e15a0 100644 --- a/usr/src/uts/common/fs/zfs/zfs_debug.c +++ b/usr/src/uts/common/fs/zfs/zfs_debug.c @@ -20,6 +20,7 @@ */ /* * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 by Delphix. All rights reserved. */ #include @@ -48,12 +49,12 @@ zfs_dbgmsg_fini(void) zfs_dbgmsg_size -= size; } mutex_destroy(&zfs_dbgmsgs_lock); - ASSERT3U(zfs_dbgmsg_size, ==, 0); + ASSERT0(zfs_dbgmsg_size); } /* * Print these messages by running: - * echo ::zfs_dbgmsg | mdb -k + * echo ::zfs_dbgmsg | mdb -k * * Monitor these messages by running: * dtrace -q -n 'zfs-dbgmsg{printf("%s\n", stringof(arg0))}' diff --git a/usr/src/uts/common/fs/zfs/zfs_ioctl.c b/usr/src/uts/common/fs/zfs/zfs_ioctl.c index b45ee7476e..723d516552 100644 --- a/usr/src/uts/common/fs/zfs/zfs_ioctl.c +++ b/usr/src/uts/common/fs/zfs/zfs_ioctl.c @@ -1958,7 +1958,7 @@ zfs_ioc_objset_stats_impl(zfs_cmd_t *zc, objset_t *os) error = zvol_get_stats(os, nv); if (error == EIO) return (error); - VERIFY3S(error, ==, 0); + VERIFY0(error); } error = put_nvlist(zc, nv); nvlist_free(nv); diff --git a/usr/src/uts/common/fs/zfs/zfs_rlock.c b/usr/src/uts/common/fs/zfs/zfs_rlock.c index 7fd8f6020d..08f88b80de 100644 --- a/usr/src/uts/common/fs/zfs/zfs_rlock.c +++ b/usr/src/uts/common/fs/zfs/zfs_rlock.c @@ -22,6 +22,9 @@ * Copyright 2010 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ /* * This file contains the code to implement file range locking in @@ -481,9 +484,9 @@ zfs_range_unlock_reader(znode_t *zp, rl_t *remove) cv_destroy(&remove->r_rd_cv); } } else { - ASSERT3U(remove->r_cnt, ==, 0); - ASSERT3U(remove->r_write_wanted, ==, 0); - ASSERT3U(remove->r_read_wanted, ==, 0); + ASSERT0(remove->r_cnt); + ASSERT0(remove->r_write_wanted); + ASSERT0(remove->r_read_wanted); /* * Find start proxy representing this reader lock, * then decrement ref count on all proxies diff --git a/usr/src/uts/common/fs/zfs/zfs_vfsops.c b/usr/src/uts/common/fs/zfs/zfs_vfsops.c index 8c3e9b093b..1552ff03c6 100644 --- a/usr/src/uts/common/fs/zfs/zfs_vfsops.c +++ b/usr/src/uts/common/fs/zfs/zfs_vfsops.c @@ -2243,7 +2243,7 @@ zfs_set_version(zfsvfs_t *zfsvfs, uint64_t newvers) error = zap_add(os, MASTER_NODE_OBJ, ZFS_SA_ATTRS, 8, 1, &sa_obj, tx); - ASSERT3U(error, ==, 0); + ASSERT0(error); VERIFY(0 == sa_set_sa_object(os, sa_obj)); sa_register_update_callback(os, zfs_sa_upgrade); diff --git a/usr/src/uts/common/fs/zfs/zfs_vnops.c b/usr/src/uts/common/fs/zfs/zfs_vnops.c index 0c39274caf..c5d8ad7f45 100644 --- a/usr/src/uts/common/fs/zfs/zfs_vnops.c +++ b/usr/src/uts/common/fs/zfs/zfs_vnops.c @@ -20,6 +20,7 @@ */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 by Delphix. All rights reserved. */ /* Portions Copyright 2007 Jeremy Teo */ @@ -1641,7 +1642,7 @@ top: &xattr_obj, sizeof (xattr_obj)); if (error == 0 && xattr_obj) { error = zfs_zget(zfsvfs, xattr_obj, &xzp); - ASSERT3U(error, ==, 0); + ASSERT0(error); dmu_tx_hold_sa(tx, zp->z_sa_hdl, B_TRUE); dmu_tx_hold_sa(tx, xzp->z_sa_hdl, B_FALSE); } @@ -1719,11 +1720,11 @@ top: error = sa_update(zp->z_sa_hdl, SA_ZPL_XATTR(zfsvfs), &null_xattr, sizeof (uint64_t), tx); - ASSERT3U(error, ==, 0); + ASSERT0(error); } mutex_enter(&vp->v_lock); vp->v_count--; - ASSERT3U(vp->v_count, ==, 0); + ASSERT0(vp->v_count); mutex_exit(&vp->v_lock); mutex_exit(&zp->z_lock); zfs_znode_delete(zp, tx); @@ -3096,7 +3097,7 @@ top: zp->z_mode = new_mode; ASSERT3U((uintptr_t)aclp, !=, NULL); err = zfs_aclset_common(zp, aclp, cr, tx); - ASSERT3U(err, ==, 0); + ASSERT0(err); if (zp->z_acl_cached) zfs_acl_free(zp->z_acl_cached); zp->z_acl_cached = aclp; @@ -3619,7 +3620,7 @@ top: error = sa_update(szp->z_sa_hdl, SA_ZPL_FLAGS(zfsvfs), (void *)&szp->z_pflags, sizeof (uint64_t), tx); - ASSERT3U(error, ==, 0); + ASSERT0(error); error = zfs_link_destroy(sdl, szp, tx, ZRENAMING, NULL); if (error == 0) { diff --git a/usr/src/uts/common/fs/zfs/zfs_znode.c b/usr/src/uts/common/fs/zfs/zfs_znode.c index 12639a44a9..0c86cac427 100644 --- a/usr/src/uts/common/fs/zfs/zfs_znode.c +++ b/usr/src/uts/common/fs/zfs/zfs_znode.c @@ -20,6 +20,7 @@ */ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012 by Delphix. All rights reserved. */ /* Portions Copyright 2007 Jeremy Teo */ @@ -806,7 +807,7 @@ zfs_mknode(znode_t *dzp, vattr_t *vap, dmu_tx_t *tx, cred_t *cr, err = zap_create_claim_norm(zfsvfs->z_os, obj, zfsvfs->z_norm, DMU_OT_DIRECTORY_CONTENTS, obj_type, bonuslen, tx); - ASSERT3U(err, ==, 0); + ASSERT0(err); } else { obj = zap_create_norm(zfsvfs->z_os, zfsvfs->z_norm, DMU_OT_DIRECTORY_CONTENTS, @@ -817,7 +818,7 @@ zfs_mknode(znode_t *dzp, vattr_t *vap, dmu_tx_t *tx, cred_t *cr, err = dmu_object_claim(zfsvfs->z_os, obj, DMU_OT_PLAIN_FILE_CONTENTS, 0, obj_type, bonuslen, tx); - ASSERT3U(err, ==, 0); + ASSERT0(err); } else { obj = dmu_object_alloc(zfsvfs->z_os, DMU_OT_PLAIN_FILE_CONTENTS, 0, @@ -999,7 +1000,7 @@ zfs_mknode(znode_t *dzp, vattr_t *vap, dmu_tx_t *tx, cred_t *cr, if (obj_type == DMU_OT_ZNODE || acl_ids->z_aclp->z_version < ZFS_ACL_VERSION_FUID) { err = zfs_aclset_common(*zpp, acl_ids->z_aclp, cr, tx); - ASSERT3P(err, ==, 0); + ASSERT0(err); } ZFS_OBJ_HOLD_EXIT(zfsvfs, obj); } @@ -1420,7 +1421,7 @@ zfs_grow_blocksize(znode_t *zp, uint64_t size, dmu_tx_t *tx) if (error == ENOTSUP) return; - ASSERT3U(error, ==, 0); + ASSERT0(error); /* What blocksize did we actually get? */ dmu_object_size_from_db(sa_get_db(zp->z_sa_hdl), &zp->z_blksz, &dummy); diff --git a/usr/src/uts/common/fs/zfs/zil.c b/usr/src/uts/common/fs/zfs/zil.c index 0ae4c22d3a..969723471e 100644 --- a/usr/src/uts/common/fs/zfs/zil.c +++ b/usr/src/uts/common/fs/zfs/zil.c @@ -1102,7 +1102,7 @@ zil_lwb_commit(zilog_t *zilog, itx_t *itx, lwb_t *lwb) lwb->lwb_nused += reclen + dlen; lwb->lwb_max_txg = MAX(lwb->lwb_max_txg, txg); ASSERT3U(lwb->lwb_nused, <=, lwb->lwb_sz); - ASSERT3U(P2PHASE(lwb->lwb_nused, sizeof (uint64_t)), ==, 0); + ASSERT0(P2PHASE(lwb->lwb_nused, sizeof (uint64_t))); return (lwb); } diff --git a/usr/src/uts/common/fs/zfs/zio.c b/usr/src/uts/common/fs/zfs/zio.c index 33807a1a16..88684b9ce3 100644 --- a/usr/src/uts/common/fs/zfs/zio.c +++ b/usr/src/uts/common/fs/zfs/zio.c @@ -2148,7 +2148,7 @@ zio_dva_allocate(zio_t *zio) } ASSERT(BP_IS_HOLE(bp)); - ASSERT3U(BP_GET_NDVAS(bp), ==, 0); + ASSERT0(BP_GET_NDVAS(bp)); ASSERT3U(zio->io_prop.zp_copies, >, 0); ASSERT3U(zio->io_prop.zp_copies, <=, spa_max_replication(spa)); ASSERT3U(zio->io_size, ==, BP_GET_PSIZE(bp)); diff --git a/usr/src/uts/common/sys/debug.h b/usr/src/uts/common/sys/debug.h index 4de39d255e..85b8ab5f90 100644 --- a/usr/src/uts/common/sys/debug.h +++ b/usr/src/uts/common/sys/debug.h @@ -23,6 +23,10 @@ * Use is subject to license terms. */ +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */ @@ -114,14 +118,18 @@ _NOTE(CONSTCOND) } while (0) #define VERIFY3S(x, y, z) VERIFY3_IMPL(x, y, z, int64_t) #define VERIFY3U(x, y, z) VERIFY3_IMPL(x, y, z, uint64_t) #define VERIFY3P(x, y, z) VERIFY3_IMPL(x, y, z, uintptr_t) +#define VERIFY0(x) VERIFY3_IMPL(x, ==, 0, uintmax_t) + #if DEBUG #define ASSERT3S(x, y, z) VERIFY3_IMPL(x, y, z, int64_t) #define ASSERT3U(x, y, z) VERIFY3_IMPL(x, y, z, uint64_t) #define ASSERT3P(x, y, z) VERIFY3_IMPL(x, y, z, uintptr_t) +#define ASSERT0(x) VERIFY3_IMPL(x, ==, 0, uintmax_t) #else #define ASSERT3S(x, y, z) ((void)0) #define ASSERT3U(x, y, z) ((void)0) #define ASSERT3P(x, y, z) ((void)0) +#define ASSERT0(x) ((void)0) #endif #ifdef _KERNEL -- cgit v1.2.3 From 70f56fa69343b013f47e010537cff8ef3a7a40a5 Mon Sep 17 00:00:00 2001 From: Yuri Pankov Date: Sun, 9 Sep 2012 11:37:20 -0500 Subject: 3098 zfs userspace/groupspace fail without saying why when run as non-root Reviewed by: Eric Schrock Approved by: Richard Lowe --- usr/src/cmd/zfs/zfs_main.c | 19 +++++++++---------- usr/src/lib/libzfs/common/libzfs_dataset.c | 29 +++++++++++++++++------------ 2 files changed, 26 insertions(+), 22 deletions(-) (limited to 'usr/src/lib') diff --git a/usr/src/cmd/zfs/zfs_main.c b/usr/src/cmd/zfs/zfs_main.c index 28a808ab53..a59d45eced 100644 --- a/usr/src/cmd/zfs/zfs_main.c +++ b/usr/src/cmd/zfs/zfs_main.c @@ -2288,10 +2288,8 @@ userspace_cb(void *arg, const char *domain, uid_t rid, uint64_t space) if (!cb->cb_sid2posix) { e = directory_name_from_sid(NULL, sid, &name, &classes); - if (e != NULL) { + if (e != NULL) directory_error_free(e); - return (1); - } if (name == NULL) name = sid; } @@ -2534,7 +2532,7 @@ zfs_do_userspace(int argc, char **argv) boolean_t prtnum = B_FALSE; boolean_t parsable = B_FALSE; boolean_t sid2posix = B_FALSE; - int error = 0; + int ret = 0; int c; zfs_sort_column_t *sortcol = NULL; int types = USTYPE_PSX_USR | USTYPE_SMB_USR; @@ -2679,18 +2677,19 @@ zfs_do_userspace(int argc, char **argv) !(types & (USTYPE_PSX_GRP | USTYPE_SMB_GRP)))) continue; cb.cb_prop = p; - error = zfs_userspace(zhp, p, userspace_cb, &cb); - if (error) - break; + if ((ret = zfs_userspace(zhp, p, userspace_cb, &cb)) != 0) + return (ret); } /* Sort the list */ + if ((node = uu_avl_first(avl_tree)) == NULL) + return (0); + us_populated = B_TRUE; + listpool = uu_list_pool_create("tmplist", sizeof (us_node_t), offsetof(us_node_t, usn_listnode), NULL, UU_DEFAULT); list = uu_list_create(listpool, NULL, UU_DEFAULT); - - node = uu_avl_first(avl_tree); uu_list_node_init(node, &node->usn_listnode, listpool); while (node != NULL) { @@ -2731,7 +2730,7 @@ zfs_do_userspace(int argc, char **argv) uu_avl_destroy(avl_tree); uu_avl_pool_destroy(avl_pool); - return (error); + return (ret); } /* diff --git a/usr/src/lib/libzfs/common/libzfs_dataset.c b/usr/src/lib/libzfs/common/libzfs_dataset.c index 809e203b68..35d27d9d1f 100644 --- a/usr/src/lib/libzfs/common/libzfs_dataset.c +++ b/usr/src/lib/libzfs/common/libzfs_dataset.c @@ -21,9 +21,9 @@ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. - * Copyright 2010 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2012 by Delphix. All rights reserved. * Copyright (c) 2012 DEY Storage Systems, Inc. All rights reserved. + * Copyright 2012 Nexenta Systems, Inc. All rights reserved. */ #include @@ -4023,35 +4023,40 @@ zfs_userspace(zfs_handle_t *zhp, zfs_userquota_prop_t type, zfs_userspace_cb_t func, void *arg) { zfs_cmd_t zc = { 0 }; - int error; zfs_useracct_t buf[100]; + libzfs_handle_t *hdl = zhp->zfs_hdl; + int ret; (void) strlcpy(zc.zc_name, zhp->zfs_name, sizeof (zc.zc_name)); zc.zc_objset_type = type; zc.zc_nvlist_dst = (uintptr_t)buf; - /* CONSTCOND */ - while (1) { + for (;;) { zfs_useracct_t *zua = buf; zc.zc_nvlist_dst_size = sizeof (buf); - error = ioctl(zhp->zfs_hdl->libzfs_fd, - ZFS_IOC_USERSPACE_MANY, &zc); - if (error || zc.zc_nvlist_dst_size == 0) + if (zfs_ioctl(hdl, ZFS_IOC_USERSPACE_MANY, &zc) != 0) { + char errbuf[ZFS_MAXNAMELEN + 32]; + + (void) snprintf(errbuf, sizeof (errbuf), + dgettext(TEXT_DOMAIN, + "cannot get used/quota for %s"), zc.zc_name); + return (zfs_standard_error_fmt(hdl, errno, errbuf)); + } + if (zc.zc_nvlist_dst_size == 0) break; while (zc.zc_nvlist_dst_size > 0) { - error = func(arg, zua->zu_domain, zua->zu_rid, - zua->zu_space); - if (error != 0) - return (error); + if ((ret = func(arg, zua->zu_domain, zua->zu_rid, + zua->zu_space)) != 0) + return (ret); zua++; zc.zc_nvlist_dst_size -= sizeof (zfs_useracct_t); } } - return (error); + return (0); } int -- cgit v1.2.3