Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=1c2d670f3660e9103fdcdca702f6dbf8ea7d6afb
Commit:     1c2d670f3660e9103fdcdca702f6dbf8ea7d6afb
Parent:     af65bdfce98d7965fbe93a48b8128444a2eea024
Author:     Patrick McHardy <[EMAIL PROTECTED]>
AuthorDate: Mon Apr 16 16:59:10 2007 -0700
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Wed Apr 25 22:29:04 2007 -0700

    [RTNETLINK]: Hold rtnl_mutex during netlink dump callbacks
    
    Hold rtnl_mutex during the entire netlink dump operation. This allows
    to simplify locking in the dump callbacks, since they can now rely on
    that no concurrent changes happen.
    
    Signed-off-by: Patrick McHardy <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
---
 net/core/rtnetlink.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 648a7b6..62f5c7f 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -859,6 +859,7 @@ static int rtnetlink_rcv_msg(struct sk_buff *skb, struct 
nlmsghdr *nlh)
        int min_len;
        int family;
        int type;
+       int err;
 
        type = nlh->nlmsg_type;
        if (type > RTM_MAX)
@@ -887,7 +888,10 @@ static int rtnetlink_rcv_msg(struct sk_buff *skb, struct 
nlmsghdr *nlh)
                if (dumpit == NULL)
                        return -EOPNOTSUPP;
 
-               return netlink_dump_start(rtnl, skb, nlh, dumpit, NULL);
+               __rtnl_unlock();
+               err = netlink_dump_start(rtnl, skb, nlh, dumpit, NULL);
+               rtnl_lock();
+               return err;
        }
 
        memset(rta_buf, 0, (rtattr_max * sizeof(struct rtattr *)));
@@ -972,7 +976,7 @@ void __init rtnetlink_init(void)
                panic("rtnetlink_init: cannot allocate rta_buf\n");
 
        rtnl = netlink_kernel_create(NETLINK_ROUTE, RTNLGRP_MAX, rtnetlink_rcv,
-                                    NULL, THIS_MODULE);
+                                    &rtnl_mutex, THIS_MODULE);
        if (rtnl == NULL)
                panic("rtnetlink_init: cannot initialize rtnetlink\n");
        netlink_set_nonroot(NETLINK_ROUTE, NL_NONROOT_RECV);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to