Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 42887
b: refs/heads/master
c: d18de5a
h: refs/heads/master
i:
  42885: 177a73f
  42883: 1dfd337
  42879: 4862dfc
v: v3
  • Loading branch information
Eric Dumazet authored and Linus Torvalds committed Dec 7, 2006
1 parent 7e0e46f commit b192171
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 6 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: 1c69d921ed9cc6593ad4f60c0f9951cb0d62b0b4
refs/heads/master: d18de5a2721f84ffd6a5d637915746ed47becc1c
22 changes: 17 additions & 5 deletions trunk/fs/pipe.c
Original file line number Diff line number Diff line change
Expand Up @@ -830,7 +830,14 @@ void free_pipe_info(struct inode *inode)
static struct vfsmount *pipe_mnt __read_mostly;
static int pipefs_delete_dentry(struct dentry *dentry)
{
return 1;
/*
* At creation time, we pretended this dentry was hashed
* (by clearing DCACHE_UNHASHED bit in d_flags)
* At delete time, we restore the truth : not hashed.
* (so that dput() can proceed correctly)
*/
dentry->d_flags |= DCACHE_UNHASHED;
return 0;
}

static struct dentry_operations pipefs_dentry_operations = {
Expand Down Expand Up @@ -891,17 +898,22 @@ struct file *create_write_pipe(void)
if (!inode)
goto err_file;

sprintf(name, "[%lu]", inode->i_ino);
this.len = sprintf(name, "[%lu]", inode->i_ino);
this.name = name;
this.len = strlen(name);
this.hash = inode->i_ino; /* will go */
this.hash = 0;
err = -ENOMEM;
dentry = d_alloc(pipe_mnt->mnt_sb->s_root, &this);
if (!dentry)
goto err_inode;

dentry->d_op = &pipefs_dentry_operations;
d_add(dentry, inode);
/*
* We dont want to publish this dentry into global dentry hash table.
* We pretend dentry is already hashed, by unsetting DCACHE_UNHASHED
* This permits a working /proc/$pid/fd/XXX on pipes
*/
dentry->d_flags &= ~DCACHE_UNHASHED;
d_instantiate(dentry, inode);
f->f_vfsmnt = mntget(pipe_mnt);
f->f_dentry = dentry;
f->f_mapping = inode->i_mapping;
Expand Down

0 comments on commit b192171

Please sign in to comment.