proc: Usable inode numbers for the namespace file descriptors.
[deliverable/linux.git] / fs / proc / namespaces.c
index 7a6d8d69cdb894505996a07c6125d81899796236..b7a47196c8c3577e9cda96125a0157444128a7be 100644 (file)
@@ -82,7 +82,7 @@ static struct dentry *proc_ns_get_dentry(struct super_block *sb,
                return ERR_PTR(-ENOMEM);
        }
 
-       inode = new_inode(sb);
+       inode = iget_locked(sb, ns_ops->inum(ns));
        if (!inode) {
                dput(dentry);
                ns_ops->put(ns);
@@ -90,13 +90,17 @@ static struct dentry *proc_ns_get_dentry(struct super_block *sb,
        }
 
        ei = PROC_I(inode);
-       inode->i_ino = get_next_ino();
-       inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
-       inode->i_op = &ns_inode_operations;
-       inode->i_mode = S_IFREG | S_IRUGO;
-       inode->i_fop = &ns_file_operations;
-       ei->ns_ops = ns_ops;
-       ei->ns = ns;
+       if (inode->i_state & I_NEW) {
+               inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
+               inode->i_op = &ns_inode_operations;
+               inode->i_mode = S_IFREG | S_IRUGO;
+               inode->i_fop = &ns_file_operations;
+               ei->ns_ops = ns_ops;
+               ei->ns = ns;
+               unlock_new_inode(inode);
+       } else {
+               ns_ops->put(ns);
+       }
 
        d_set_d_op(dentry, &ns_dentry_operations);
        result = d_instantiate_unique(dentry, inode);
@@ -162,12 +166,12 @@ static int proc_ns_readlink(struct dentry *dentry, char __user *buffer, int bufl
        if (!ns)
                goto out_put_task;
 
-       snprintf(name, sizeof(name), "%s", ns_ops->name);
+       snprintf(name, sizeof(name), "%s:[%u]", ns_ops->name, ns_ops->inum(ns));
        len = strlen(name);
 
        if (len > buflen)
                len = buflen;
-       if (copy_to_user(buffer, ns_ops->name, len))
+       if (copy_to_user(buffer, name, len))
                len = -EFAULT;
 
        ns_ops->put(ns);
This page took 0.030628 seconds and 5 git commands to generate.