cgroup fix
Al Viro
maintainerPATCH 1/1 cgroup fix
cgroup can't use simple_lookup(), since that'd override its desired ->d_op.
Tested-by Li Zefan <[email protected]>
Signed-off-by Al Viro <[email protected]>
---
kernel/cgroup.c +16 -1
@@ -764,6 +764,7 @@ EXPORT_SYMBOL_GPL(cgroup_unlock);*/ static int cgroup_mkdir (struct inode *dir,struct dentry *dentry,int mode); +static struct dentry *cgroup_lookup (struct inode *,struct dentry *,struct nameidata *);static int cgroup_rmdir (struct inode *unused_dir,struct dentry *dentry);static int cgroup_populate_dir (struct cgroup *cgrp);static const struct inode_operations cgroup_dir_inode_operations;
@@ -860,6 +861,11 @@ static void cgroup_diput(struct dentry *dentry, struct inode *inode)iput (inode); } +static int cgroup_delete (const struct dentry *d) +{ +return 1 ; +} +static void remove_dir (struct dentry *d) {struct dentry *parent =dget (d->d_parent);
@@ -1451,6 +1457,7 @@ static int cgroup_get_rootdir(struct super_block *sb) {static const struct dentry_operations cgroup_dops = { .d_iput = cgroup_diput, + .d_delete = cgroup_delete, }; struct inode *inode =
@@ -2195,12 +2202,20 @@ static const struct file_operations cgroup_file_operations = { };static const struct inode_operations cgroup_dir_inode_operations = { - .lookup = simple_lookup, + .lookup = cgroup_lookup, .mkdir = cgroup_mkdir, .rmdir = cgroup_rmdir, .rename = cgroup_rename, }; +static struct dentry *cgroup_lookup (struct inode *dir,struct dentry *dentry,struct nameidata *nd) +{ +if (dentry->d_name.len >NAME_MAX ) +return ERR_PTR (-ENAMETOOLONG ); +d_add (dentry,NULL ); +return NULL ; +} +/* * Check if a file is a control file */