Brian Haley [off-list ref] writes:
On 09/23/2010 04:51 AM, Eric W. Biederman wrote:
quoted
Take advantage of the new abstraction and allow network devices
to be placed in any network namespace that we have a fd to talk
about.
...
quoted
+struct net *get_net_ns_by_fd(int fd)
+{
+ struct proc_inode *ei;
+ struct file *file;
+ struct net *net;
+
+ file = NULL;
No need to initialize this.
quoted
+ net = ERR_PTR(-EINVAL);
or this?
quoted
+ file = proc_ns_fget(fd);
+ if (!fd)
+ goto out;
+ return ERR_PTR(-EINVAL);
Shouldn't this be:
if (!file)
And the "goto" seems wrong, especially without a {} here. Unless you
meant to keep the "goto" and branch below?
I think I changed my mind half way through writing the code and never
did anything about it. Oops.
Thanks fixed. It is now:
struct net *get_net_ns_by_fd(int fd)
{
struct proc_inode *ei;
struct file *file;
struct net *net;
net = ERR_PTR(-EINVAL);
file = proc_ns_fget(fd);
if (!file)
goto out;
ei = PROC_I(file->f_dentry->d_inode);
if (ei->ns_ops != &netns_operations)
goto out;
net = get_net(ei->ns);
out:
if (file)
fput(file);
return net;
}
Which at least makes sense. Now to test it to double check it does what
it should do.
Eric