> -----Original Message-----
> From: Mohan Krishna Ghanta Krishnamurthy
> Sent: Tuesday, March 13, 2018 11:20
> To: [email protected]; Jon Maloy
> <[email protected]>; [email protected]; Ying Xue
> <[email protected]>
> Cc: Parthasarathy Bhuvaragan <[email protected]>
> Subject: [net-next 1/3] tipc: modify socket iterator for sock_diag
>
> The current socket iterator function tipc_nl_sk_dump, handles socket locks
> and calls __tipc_nl_add_sk for each socket.
> To reuse this logic in sock_diag implementation, we do minor modifications
> to make these functions generic as described below.
>
> In this commit, we add a two new functions __tipc_nl_sk_walk,
> __tipc_nl_add_sk_info and modify tipc_nl_sk_dump, __tipc_nl_add_sk
> accordingly.
>
> In __tipc_nl_sk_walk we:
> 1. acquire and release socket locks
> 2. for each socket, execute the specified callback function
>
> In __tipc_nl_add_sk we:
> - Move the netlink attribute insertion to __tipc_nl_add_sk_info.
>
> tipc_nl_sk_dump calls tipc_nl_sk_walk with __tipc_nl_add_sk as argument.
>
> sock_diag will use these generic functions in a later commit.
>
> There is no functional change in this commit.
> Signed-off-by: GhantaKrishnamurthy MohanKrishna
> <[email protected]>
> Signed-off-by: Parthasarathy Bhuvaragan
> <[email protected]>
> ---
> net/tipc/socket.c | 63 +++++++++++++++++++++++++++++++++++----------
> ----------
> 1 file changed, 40 insertions(+), 23 deletions(-)
>
> diff --git a/net/tipc/socket.c b/net/tipc/socket.c index
> f93477187a90..cc0c701fc71b 100644
> --- a/net/tipc/socket.c
> +++ b/net/tipc/socket.c
> @@ -3154,16 +3154,33 @@ static int __tipc_nl_add_sk_con(struct sk_buff
> *skb, struct tipc_sock *tsk)
> return -EMSGSIZE;
> }
>
> +static int __tipc_nl_add_sk_info(struct sk_buff *skb, struct tipc_sock
> + *tsk)
> +{
> + struct net *net = sock_net(skb->sk);
> + struct tipc_net *tn = net_generic(net, tipc_net_id);
There is an inline function tipc_net(net) for this. This makes declaration
slightly shorter.
Also, for new code David requires that declaration are made longest-to-shortest
("Reverse Christmas Tree") when as far as the declaration dependencies permit.
I see you do it in most functions, but not everywhere. Make sure you apply
this, otherwise David will reject it.
Acked-by: jon
> + struct sock *sk = &tsk->sk;
> +
> + if (nla_put_u32(skb, TIPC_NLA_SOCK_REF, tsk->portid) ||
> + nla_put_u32(skb, TIPC_NLA_SOCK_ADDR, tn->own_addr))
> + return -EMSGSIZE;
> +
> + if (tipc_sk_connected(sk)) {
> + if (__tipc_nl_add_sk_con(skb, tsk))
> + return -EMSGSIZE;
> + } else if (!list_empty(&tsk->publications)) {
> + if (nla_put_flag(skb, TIPC_NLA_SOCK_HAS_PUBL))
> + return -EMSGSIZE;
> + }
> + return 0;
> +}
> +
> /* Caller should hold socket lock for the passed tipc socket. */ static int
> __tipc_nl_add_sk(struct sk_buff *skb, struct netlink_callback *cb,
> struct tipc_sock *tsk)
> {
> - int err;
> - void *hdr;
> struct nlattr *attrs;
> - struct net *net = sock_net(skb->sk);
> - struct tipc_net *tn = net_generic(net, tipc_net_id);
> - struct sock *sk = &tsk->sk;
> + void *hdr;
>
> hdr = genlmsg_put(skb, NETLINK_CB(cb->skb).portid, cb->nlh-
> >nlmsg_seq,
> &tipc_genl_family, NLM_F_MULTI,
> TIPC_NL_SOCK_GET); @@ -3173,19 +3190,10 @@ static int
> __tipc_nl_add_sk(struct sk_buff *skb, struct netlink_callback *cb,
> attrs = nla_nest_start(skb, TIPC_NLA_SOCK);
> if (!attrs)
> goto genlmsg_cancel;
> - if (nla_put_u32(skb, TIPC_NLA_SOCK_REF, tsk->portid))
> - goto attr_msg_cancel;
> - if (nla_put_u32(skb, TIPC_NLA_SOCK_ADDR, tn->own_addr))
> +
> + if (__tipc_nl_add_sk_info(skb, tsk))
> goto attr_msg_cancel;
>
> - if (tipc_sk_connected(sk)) {
> - err = __tipc_nl_add_sk_con(skb, tsk);
> - if (err)
> - goto attr_msg_cancel;
> - } else if (!list_empty(&tsk->publications)) {
> - if (nla_put_flag(skb, TIPC_NLA_SOCK_HAS_PUBL))
> - goto attr_msg_cancel;
> - }
> nla_nest_end(skb, attrs);
> genlmsg_end(skb, hdr);
>
> @@ -3199,16 +3207,19 @@ static int __tipc_nl_add_sk(struct sk_buff *skb,
> struct netlink_callback *cb,
> return -EMSGSIZE;
> }
>
> -int tipc_nl_sk_dump(struct sk_buff *skb, struct netlink_callback *cb)
> +static int __tipc_nl_sk_walk(struct sk_buff *skb, struct netlink_callback
> *cb,
> + int (*skb_handler)(struct sk_buff *skb,
> + struct netlink_callback *cb,
> + struct tipc_sock *tsk))
> {
> - int err;
> - struct tipc_sock *tsk;
> - const struct bucket_table *tbl;
> - struct rhash_head *pos;
> struct net *net = sock_net(skb->sk);
> struct tipc_net *tn = net_generic(net, tipc_net_id);
> - u32 tbl_id = cb->args[0];
> + const struct bucket_table *tbl;
> u32 prev_portid = cb->args[1];
> + u32 tbl_id = cb->args[0];
> + struct rhash_head *pos;
> + struct tipc_sock *tsk;
> + int err;
>
> rcu_read_lock();
> tbl = rht_dereference_rcu((&tn->sk_rht)->tbl, &tn->sk_rht); @@ -
> 3220,12 +3231,13 @@ int tipc_nl_sk_dump(struct sk_buff *skb, struct
> netlink_callback *cb)
> continue;
> }
>
> - err = __tipc_nl_add_sk(skb, cb, tsk);
> + err = skb_handler(skb, cb, tsk);
> if (err) {
> prev_portid = tsk->portid;
> spin_unlock_bh(&tsk->sk.sk_lock.slock);
> goto out;
> }
> +
> prev_portid = 0;
> spin_unlock_bh(&tsk->sk.sk_lock.slock);
> }
> @@ -3238,6 +3250,11 @@ int tipc_nl_sk_dump(struct sk_buff *skb, struct
> netlink_callback *cb)
> return skb->len;
> }
>
> +int tipc_nl_sk_dump(struct sk_buff *skb, struct netlink_callback *cb) {
> + return __tipc_nl_sk_walk(skb, cb, __tipc_nl_add_sk); }
> +
> /* Caller should hold socket lock for the passed tipc socket. */ static int
> __tipc_nl_add_sk_publ(struct sk_buff *skb,
> struct netlink_callback *cb,
> --
> 2.1.4
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
tipc-discussion mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tipc-discussion