On Tue, Nov 15, 2016 at 03:41:48PM +0100, Martin Pieuchot wrote:
> Kill a bunch of recursive splsoftnet()s.  pf_ioctl() already call
> splsoftnet() and for the functions that are also called from pf_test()
> the spl level is already IPL_SOFTNET.
> 
> ok?

OK bluhm@

> 
> Index: net/pf_if.c
> ===================================================================
> RCS file: /cvs/src/sys/net/pf_if.c,v
> retrieving revision 1.86
> diff -u -p -r1.86 pf_if.c
> --- net/pf_if.c       27 Sep 2016 04:57:17 -0000      1.86
> +++ net/pf_if.c       15 Nov 2016 14:27:47 -0000
> @@ -356,7 +356,7 @@ pfi_dynaddr_setup(struct pf_addr_wrap *a
>       struct pfi_dynaddr      *dyn;
>       char                     tblname[PF_TABLE_NAME_SIZE];
>       struct pf_ruleset       *ruleset = NULL;
> -     int                      s, rv = 0;
> +     int                      rv = 0;
>  
>       if (aw->type != PF_ADDR_DYNIFTL)
>               return (0);
> @@ -364,7 +364,6 @@ pfi_dynaddr_setup(struct pf_addr_wrap *a
>           == NULL)
>               return (1);
>  
> -     s = splsoftnet();
>       if (!strcmp(aw->v.ifname, "self"))
>               dyn->pfid_kif = pfi_kif_get(IFG_ALL);
>       else
> @@ -407,7 +406,6 @@ pfi_dynaddr_setup(struct pf_addr_wrap *a
>       TAILQ_INSERT_TAIL(&dyn->pfid_kif->pfik_dynaddrs, dyn, entry);
>       aw->p.dyn = dyn;
>       pfi_kif_update(dyn->pfid_kif);
> -     splx(s);
>       return (0);
>  
>  _bad:
> @@ -418,7 +416,6 @@ _bad:
>       if (dyn->pfid_kif != NULL)
>               pfi_kif_unref(dyn->pfid_kif, PFI_KIF_REF_RULE);
>       pool_put(&pfi_addr_pl, dyn);
> -     splx(s);
>       return (rv);
>  }
>  
> @@ -589,13 +586,10 @@ pfi_address_add(struct sockaddr *sa, sa_
>  void
>  pfi_dynaddr_remove(struct pf_addr_wrap *aw)
>  {
> -     int     s;
> -
>       if (aw->type != PF_ADDR_DYNIFTL || aw->p.dyn == NULL ||
>           aw->p.dyn->pfid_kif == NULL || aw->p.dyn->pfid_kt == NULL)
>               return;
>  
> -     s = splsoftnet();
>       TAILQ_REMOVE(&aw->p.dyn->pfid_kif->pfik_dynaddrs, aw->p.dyn, entry);
>       pfi_kif_unref(aw->p.dyn->pfid_kif, PFI_KIF_REF_RULE);
>       aw->p.dyn->pfid_kif = NULL;
> @@ -603,7 +597,6 @@ pfi_dynaddr_remove(struct pf_addr_wrap *
>       aw->p.dyn->pfid_kt = NULL;
>       pool_put(&pfi_addr_pl, aw->p.dyn);
>       aw->p.dyn = NULL;
> -     splx(s);
>  }
>  
>  void
> @@ -640,23 +633,20 @@ pfi_update_status(const char *name, stru
>       struct pfi_kif_cmp       key;
>       struct ifg_member        p_member, *ifgm;
>       TAILQ_HEAD(, ifg_member) ifg_members;
> -     int                      i, j, k, s;
> +     int                      i, j, k;
>  
> -     s = splsoftnet();
>       if (*name == '\0' && pfs == NULL) {
>               RB_FOREACH(p, pfi_ifhead, &pfi_ifs) {
>                       bzero(p->pfik_packets, sizeof(p->pfik_packets));
>                       bzero(p->pfik_bytes, sizeof(p->pfik_bytes));
>                       p->pfik_tzero = time_second;
>               }
> -             splx(s);
>               return;
>       }
>  
>       strlcpy(key.pfik_name, name, sizeof(key.pfik_name));
>       p = RB_FIND(pfi_ifhead, &pfi_ifs, (struct pfi_kif *)&key);
>       if (p == NULL) {
> -             splx(s);
>               return;
>       }
>       if (p->pfik_group != NULL) {
> @@ -694,16 +684,14 @@ pfi_update_status(const char *name, stru
>                                               p->pfik_bytes[i][j][k];
>                               }
>       }
> -     splx(s);
>  }
>  
>  int
>  pfi_get_ifaces(const char *name, struct pfi_kif *buf, int *size)
>  {
>       struct pfi_kif  *p, *nextp;
> -     int              s, n = 0;
> +     int              n = 0;
>  
> -     s = splsoftnet();
>       for (p = RB_MIN(pfi_ifhead, &pfi_ifs); p; p = nextp) {
>               nextp = RB_NEXT(pfi_ifhead, &pfi_ifs, p);
>               if (pfi_skip_if(name, p))
> @@ -714,14 +702,12 @@ pfi_get_ifaces(const char *name, struct 
>                       pfi_kif_ref(p, PFI_KIF_REF_RULE);
>                       if (copyout(p, buf++, sizeof(*buf))) {
>                               pfi_kif_unref(p, PFI_KIF_REF_RULE);
> -                             splx(s);
>                               return (EFAULT);
>                       }
>                       nextp = RB_NEXT(pfi_ifhead, &pfi_ifs, p);
>                       pfi_kif_unref(p, PFI_KIF_REF_RULE);
>               }
>       }
> -     splx(s);
>       *size = n;
>       return (0);
>  }
> @@ -752,15 +738,12 @@ int
>  pfi_set_flags(const char *name, int flags)
>  {
>       struct pfi_kif  *p;
> -     int              s;
>  
> -     s = splsoftnet();
>       RB_FOREACH(p, pfi_ifhead, &pfi_ifs) {
>               if (pfi_skip_if(name, p))
>                       continue;
>               p->pfik_flags_new = p->pfik_flags | flags;
>       }
> -     splx(s);
>       return (0);
>  }
>  
> @@ -768,15 +751,12 @@ int
>  pfi_clear_flags(const char *name, int flags)
>  {
>       struct pfi_kif  *p;
> -     int              s;
>  
> -     s = splsoftnet();
>       RB_FOREACH(p, pfi_ifhead, &pfi_ifs) {
>               if (pfi_skip_if(name, p))
>                       continue;
>               p->pfik_flags_new = p->pfik_flags & ~flags;
>       }
> -     splx(s);
>       return (0);
>  }
>  
> @@ -784,12 +764,9 @@ void
>  pfi_xcommit(void)
>  {
>       struct pfi_kif  *p;
> -     int              s;
>  
> -     s = splsoftnet();
>       RB_FOREACH(p, pfi_ifhead, &pfi_ifs)
>               p->pfik_flags = p->pfik_flags_new;
> -     splx(s);
>  }
>  
>  /* from pf_print_state.c */
> Index: net/pf_ioctl.c
> ===================================================================
> RCS file: /cvs/src/sys/net/pf_ioctl.c,v
> retrieving revision 1.304
> diff -u -p -r1.304 pf_ioctl.c
> --- net/pf_ioctl.c    28 Oct 2016 07:54:19 -0000      1.304
> +++ net/pf_ioctl.c    15 Nov 2016 14:26:42 -0000
> @@ -769,7 +769,7 @@ pf_commit_rules(u_int32_t ticket, char *
>       struct pf_ruleset       *rs;
>       struct pf_rule          *rule, **old_array;
>       struct pf_rulequeue     *old_rules;
> -     int                      s, error;
> +     int                      error;
>       u_int32_t                old_rcount;
>  
>       /* Make sure any expired rules get removed from active rules first. */
> @@ -788,7 +788,6 @@ pf_commit_rules(u_int32_t ticket, char *
>       }
>  
>       /* Swap rules, keep the old. */
> -     s = splsoftnet();
>       old_rules = rs->rules.active.ptr;
>       old_rcount = rs->rules.active.rcount;
>       old_array = rs->rules.active.ptr_array;
> @@ -813,7 +812,6 @@ pf_commit_rules(u_int32_t ticket, char *
>       rs->rules.inactive.rcount = 0;
>       rs->rules.inactive.open = 0;
>       pf_remove_if_empty_ruleset(rs);
> -     splx(s);
>  
>       /* queue defs only in the main ruleset */
>       if (anchor[0])

Reply via email to