Commit c72a04e34735ec3f19f4788b7f95017310b5e1eb

Authored by Al Viro
Committed by Linus Torvalds
1 parent 323b7fe8f8

cgroup_fs: fix cgroup use of simple_lookup()

cgroup can't use simple_lookup(), since that'd override its desired ->d_op.

Tested-by: Li Zefan <lizf@cn.fujitsu.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 1 changed file with 16 additions and 1 deletions Side-by-side Diff

... ... @@ -764,6 +764,7 @@
764 764 */
765 765  
766 766 static int cgroup_mkdir(struct inode *dir, struct dentry *dentry, int mode);
  767 +static struct dentry *cgroup_lookup(struct inode *, struct dentry *, struct nameidata *);
767 768 static int cgroup_rmdir(struct inode *unused_dir, struct dentry *dentry);
768 769 static int cgroup_populate_dir(struct cgroup *cgrp);
769 770 static const struct inode_operations cgroup_dir_inode_operations;
... ... @@ -860,6 +861,11 @@
860 861 iput(inode);
861 862 }
862 863  
  864 +static int cgroup_delete(const struct dentry *d)
  865 +{
  866 + return 1;
  867 +}
  868 +
863 869 static void remove_dir(struct dentry *d)
864 870 {
865 871 struct dentry *parent = dget(d->d_parent);
... ... @@ -1451,6 +1457,7 @@
1451 1457 {
1452 1458 static const struct dentry_operations cgroup_dops = {
1453 1459 .d_iput = cgroup_diput,
  1460 + .d_delete = cgroup_delete,
1454 1461 };
1455 1462  
1456 1463 struct inode *inode =
1457 1464  
... ... @@ -2195,11 +2202,19 @@
2195 2202 };
2196 2203  
2197 2204 static const struct inode_operations cgroup_dir_inode_operations = {
2198   - .lookup = simple_lookup,
  2205 + .lookup = cgroup_lookup,
2199 2206 .mkdir = cgroup_mkdir,
2200 2207 .rmdir = cgroup_rmdir,
2201 2208 .rename = cgroup_rename,
2202 2209 };
  2210 +
  2211 +static struct dentry *cgroup_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
  2212 +{
  2213 + if (dentry->d_name.len > NAME_MAX)
  2214 + return ERR_PTR(-ENAMETOOLONG);
  2215 + d_add(dentry, NULL);
  2216 + return NULL;
  2217 +}
2203 2218  
2204 2219 /*
2205 2220 * Check if a file is a control file