Search Linux Wireless

Re: [PATCH v2] mac80211: fix RCU warnings in mesh

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Johannes,

On Mon, Nov 21, 2011 at 2:23 AM, Johannes Berg
<johannes@xxxxxxxxxxxxxxxx> wrote:
> From: Johannes Berg <johannes.berg@xxxxxxxxx>
>
> Sparse RCU checking reports two warnings in the mesh
> path table code. These are due to questionable uses of
> rcu_dereference.
>
> To fix the first one, get rid of mesh_gate_add() and
> just make mesh_path_add_gate() do the correct deref.
>
> To fix the second one, simply remove rcu_dereference()
> in mesh_gate_del() -- it already gets a proper pointer
> as indicated by the prototype (no __rcu annotation)
> and confirmed by the code.
>

Sorry you had to clean up my mess, ACK :)

Thomas

> Cc: Javier Cardona <javier@xxxxxxxxxxx>
> Cc: Thomas Pedersen <thomas@xxxxxxxxxxx>
> Signed-off-by: Johannes Berg <johannes.berg@xxxxxxxxx>
> ---
> v2: oops. fix prototypes
>
>  net/mac80211/mesh_pathtbl.c |   27 +++++----------------------
>  1 file changed, 5 insertions(+), 22 deletions(-)
>
> --- a/net/mac80211/mesh_pathtbl.c       2011-11-21 11:19:44.000000000 +0100
> +++ b/net/mac80211/mesh_pathtbl.c       2011-11-21 11:23:19.000000000 +0100
> @@ -69,8 +69,6 @@ static inline struct mesh_table *resize_
>                lockdep_is_held(&pathtbl_resize_lock));
>  }
>
> -static int mesh_gate_add(struct mesh_table *tbl, struct mesh_path *mpath);
> -
>  /*
>  * CAREFUL -- "tbl" must not be an expression,
>  * in particular not an rcu_dereference(), since
> @@ -420,21 +418,18 @@ static void mesh_gate_node_reclaim(struc
>  }
>
>  /**
> - * mesh_gate_add - mark mpath as path to a mesh gate and add to known_gates
> - * @mesh_tbl: table which contains known_gates list
> - * @mpath: mpath to known mesh gate
> - *
> - * Returns: 0 on success
> - *
> + * mesh_path_add_gate - add the given mpath to a mesh gate to our path table
> + * @mpath: gate path to add to table
>  */
> -static int mesh_gate_add(struct mesh_table *tbl, struct mesh_path *mpath)
> +int mesh_path_add_gate(struct mesh_path *mpath)
>  {
> +       struct mesh_table *tbl;
>        struct mpath_node *gate, *new_gate;
>        struct hlist_node *n;
>        int err;
>
>        rcu_read_lock();
> -       tbl = rcu_dereference(tbl);
> +       tbl = rcu_dereference(mesh_paths);
>
>        hlist_for_each_entry_rcu(gate, n, tbl->known_gates, list)
>                if (gate->mpath == mpath) {
> @@ -478,8 +473,6 @@ static int mesh_gate_del(struct mesh_tab
>        struct mpath_node *gate;
>        struct hlist_node *p, *q;
>
> -       tbl = rcu_dereference(tbl);
> -
>        hlist_for_each_entry_safe(gate, p, q, tbl->known_gates, list)
>                if (gate->mpath == mpath) {
>                        spin_lock_bh(&tbl->gates_lock);
> @@ -498,16 +491,6 @@ static int mesh_gate_del(struct mesh_tab
>  }
>
>  /**
> - *
> - * mesh_path_add_gate - add the given mpath to a mesh gate to our path table
> - * @mpath: gate path to add to table
> - */
> -int mesh_path_add_gate(struct mesh_path *mpath)
> -{
> -       return mesh_gate_add(mesh_paths, mpath);
> -}
> -
> -/**
>  * mesh_gate_num - number of gates known to this interface
>  * @sdata: subif data
>  */
>
>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux