aboutsummaryrefslogtreecommitdiffstats
path: root/net/netlink/af_netlink.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/netlink/af_netlink.c')
-rw-r--r--net/netlink/af_netlink.c33
1 files changed, 7 insertions, 26 deletions
diff --git a/net/netlink/af_netlink.c b/net/netlink/af_netlink.c
index de3988ba1f46..1518244ffad9 100644
--- a/net/netlink/af_netlink.c
+++ b/net/netlink/af_netlink.c
@@ -1681,7 +1681,7 @@ int nlmsg_notify(struct sock *sk, struct sk_buff *skb, u32 pid,
1681 1681
1682#ifdef CONFIG_PROC_FS 1682#ifdef CONFIG_PROC_FS
1683struct nl_seq_iter { 1683struct nl_seq_iter {
1684 struct net *net; 1684 struct seq_net_private p;
1685 int link; 1685 int link;
1686 int hash_idx; 1686 int hash_idx;
1687}; 1687};
@@ -1699,7 +1699,7 @@ static struct sock *netlink_seq_socket_idx(struct seq_file *seq, loff_t pos)
1699 1699
1700 for (j = 0; j <= hash->mask; j++) { 1700 for (j = 0; j <= hash->mask; j++) {
1701 sk_for_each(s, node, &hash->table[j]) { 1701 sk_for_each(s, node, &hash->table[j]) {
1702 if (iter->net != s->sk_net) 1702 if (iter->p.net != s->sk_net)
1703 continue; 1703 continue;
1704 if (off == pos) { 1704 if (off == pos) {
1705 iter->link = i; 1705 iter->link = i;
@@ -1734,7 +1734,7 @@ static void *netlink_seq_next(struct seq_file *seq, void *v, loff_t *pos)
1734 s = v; 1734 s = v;
1735 do { 1735 do {
1736 s = sk_next(s); 1736 s = sk_next(s);
1737 } while (s && (iter->net != s->sk_net)); 1737 } while (s && (iter->p.net != s->sk_net));
1738 if (s) 1738 if (s)
1739 return s; 1739 return s;
1740 1740
@@ -1746,7 +1746,7 @@ static void *netlink_seq_next(struct seq_file *seq, void *v, loff_t *pos)
1746 1746
1747 for (; j <= hash->mask; j++) { 1747 for (; j <= hash->mask; j++) {
1748 s = sk_head(&hash->table[j]); 1748 s = sk_head(&hash->table[j]);
1749 while (s && (iter->net != s->sk_net)) 1749 while (s && (iter->p.net != s->sk_net))
1750 s = sk_next(s); 1750 s = sk_next(s);
1751 if (s) { 1751 if (s) {
1752 iter->link = i; 1752 iter->link = i;
@@ -1802,27 +1802,8 @@ static const struct seq_operations netlink_seq_ops = {
1802 1802
1803static int netlink_seq_open(struct inode *inode, struct file *file) 1803static int netlink_seq_open(struct inode *inode, struct file *file)
1804{ 1804{
1805 struct nl_seq_iter *iter; 1805 return seq_open_net(inode, file, &netlink_seq_ops,
1806 1806 sizeof(struct nl_seq_iter));
1807 iter = __seq_open_private(file, &netlink_seq_ops, sizeof(*iter));
1808 if (!iter)
1809 return -ENOMEM;
1810
1811 iter->net = get_proc_net(inode);
1812 if (!iter->net) {
1813 seq_release_private(inode, file);
1814 return -ENXIO;
1815 }
1816
1817 return 0;
1818}
1819
1820static int netlink_seq_release(struct inode *inode, struct file *file)
1821{
1822 struct seq_file *seq = file->private_data;
1823 struct nl_seq_iter *iter = seq->private;
1824 put_net(iter->net);
1825 return seq_release_private(inode, file);
1826} 1807}
1827 1808
1828static const struct file_operations netlink_seq_fops = { 1809static const struct file_operations netlink_seq_fops = {
@@ -1830,7 +1811,7 @@ static const struct file_operations netlink_seq_fops = {
1830 .open = netlink_seq_open, 1811 .open = netlink_seq_open,
1831 .read = seq_read, 1812 .read = seq_read,
1832 .llseek = seq_lseek, 1813 .llseek = seq_lseek,
1833 .release = netlink_seq_release, 1814 .release = seq_release_net,
1834}; 1815};
1835 1816
1836#endif 1817#endif