Leaf vdevs should not be reopened
[zfs.git] / module / zfs / zap.c
index 59f62fa..a6c8c82 100644 (file)
@@ -1094,6 +1094,16 @@ zap_add_int_key(objset_t *os, uint64_t obj,
 }
 
 int
+zap_update_int_key(objset_t *os, uint64_t obj,
+    uint64_t key, uint64_t value, dmu_tx_t *tx)
+{
+       char name[20];
+
+       (void) snprintf(name, sizeof (name), "%llx", (longlong_t)key);
+       return (zap_update(os, obj, name, 8, 1, &value, tx));
+}
+
+int
 zap_lookup_int_key(objset_t *os, uint64_t obj, uint64_t key, uint64_t *valuep)
 {
        char name[20];
@@ -1247,13 +1257,13 @@ fzap_cursor_move_to_key(zap_cursor_t *zc, zap_name_t *zn)
                return (err);
 
        err = zap_leaf_lookup(l, zn, &zeh);
-       if (err != 0)
-               return (err);
-
-       zc->zc_leaf = l;
-       zc->zc_hash = zeh.zeh_hash;
-       zc->zc_cd = zeh.zeh_cd;
+       if (err == 0) {
+               zc->zc_leaf = l;
+               zc->zc_hash = zeh.zeh_hash;
+               zc->zc_cd = zeh.zeh_cd;
+       }
 
+       rw_exit(&l->l_rwlock);
        return (err);
 }