int reiserfs_proc_info_done(struct super_block *sb)
 {
        struct proc_dir_entry *de = REISERFS_SB(sb)->procdir;
-       char b[BDEVNAME_SIZE];
-       char *s;
+       if (de) {
+               char b[BDEVNAME_SIZE];
+               char *s;
 
-       /* Some block devices use /'s */
-       strlcpy(b, reiserfs_bdevname(sb), BDEVNAME_SIZE);
-       s = strchr(b, '/');
-       if (s)
-               *s = '!';
+               /* Some block devices use /'s */
+               strlcpy(b, reiserfs_bdevname(sb), BDEVNAME_SIZE);
+               s = strchr(b, '/');
+               if (s)
+                       *s = '!';
 
-       if (de) {
-               remove_proc_entry("journal", de);
-               remove_proc_entry("oidmap", de);
-               remove_proc_entry("on-disk-super", de);
-               remove_proc_entry("bitmap", de);
-               remove_proc_entry("per-level", de);
-               remove_proc_entry("super", de);
-               remove_proc_entry("version", de);
-       }
-       spin_lock(&__PINFO(sb).lock);
-       __PINFO(sb).exiting = 1;
-       spin_unlock(&__PINFO(sb).lock);
-       if (proc_info_root) {
-               remove_proc_entry(b, proc_info_root);
+               remove_proc_subtree(b, proc_info_root);
                REISERFS_SB(sb)->procdir = NULL;
        }
        return 0;