Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 66408
b: refs/heads/master
c: 077130c
h: refs/heads/master
v: v3
  • Loading branch information
Eric W. Biederman authored and David S. Miller committed Oct 10, 2007
1 parent deda9db commit aff99e6
Show file tree
Hide file tree
Showing 8 changed files with 40 additions and 9 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 4fabcd7118162e36eea5c53e8895ecc13762bef3
refs/heads/master: 077130c0cf7d5ba1992f5b51b96136d7b1c8aad5
6 changes: 6 additions & 0 deletions trunk/fs/proc/proc_net.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,12 @@ void proc_net_remove(struct net *net, const char *name)
}
EXPORT_SYMBOL_GPL(proc_net_remove);

struct net *get_proc_net(const struct inode *inode)
{
return maybe_get_net(PDE_NET(PDE(inode)));
}
EXPORT_SYMBOL_GPL(get_proc_net);

static struct proc_dir_entry *proc_net_shadow;

static struct dentry *proc_net_shadow_dentry(struct dentry *parent,
Expand Down
5 changes: 1 addition & 4 deletions trunk/include/linux/proc_fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -270,10 +270,7 @@ static inline struct net *PDE_NET(struct proc_dir_entry *pde)
return pde->parent->data;
}

static inline struct net *PROC_NET(const struct inode *inode)
{
return PDE_NET(PDE(inode));
}
struct net *get_proc_net(const struct inode *inode);

struct proc_maps_private {
struct pid *pid;
Expand Down
12 changes: 12 additions & 0 deletions trunk/include/net/net_namespace.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,18 @@ static inline struct net *get_net(struct net *net)
return net;
}

static inline struct net *maybe_get_net(struct net *net)
{
/* Used when we know struct net exists but we
* aren't guaranteed a previous reference count
* exists. If the reference count is zero this
* function fails and returns NULL.
*/
if (!atomic_inc_not_zero(&net->count))
net = NULL;
return net;
}

static inline void put_net(struct net *net)
{
if (atomic_dec_and_test(&net->count))
Expand Down
6 changes: 5 additions & 1 deletion trunk/net/core/dev.c
Original file line number Diff line number Diff line change
Expand Up @@ -2464,7 +2464,11 @@ static int dev_seq_open(struct inode *inode, struct file *file)
res = seq_open(file, &dev_seq_ops);
if (!res) {
seq = file->private_data;
seq->private = get_net(PROC_NET(inode));
seq->private = get_proc_net(inode);
if (!seq->private) {
seq_release(inode, file);
res = -ENXIO;
}
}
return res;
}
Expand Down
6 changes: 5 additions & 1 deletion trunk/net/core/dev_mcast.c
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,11 @@ static int dev_mc_seq_open(struct inode *inode, struct file *file)
res = seq_open(file, &dev_mc_seq_ops);
if (!res) {
seq = file->private_data;
seq->private = get_net(PROC_NET(inode));
seq->private = get_proc_net(inode);
if (!seq->private) {
seq_release(inode, file);
res = -ENXIO;
}
}
return res;
}
Expand Down
6 changes: 5 additions & 1 deletion trunk/net/netlink/af_netlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -1859,7 +1859,11 @@ static int netlink_seq_open(struct inode *inode, struct file *file)

seq = file->private_data;
seq->private = iter;
iter->net = get_net(PROC_NET(inode));
iter->net = get_proc_net(inode);
if (!iter->net) {
seq_release_private(inode, file);
return -ENXIO;
}
return 0;
}

Expand Down
6 changes: 5 additions & 1 deletion trunk/net/wireless/wext.c
Original file line number Diff line number Diff line change
Expand Up @@ -678,7 +678,11 @@ static int wireless_seq_open(struct inode *inode, struct file *file)
res = seq_open(file, &wireless_seq_ops);
if (!res) {
seq = file->private_data;
seq->private = get_net(PROC_NET(inode));
seq->private = get_proc_net(inode);
if (!seq->private) {
seq_release(inode, file);
res = -ENXIO;
}
}
return res;
}
Expand Down

0 comments on commit aff99e6

Please sign in to comment.