Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+13 −0
Original line number Original line Diff line number Diff line
@@ -249,6 +249,18 @@ static int proc_notify_change(struct dentry *dentry, struct iattr *iattr)
	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 = {
 */
 */
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,
};
};