{ "tid", &spufs_tid_fops, 0444, },
        { "stat", &spufs_stat_fops, 0444, },
        { "switch_log", &spufs_switch_log_fops, 0444 },
-       { ".ctx", &spufs_ctx_fops, 0444, },
        {},
 };
 
        { "object-id", &spufs_object_id_ops, 0666, },
        { "tid", &spufs_tid_fops, 0444, },
        { "stat", &spufs_stat_fops, 0444, },
+       {},
+};
+
+struct spufs_tree_descr spufs_dir_debug_contents[] = {
        { ".ctx", &spufs_ctx_fops, 0444, },
        {},
 };
 
 
 #include "spufs.h"
 
+struct spufs_sb_info {
+       int debug;
+};
+
 static struct kmem_cache *spufs_inode_cache;
 char *isolated_loader;
 static int isolated_loader_size;
 
+static struct spufs_sb_info *spufs_get_sb_info(struct super_block *sb)
+{
+       return sb->s_fs_info;
+}
+
 static struct inode *
 spufs_alloc_inode(struct super_block *sb)
 {
        if (ret)
                goto out_free_ctx;
 
+       if (spufs_get_sb_info(dir->i_sb)->debug)
+               ret = spufs_fill_dir(dentry, spufs_dir_debug_contents,
+                               mode, ctx);
+
+       if (ret)
+               goto out_free_ctx;
+
        d_instantiate(dentry, inode);
        dget(dentry);
        dir->i_nlink++;
 
 /* File system initialization */
 enum {
-       Opt_uid, Opt_gid, Opt_mode, Opt_err,
+       Opt_uid, Opt_gid, Opt_mode, Opt_debug, Opt_err,
 };
 
 static match_table_t spufs_tokens = {
-       { Opt_uid,  "uid=%d" },
-       { Opt_gid,  "gid=%d" },
-       { Opt_mode, "mode=%o" },
-       { Opt_err,   NULL  },
+       { Opt_uid,   "uid=%d" },
+       { Opt_gid,   "gid=%d" },
+       { Opt_mode,  "mode=%o" },
+       { Opt_debug, "debug" },
+       { Opt_err,    NULL  },
 };
 
 static int
-spufs_parse_options(char *options, struct inode *root)
+spufs_parse_options(struct super_block *sb, char *options, struct inode *root)
 {
        char *p;
        substring_t args[MAX_OPT_ARGS];
                                return 0;
                        root->i_mode = option | S_IFDIR;
                        break;
+               case Opt_debug:
+                       spufs_get_sb_info(sb)->debug = 1;
+                       break;
                default:
                        return 0;
                }
        SPUFS_I(inode)->i_ctx = NULL;
 
        ret = -EINVAL;
-       if (!spufs_parse_options(data, inode))
+       if (!spufs_parse_options(sb, data, inode))
                goto out_iput;
 
        ret = -ENOMEM;
 static int
 spufs_fill_super(struct super_block *sb, void *data, int silent)
 {
+       struct spufs_sb_info *info;
        static struct super_operations s_ops = {
                .alloc_inode = spufs_alloc_inode,
                .destroy_inode = spufs_destroy_inode,
 
        save_mount_options(sb, data);
 
+       info = kzalloc(sizeof(*info), GFP_KERNEL);
+       if (!info)
+               return -ENOMEM;
+
        sb->s_maxbytes = MAX_LFS_FILESIZE;
        sb->s_blocksize = PAGE_CACHE_SIZE;
        sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
        sb->s_magic = SPUFS_MAGIC;
        sb->s_op = &s_ops;
+       sb->s_fs_info = info;
 
        return spufs_create_root(sb, data);
 }