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


 219         }
 220         /* Found one, return it. */
 221         if (tmp != NULL) {
 222                 tmp->nse_refcnt++;
 223                 mutex_exit(&ilbs->ilbs_nat_src[idx].nsh_lock);
 224                 return (tmp);
 225         }
 226 
 227         tmp = kmem_alloc(sizeof (ilb_nat_src_entry_t), KM_NOSLEEP);
 228         if (tmp == NULL) {
 229                 mutex_exit(&ilbs->ilbs_nat_src[idx].nsh_lock);
 230                 return (NULL);
 231         }
 232         tmp->nse_src_addr = *nat_src;
 233         tmp->nse_serv_addr = *serv_addr;
 234         tmp->nse_port = port;
 235         tmp->nse_nsh_lock = &ilbs->ilbs_nat_src[idx].nsh_lock;
 236         tmp->nse_refcnt = 1;
 237 
 238         (void) snprintf(arena_name, ARENA_NAMESZ, "ilb_ns_%u",
 239             atomic_add_32_nv(&ilb_nat_src_instance, 1));
 240         if ((tmp->nse_port_arena = vmem_create(arena_name,
 241             (void *)NAT_PORT_START, NAT_PORT_SIZE, 1, NULL, NULL, NULL, 1,
 242             VM_SLEEP | VMC_IDENTIFIER)) == NULL) {
 243                 kmem_free(tmp, sizeof (*tmp));
 244                 return (NULL);
 245         }
 246 
 247         list_insert_tail(head, tmp);
 248         mutex_exit(&ilbs->ilbs_nat_src[idx].nsh_lock);
 249 
 250         return (tmp);
 251 }
 252 
 253 /*
 254  * Create ilb_nat_src_t struct for a ilb_server_t struct.
 255  */
 256 int
 257 ilb_create_nat_src(ilb_stack_t *ilbs, ilb_nat_src_t **nat_src,
 258     const in6_addr_t *srv_addr, in_port_t port, const in6_addr_t *start,
 259     int num)




 219         }
 220         /* Found one, return it. */
 221         if (tmp != NULL) {
 222                 tmp->nse_refcnt++;
 223                 mutex_exit(&ilbs->ilbs_nat_src[idx].nsh_lock);
 224                 return (tmp);
 225         }
 226 
 227         tmp = kmem_alloc(sizeof (ilb_nat_src_entry_t), KM_NOSLEEP);
 228         if (tmp == NULL) {
 229                 mutex_exit(&ilbs->ilbs_nat_src[idx].nsh_lock);
 230                 return (NULL);
 231         }
 232         tmp->nse_src_addr = *nat_src;
 233         tmp->nse_serv_addr = *serv_addr;
 234         tmp->nse_port = port;
 235         tmp->nse_nsh_lock = &ilbs->ilbs_nat_src[idx].nsh_lock;
 236         tmp->nse_refcnt = 1;
 237 
 238         (void) snprintf(arena_name, ARENA_NAMESZ, "ilb_ns_%u",
 239             atomic_inc_32_nv(&ilb_nat_src_instance));
 240         if ((tmp->nse_port_arena = vmem_create(arena_name,
 241             (void *)NAT_PORT_START, NAT_PORT_SIZE, 1, NULL, NULL, NULL, 1,
 242             VM_SLEEP | VMC_IDENTIFIER)) == NULL) {
 243                 kmem_free(tmp, sizeof (*tmp));
 244                 return (NULL);
 245         }
 246 
 247         list_insert_tail(head, tmp);
 248         mutex_exit(&ilbs->ilbs_nat_src[idx].nsh_lock);
 249 
 250         return (tmp);
 251 }
 252 
 253 /*
 254  * Create ilb_nat_src_t struct for a ilb_server_t struct.
 255  */
 256 int
 257 ilb_create_nat_src(ilb_stack_t *ilbs, ilb_nat_src_t **nat_src,
 258     const in6_addr_t *srv_addr, in_port_t port, const in6_addr_t *start,
 259     int num)