Print this page
5045 use atomic_{inc,dec}_* instead of atomic_add_*


 621                 ilb_conn_hash_init(ilbs);
 622                 ilb_nat_src_init(ilbs);
 623         }
 624 
 625         /* Make sure that the new rule does not duplicate an existing one. */
 626         if (ilb_match_rule(ilbs, zoneid, cmd->name, cmd->ip_ver, cmd->proto,
 627             min_port, max_port, &cmd->vip)) {
 628                 mutex_exit(&ilbs->ilbs_g_lock);
 629                 return (EEXIST);
 630         }
 631 
 632         rule = kmem_zalloc(sizeof (ilb_rule_t), KM_NOSLEEP);
 633         if (rule == NULL) {
 634                 mutex_exit(&ilbs->ilbs_g_lock);
 635                 return (ENOMEM);
 636         }
 637 
 638         /* ir_name is all 0 to begin with */
 639         (void) memcpy(rule->ir_name, cmd->name, ILB_RULE_NAMESZ - 1);
 640 
 641         rule->ir_ks_instance = atomic_add_int_nv(&ilb_kstat_instance, 1);
 642         stackid = (netstackid_t)(uintptr_t)ilbs->ilbs_ksp->ks_private;
 643         if ((rule->ir_ksp = ilb_rule_kstat_init(stackid, rule)) == NULL) {
 644                 ret = ENOMEM;
 645                 goto error;
 646         }
 647 
 648         if (cmd->topo == ILB_TOPO_IMPL_NAT) {
 649                 rule->ir_nat_src_start = cmd->nat_src_start;
 650                 rule->ir_nat_src_end = cmd->nat_src_end;
 651         }
 652 
 653         rule->ir_ipver = cmd->ip_ver;
 654         rule->ir_proto = cmd->proto;
 655         rule->ir_topo = cmd->topo;
 656 
 657         rule->ir_min_port = min_port;
 658         rule->ir_max_port = max_port;
 659         if (rule->ir_min_port != rule->ir_max_port)
 660                 rule->ir_port_range = B_TRUE;
 661         else




 621                 ilb_conn_hash_init(ilbs);
 622                 ilb_nat_src_init(ilbs);
 623         }
 624 
 625         /* Make sure that the new rule does not duplicate an existing one. */
 626         if (ilb_match_rule(ilbs, zoneid, cmd->name, cmd->ip_ver, cmd->proto,
 627             min_port, max_port, &cmd->vip)) {
 628                 mutex_exit(&ilbs->ilbs_g_lock);
 629                 return (EEXIST);
 630         }
 631 
 632         rule = kmem_zalloc(sizeof (ilb_rule_t), KM_NOSLEEP);
 633         if (rule == NULL) {
 634                 mutex_exit(&ilbs->ilbs_g_lock);
 635                 return (ENOMEM);
 636         }
 637 
 638         /* ir_name is all 0 to begin with */
 639         (void) memcpy(rule->ir_name, cmd->name, ILB_RULE_NAMESZ - 1);
 640 
 641         rule->ir_ks_instance = atomic_inc_uint_nv(&ilb_kstat_instance);
 642         stackid = (netstackid_t)(uintptr_t)ilbs->ilbs_ksp->ks_private;
 643         if ((rule->ir_ksp = ilb_rule_kstat_init(stackid, rule)) == NULL) {
 644                 ret = ENOMEM;
 645                 goto error;
 646         }
 647 
 648         if (cmd->topo == ILB_TOPO_IMPL_NAT) {
 649                 rule->ir_nat_src_start = cmd->nat_src_start;
 650                 rule->ir_nat_src_end = cmd->nat_src_end;
 651         }
 652 
 653         rule->ir_ipver = cmd->ip_ver;
 654         rule->ir_proto = cmd->proto;
 655         rule->ir_topo = cmd->topo;
 656 
 657         rule->ir_min_port = min_port;
 658         rule->ir_max_port = max_port;
 659         if (rule->ir_min_port != rule->ir_max_port)
 660                 rule->ir_port_range = B_TRUE;
 661         else