Commit 2b579bee authored by Miklos Szeredi's avatar Miklos Szeredi Committed by Linus Torvalds

[PATCH] proc: link count fix

This patch fixes bug titled "sunrpc as module and bad proc/sys link count"
reported by Jiri Slaby.

The problem was, that only proc_dir_entry->nlink was updated and the
corresponding inode->i_nlink was not.  The fix is to implement the
inode->getattr() method, and update i_nlink (if necessary).

A quick audit of proc code shows that no other attribute changes after
creation.
Signed-off-by: default avatarMiklos Szeredi <miklos@szeredi.hu>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 230649da
...@@ -249,6 +249,18 @@ out: ...@@ -249,6 +249,18 @@ out:
return error; return error;
} }
static int proc_getattr(struct vfsmount *mnt, struct dentry *dentry,
struct kstat *stat)
{
struct inode *inode = dentry->d_inode;
struct proc_dir_entry *de = PROC_I(inode)->pde;
if (de && de->nlink)
inode->i_nlink = de->nlink;
generic_fillattr(inode, stat);
return 0;
}
static struct inode_operations proc_file_inode_operations = { static struct inode_operations proc_file_inode_operations = {
.setattr = proc_notify_change, .setattr = proc_notify_change,
}; };
...@@ -475,6 +487,7 @@ static struct file_operations proc_dir_operations = { ...@@ -475,6 +487,7 @@ static struct file_operations proc_dir_operations = {
*/ */
static struct inode_operations proc_dir_inode_operations = { static struct inode_operations proc_dir_inode_operations = {
.lookup = proc_lookup, .lookup = proc_lookup,
.getattr = proc_getattr,
.setattr = proc_notify_change, .setattr = proc_notify_change,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment