lkml.org 
[lkml]   [2016]   [Apr]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
Date
SubjectRe: [PATCH] devpts: Make each mount of devpts an independent filesystem.
Al Viro <viro@ZenIV.linux.org.uk> writes:

> On Tue, Apr 19, 2016 at 10:04:20PM -0500, Eric W. Biederman wrote:
>> +#ifdef CONFIG_UNIX98_PTYS
>> +int path_pts(struct path *path)
>> +{
>> + /* Find "pts" in the same directory as the input path */
>> + struct dentry *child, *parent;
>> + struct qstr this;
>> + int ret;
>> +
>> + ret = path_parent_directory(path);
>> + if (ret)
>> + return ret;
>> +
>> + parent = path->dentry;
>> + if (!d_can_lookup(parent))
>> + return -ENOENT;
>
> And how, pray tell, would a parent of anything fail to be a directory?

It is to make that function be visually distinct from path_parentat
which does something rather different.

>> + this.name = "pts";
>> + this.len = 3;
>> + this.hash = full_name_hash(this.name, this.len);
>> + if (parent->d_flags & DCACHE_OP_HASH) {
>> + int err = parent->d_op->d_hash(parent, &this);
>> + if (err < 0)
>> + return err;
>> + }
>> + inode_lock(parent->d_inode);
>
> What the hell for? What does that lock on parent change for the
> dcache lookup you are doing here?

Good point. That is overkill. As we know the dentry is a mount point and
must be in the dcache, the customary lock for performing a lookup from
the disk is not necessary.

>> + child = d_lookup(parent, &this);
>> + inode_unlock(parent->d_inode);
>> + if (!child)
>> + return -ENOENT;
>
> Take a look at d_hash_and_lookup(), BTW...

Yes. That does look like a reasonable simplification.

Eric

\
 
 \ /
  Last update: 2016-04-20 06:01    [W:0.457 / U:1.040 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site