Skip to content

Commit

Permalink
powerpc/spufs: only add ".ctx" file with "debug" mount option
Browse files Browse the repository at this point in the history
Currently, the .ctx debug file in spu context directories is always
present.

We'd prefer to prevent users from relying on this file, so add a
"debug" mount option to spufs. The .ctx file will only be added to
the context directories when this option is present.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
  • Loading branch information
Jeremy Kerr committed Jul 9, 2008
1 parent 6f7dde8 commit 2c3e478
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 8 deletions.
5 changes: 4 additions & 1 deletion arch/powerpc/platforms/cell/spufs/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -2645,7 +2645,6 @@ struct spufs_tree_descr spufs_dir_contents[] = {
{ "tid", &spufs_tid_fops, 0444, },
{ "stat", &spufs_stat_fops, 0444, },
{ "switch_log", &spufs_switch_log_fops, 0444 },
{ ".ctx", &spufs_ctx_fops, 0444, },
{},
};

Expand All @@ -2671,6 +2670,10 @@ struct spufs_tree_descr spufs_dir_nosched_contents[] = {
{ "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, },
{},
};
Expand Down
40 changes: 33 additions & 7 deletions arch/powerpc/platforms/cell/spufs/inode.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,19 @@

#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)
{
Expand Down Expand Up @@ -280,6 +289,13 @@ spufs_mkdir(struct inode *dir, struct dentry *dentry, unsigned int flags,
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++;
Expand Down Expand Up @@ -640,18 +656,19 @@ long spufs_create(struct nameidata *nd, unsigned int flags, mode_t mode,

/* 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];
Expand Down Expand Up @@ -679,6 +696,9 @@ spufs_parse_options(char *options, struct inode *root)
return 0;
root->i_mode = option | S_IFDIR;
break;
case Opt_debug:
spufs_get_sb_info(sb)->debug = 1;
break;
default:
return 0;
}
Expand Down Expand Up @@ -737,7 +757,7 @@ spufs_create_root(struct super_block *sb, void *data)
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;
Expand All @@ -755,6 +775,7 @@ spufs_create_root(struct super_block *sb, void *data)
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,
Expand All @@ -766,11 +787,16 @@ spufs_fill_super(struct super_block *sb, void *data, int silent)

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);
}
Expand Down
1 change: 1 addition & 0 deletions arch/powerpc/platforms/cell/spufs/spufs.h
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,7 @@ struct spufs_tree_descr {

extern struct spufs_tree_descr spufs_dir_contents[];
extern struct spufs_tree_descr spufs_dir_nosched_contents[];
extern struct spufs_tree_descr spufs_dir_debug_contents[];

/* system call implementation */
extern struct spufs_calls spufs_calls;
Expand Down

0 comments on commit 2c3e478

Please sign in to comment.