|
@@ -2037,7 +2037,7 @@ static void udp_seq_stop(struct seq_file *seq, void *v)
|
|
|
spin_unlock_bh(&state->udp_table->hash[state->bucket].lock);
|
|
|
}
|
|
|
|
|
|
-static int udp_seq_open(struct inode *inode, struct file *file)
|
|
|
+int udp_seq_open(struct inode *inode, struct file *file)
|
|
|
{
|
|
|
struct udp_seq_afinfo *afinfo = PDE(inode)->data;
|
|
|
struct udp_iter_state *s;
|
|
@@ -2053,6 +2053,7 @@ static int udp_seq_open(struct inode *inode, struct file *file)
|
|
|
s->udp_table = afinfo->udp_table;
|
|
|
return err;
|
|
|
}
|
|
|
+EXPORT_SYMBOL(udp_seq_open);
|
|
|
|
|
|
/* ------------------------------------------------------------------------ */
|
|
|
int udp_proc_register(struct net *net, struct udp_seq_afinfo *afinfo)
|
|
@@ -2060,17 +2061,12 @@ int udp_proc_register(struct net *net, struct udp_seq_afinfo *afinfo)
|
|
|
struct proc_dir_entry *p;
|
|
|
int rc = 0;
|
|
|
|
|
|
- afinfo->seq_fops.open = udp_seq_open;
|
|
|
- afinfo->seq_fops.read = seq_read;
|
|
|
- afinfo->seq_fops.llseek = seq_lseek;
|
|
|
- afinfo->seq_fops.release = seq_release_net;
|
|
|
-
|
|
|
afinfo->seq_ops.start = udp_seq_start;
|
|
|
afinfo->seq_ops.next = udp_seq_next;
|
|
|
afinfo->seq_ops.stop = udp_seq_stop;
|
|
|
|
|
|
p = proc_create_data(afinfo->name, S_IRUGO, net->proc_net,
|
|
|
- &afinfo->seq_fops, afinfo);
|
|
|
+ afinfo->seq_fops, afinfo);
|
|
|
if (!p)
|
|
|
rc = -ENOMEM;
|
|
|
return rc;
|
|
@@ -2120,14 +2116,20 @@ int udp4_seq_show(struct seq_file *seq, void *v)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+static const struct file_operations udp_afinfo_seq_fops = {
|
|
|
+ .owner = THIS_MODULE,
|
|
|
+ .open = udp_seq_open,
|
|
|
+ .read = seq_read,
|
|
|
+ .llseek = seq_lseek,
|
|
|
+ .release = seq_release_net
|
|
|
+};
|
|
|
+
|
|
|
/* ------------------------------------------------------------------------ */
|
|
|
static struct udp_seq_afinfo udp4_seq_afinfo = {
|
|
|
.name = "udp",
|
|
|
.family = AF_INET,
|
|
|
.udp_table = &udp_table,
|
|
|
- .seq_fops = {
|
|
|
- .owner = THIS_MODULE,
|
|
|
- },
|
|
|
+ .seq_fops = &udp_afinfo_seq_fops,
|
|
|
.seq_ops = {
|
|
|
.show = udp4_seq_show,
|
|
|
},
|