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

*** 494,506 **** * For all practical purposes, we limit the no. of entries in * the flow table - i.e. the max_limt that a user specifies is * the maximum no. of flow items in the table. */ try_again: ! atomic_add_32(&flowacct_data->nflows, 1); if (flowacct_data->nflows > flowacct_data->max_limit) { ! atomic_add_32(&flowacct_data->nflows, -1); /* Try timing out once */ if (just_once) { /* * Need to release the lock, as this entry --- 494,506 ---- * For all practical purposes, we limit the no. of entries in * the flow table - i.e. the max_limt that a user specifies is * the maximum no. of flow items in the table. */ try_again: ! atomic_inc_32(&flowacct_data->nflows); if (flowacct_data->nflows > flowacct_data->max_limit) { ! atomic_dec_32(&flowacct_data->nflows); /* Try timing out once */ if (just_once) { /* * Need to release the lock, as this entry
*** 534,544 **** if (added_flow) { flowacct_del_obj(fhead, flow->hdr, FLOWACCT_DEL_OBJ); } mutex_exit(&fhead->lock); ! atomic_add_32(&flowacct_data->nflows, -1); flowacct0dbg(("flowacct_update_flows_tbl: mem alloc "\ "error")); return (-1); } item->hdr = flowacct_add_obj(ihead, ihead->tail, (void *)item); --- 534,544 ---- if (added_flow) { flowacct_del_obj(fhead, flow->hdr, FLOWACCT_DEL_OBJ); } mutex_exit(&fhead->lock); ! atomic_dec_32(&flowacct_data->nflows); flowacct0dbg(("flowacct_update_flows_tbl: mem alloc "\ "error")); return (-1); } item->hdr = flowacct_add_obj(ihead, ihead->tail, (void *)item);
*** 548,558 **** if (added_flow) { flowacct_del_obj(fhead, flow->hdr, FLOWACCT_DEL_OBJ); } mutex_exit(&fhead->lock); ! atomic_add_32(&flowacct_data->nflows, -1); kmem_free(item, FLOWACCT_ITEM_SZ); flowacct0dbg(("flowacct_update_flows_tbl: mem alloc "\ "error\n")); return (-1); } --- 548,558 ---- if (added_flow) { flowacct_del_obj(fhead, flow->hdr, FLOWACCT_DEL_OBJ); } mutex_exit(&fhead->lock); ! atomic_dec_32(&flowacct_data->nflows); kmem_free(item, FLOWACCT_ITEM_SZ); flowacct0dbg(("flowacct_update_flows_tbl: mem alloc "\ "error\n")); return (-1); }
*** 885,922 **** if ((mp->b_cont != NULL) && (mp->b_cont->b_datap->db_type == M_DATA)) { mp = mp->b_cont; } else { flowacct0dbg(("flowacct_process: no data\n")); ! atomic_add_64(&flowacct_data->epackets, 1); return (EINVAL); } } header = kmem_zalloc(FLOWACCT_HEADER_SZ, KM_NOSLEEP); if (header == NULL) { flowacct0dbg(("flowacct_process: error allocing mem")); ! atomic_add_64(&flowacct_data->epackets, 1); return (ENOMEM); } /* Get all the required information into header. */ if (flowacct_extract_header(mp, header) != 0) { kmem_free(header, FLOWACCT_HEADER_SZ); ! atomic_add_64(&flowacct_data->epackets, 1); return (EINVAL); } /* Updated the flow table with this entry */ if (flowacct_update_flows_tbl(header, flowacct_data) != 0) { kmem_free(header, FLOWACCT_HEADER_SZ); ! atomic_add_64(&flowacct_data->epackets, 1); return (ENOMEM); } /* Update global stats */ ! atomic_add_64(&flowacct_data->npackets, 1); atomic_add_64(&flowacct_data->nbytes, header->pktlen); kmem_free(header, FLOWACCT_HEADER_SZ); if (flowacct_data->flow_tid == 0) { flowacct_data->flow_tid = timeout(flowacct_timeout_flows, --- 885,922 ---- if ((mp->b_cont != NULL) && (mp->b_cont->b_datap->db_type == M_DATA)) { mp = mp->b_cont; } else { flowacct0dbg(("flowacct_process: no data\n")); ! atomic_inc_64(&flowacct_data->epackets); return (EINVAL); } } header = kmem_zalloc(FLOWACCT_HEADER_SZ, KM_NOSLEEP); if (header == NULL) { flowacct0dbg(("flowacct_process: error allocing mem")); ! atomic_inc_64(&flowacct_data->epackets); return (ENOMEM); } /* Get all the required information into header. */ if (flowacct_extract_header(mp, header) != 0) { kmem_free(header, FLOWACCT_HEADER_SZ); ! atomic_inc_64(&flowacct_data->epackets); return (EINVAL); } /* Updated the flow table with this entry */ if (flowacct_update_flows_tbl(header, flowacct_data) != 0) { kmem_free(header, FLOWACCT_HEADER_SZ); ! atomic_inc_64(&flowacct_data->epackets); return (ENOMEM); } /* Update global stats */ ! atomic_inc_64(&flowacct_data->npackets); atomic_add_64(&flowacct_data->nbytes, header->pktlen); kmem_free(header, FLOWACCT_HEADER_SZ); if (flowacct_data->flow_tid == 0) { flowacct_data->flow_tid = timeout(flowacct_timeout_flows,