]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - fs/proc/generic.c
Merge tag 'v2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / fs / proc / generic.c
index dd29f033766101acfcee512850db17c8e086c7ed..01e07f2a188fb0d58686d14b36e63e02b7dea08b 100644 (file)
@@ -400,7 +400,7 @@ static const struct inode_operations proc_link_inode_operations = {
  * smarter: we could keep a "volatile" flag in the 
  * inode to indicate which ones to keep.
  */
-static int proc_delete_dentry(struct dentry * dentry)
+static int proc_delete_dentry(const struct dentry * dentry)
 {
        return 1;
 }
@@ -425,13 +425,10 @@ struct dentry *proc_lookup_de(struct proc_dir_entry *de, struct inode *dir,
                if (de->namelen != dentry->d_name.len)
                        continue;
                if (!memcmp(dentry->d_name.name, de->name, de->namelen)) {
-                       unsigned int ino;
-
-                       ino = de->low_ino;
                        pde_get(de);
                        spin_unlock(&proc_subdir_lock);
                        error = -EINVAL;
-                       inode = proc_get_inode(dir->i_sb, ino, de);
+                       inode = proc_get_inode(dir->i_sb, de);
                        goto out_unlock;
                }
        }
@@ -439,7 +436,7 @@ struct dentry *proc_lookup_de(struct proc_dir_entry *de, struct inode *dir,
 out_unlock:
 
        if (inode) {
-               dentry->d_op = &proc_dentry_operations;
+               d_set_d_op(dentry, &proc_dentry_operations);
                d_add(dentry, inode);
                return NULL;
        }
@@ -768,12 +765,7 @@ EXPORT_SYMBOL(proc_create_data);
 
 static void free_proc_entry(struct proc_dir_entry *de)
 {
-       unsigned int ino = de->low_ino;
-
-       if (ino < PROC_DYNAMIC_FIRST)
-               return;
-
-       release_inode_number(ino);
+       release_inode_number(de->low_ino);
 
        if (S_ISLNK(de->mode))
                kfree(de->data);
@@ -834,12 +826,9 @@ void remove_proc_entry(const char *name, struct proc_dir_entry *parent)
 
                wait_for_completion(de->pde_unload_completion);
 
-               goto continue_removing;
+               spin_lock(&de->pde_unload_lock);
        }
-       spin_unlock(&de->pde_unload_lock);
 
-continue_removing:
-       spin_lock(&de->pde_unload_lock);
        while (!list_empty(&de->pde_openers)) {
                struct pde_opener *pdeo;