Fix gcc missing parenthesis warnings
[zfs.git] / module / zfs / dsl_deleg.c
index 85490c8..4d7ec80 100644 (file)
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
  */
 
 /*
@@ -96,13 +96,13 @@ dsl_deleg_can_allow(char *ddname, nvlist_t *nvp, cred_t *cr)
        if ((error = dsl_deleg_access(ddname, ZFS_DELEG_PERM_ALLOW, cr)) != 0)
                return (error);
 
-       while (whopair = nvlist_next_nvpair(nvp, whopair)) {
+       while ((whopair = nvlist_next_nvpair(nvp, whopair))) {
                nvlist_t *perms;
                nvpair_t *permpair = NULL;
 
                VERIFY(nvpair_value_nvlist(whopair, &perms) == 0);
 
-               while (permpair = nvlist_next_nvpair(perms, permpair)) {
+               while ((permpair = nvlist_next_nvpair(perms, permpair))) {
                        const char *perm = nvpair_name(permpair);
 
                        if (strcmp(perm, ZFS_DELEG_PERM_ALLOW) == 0)
@@ -133,7 +133,7 @@ dsl_deleg_can_unallow(char *ddname, nvlist_t *nvp, cred_t *cr)
        (void) snprintf(idstr, sizeof (idstr), "%lld",
            (longlong_t)crgetuid(cr));
 
-       while (whopair = nvlist_next_nvpair(nvp, whopair)) {
+       while ((whopair = nvlist_next_nvpair(nvp, whopair))) {
                zfs_deleg_who_type_t type = nvpair_name(whopair)[0];
 
                if (type != ZFS_DELEG_USER &&
@@ -161,7 +161,7 @@ dsl_deleg_set_sync(void *arg1, void *arg2, dmu_tx_t *tx)
                    DMU_OT_DSL_PERMS, DMU_OT_NONE, 0, tx);
        }
 
-       while (whopair = nvlist_next_nvpair(nvp, whopair)) {
+       while ((whopair = nvlist_next_nvpair(nvp, whopair))) {
                const char *whokey = nvpair_name(whopair);
                nvlist_t *perms;
                nvpair_t *permpair = NULL;
@@ -176,7 +176,7 @@ dsl_deleg_set_sync(void *arg1, void *arg2, dmu_tx_t *tx)
                            whokey, 8, 1, &jumpobj, tx) == 0);
                }
 
-               while (permpair = nvlist_next_nvpair(perms, permpair)) {
+               while ((permpair = nvlist_next_nvpair(perms, permpair))) {
                        const char *perm = nvpair_name(permpair);
                        uint64_t n = 0;
 
@@ -202,7 +202,7 @@ dsl_deleg_unset_sync(void *arg1, void *arg2, dmu_tx_t *tx)
        if (zapobj == 0)
                return;
 
-       while (whopair = nvlist_next_nvpair(nvp, whopair)) {
+       while ((whopair = nvlist_next_nvpair(nvp, whopair))) {
                const char *whokey = nvpair_name(whopair);
                nvlist_t *perms;
                nvpair_t *permpair = NULL;
@@ -224,7 +224,7 @@ dsl_deleg_unset_sync(void *arg1, void *arg2, dmu_tx_t *tx)
                if (zap_lookup(mos, zapobj, whokey, 8, 1, &jumpobj) != 0)
                        continue;
 
-               while (permpair = nvlist_next_nvpair(perms, permpair)) {
+               while ((permpair = nvlist_next_nvpair(perms, permpair))) {
                        const char *perm = nvpair_name(permpair);
                        uint64_t n = 0;
 
@@ -261,7 +261,7 @@ dsl_deleg_set(const char *ddname, nvlist_t *nvp, boolean_t unset)
                return (ENOTSUP);
        }
 
-       while (whopair = nvlist_next_nvpair(nvp, whopair))
+       while ((whopair = nvlist_next_nvpair(nvp, whopair)))
                blocks_modified++;
 
        error = dsl_sync_task_do(dd->dd_pool, NULL,
@@ -528,9 +528,8 @@ dsl_load_user_sets(objset_t *mos, uint64_t zapobj, avl_tree_t *avl,
  * Check if user has requested permission.
  */
 int
-dsl_deleg_access(const char *dsname, const char *perm, cred_t *cr)
+dsl_deleg_access_impl(dsl_dataset_t *ds, const char *perm, cred_t *cr)
 {
-       dsl_dataset_t *ds;
        dsl_dir_t *dd;
        dsl_pool_t *dp;
        void *cookie;
@@ -540,23 +539,15 @@ dsl_deleg_access(const char *dsname, const char *perm, cred_t *cr)
        avl_tree_t permsets;
        perm_set_t *setnode;
 
-       error = dsl_dataset_hold(dsname, FTAG, &ds);
-       if (error)
-               return (error);
-
        dp = ds->ds_dir->dd_pool;
        mos = dp->dp_meta_objset;
 
-       if (dsl_delegation_on(mos) == B_FALSE) {
-               dsl_dataset_rele(ds, FTAG);
+       if (dsl_delegation_on(mos) == B_FALSE)
                return (ECANCELED);
-       }
 
        if (spa_version(dmu_objset_spa(dp->dp_meta_objset)) <
-           SPA_VERSION_DELEGATED_PERMS) {
-               dsl_dataset_rele(ds, FTAG);
+           SPA_VERSION_DELEGATED_PERMS)
                return (EPERM);
-       }
 
        if (dsl_dataset_is_snapshot(ds)) {
                /*
@@ -633,7 +624,6 @@ again:
        error = EPERM;
 success:
        rw_exit(&dp->dp_config_rwlock);
-       dsl_dataset_rele(ds, FTAG);
 
        cookie = NULL;
        while ((setnode = avl_destroy_nodes(&permsets, &cookie)) != NULL)
@@ -642,6 +632,22 @@ success:
        return (error);
 }
 
+int
+dsl_deleg_access(const char *dsname, const char *perm, cred_t *cr)
+{
+       dsl_dataset_t *ds;
+       int error;
+
+       error = dsl_dataset_hold(dsname, FTAG, &ds);
+       if (error)
+               return (error);
+
+       error = dsl_deleg_access_impl(ds, perm, cr);
+       dsl_dataset_rele(ds, FTAG);
+
+       return (error);
+}
+
 /*
  * Other routines.
  */