@@ -202,23 +202,22 @@ nf2_uninstall_flow(struct datapath *dpinst, struct sw_table *flowtab,
202202 struct list deleted ;
203203 list_init (& deleted );
204204
205+ dev = nf2_get_net_device ();
206+ if (dev == NULL )
207+ return 0 ;
208+
205209 LIST_FOR_EACH_SAFE (flow , n , struct sw_flow , node , & nf2flowtab -> flows ) {
206210 if (flow_matches_desc (& flow -> key , key , strict )
207211 && (!strict || flow -> priority == priority )
208212 && flow_has_out_port (flow , out_port )) {
209213 nf2flow = flow -> private ;
210214
211215 if (nf2flow != NULL ) {
212- dev = nf2_get_net_device ();
213- if (dev == NULL )
214- return 0 ;
215216 flow -> packet_count
216217 += nf2_get_packet_count (dev ,
217218 nf2flow );
218219 flow -> byte_count += nf2_get_byte_count (dev ,
219- nf2flow );
220-
221- nf2_free_net_device (dev );
220+ nf2flow );
222221 }
223222 count += do_uninstall (flow , & deleted );
224223 if (keep_flow == KEEP_FLOW ) {
@@ -229,6 +228,8 @@ nf2_uninstall_flow(struct datapath *dpinst, struct sw_table *flowtab,
229228 }
230229 nf2flowtab -> num_flows -= count ;
231230
231+ nf2_free_net_device (dev );
232+
232233 if (keep_flow == DELETE_FLOW ) {
233234 /* Notify DP of deleted flows and delete the flow */
234235 LIST_FOR_EACH_SAFE (flow , n , struct sw_flow , node , & deleted ) {
@@ -397,6 +398,8 @@ nf2_get_portstats(of_hw_driver_t *hw_drv, int of_port,
397398 }
398399
399400 if (nf2_get_port_info (dev , nf2_port , nf2portinfo )) {
401+ nf2_free_net_device (dev );
402+ free (nf2portinfo );
400403 return 1 ;
401404 }
402405
@@ -416,6 +419,8 @@ nf2_get_portstats(of_hw_driver_t *hw_drv, int of_port,
416419 stats -> rx_crc_err = -1 ;
417420 stats -> collisions = -1 ;
418421
422+ nf2_free_net_device (dev );
423+ free (nf2portinfo );
419424 return 0 ;
420425}
421426
0 commit comments