summaryrefslogtreecommitdiff
path: root/fs/btrfs/sysfs.c
diff options
context:
space:
mode:
authorChris Mason <chris.mason@oracle.com>2007-12-18 16:15:09 -0500
committerChris Mason <chris.mason@oracle.com>2008-09-25 11:03:58 -0400
commit6da6abae027e2dbc59bca5f4168b0760f25068c7 (patch)
treea1e9c70c930e8b01baead984b706042067148788 /fs/btrfs/sysfs.c
parentc59f8951d48c5eb000926935f3ab063d8181d1ee (diff)
downloadlwn-6da6abae027e2dbc59bca5f4168b0760f25068c7.tar.gz
lwn-6da6abae027e2dbc59bca5f4168b0760f25068c7.zip
Btrfs: Back port to 2.6.18-el kernels
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/sysfs.c')
-rw-r--r--fs/btrfs/sysfs.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c
index 1671c731800e..cd673ca9bb98 100644
--- a/fs/btrfs/sysfs.c
+++ b/fs/btrfs/sysfs.c
@@ -189,12 +189,29 @@ static struct kset btrfs_kset;
int btrfs_sysfs_add_super(struct btrfs_fs_info *fs)
{
int error;
+ char *name;
+ char c;
+ int len = strlen(fs->sb->s_id) + 1;
+ int i;
+
+ name = kmalloc(len, GFP_NOFS);
+ if (!name) {
+ error = -ENOMEM;
+ goto fail;
+ }
+
+ for (i = 0; i < len; i++) {
+ c = fs->sb->s_id[i];
+ if (c == '/' || c == '\\')
+ c = '!';
+ name[i] = c;
+ }
+ name[len] = '\0';
fs->super_kobj.kset = &btrfs_kset;
fs->super_kobj.ktype = &btrfs_super_ktype;
- error = kobject_set_name(&fs->super_kobj, "%s",
- fs->sb->s_id);
+ error = kobject_set_name(&fs->super_kobj, "%s", name);
if (error)
goto fail;
@@ -202,9 +219,11 @@ int btrfs_sysfs_add_super(struct btrfs_fs_info *fs)
if (error)
goto fail;
+ kfree(name);
return 0;
fail:
+ kfree(name);
printk(KERN_ERR "btrfs: sysfs creation for super failed\n");
return error;
}