X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Flod%2Flod_dev.c;h=828552402bec4601ff6b204f585b56c8ad774a44;hp=96e0e2a8a3c334c704cddb2493f632b4a2839615;hb=392dab3c01bb802892466f9a05ef1b56406b8522;hpb=f1ca2c0bd059e3606225127e5ff72b4db9a1ed6e diff --git a/lustre/lod/lod_dev.c b/lustre/lod/lod_dev.c index 96e0e2a..8285524 100644 --- a/lustre/lod/lod_dev.c +++ b/lustre/lod/lod_dev.c @@ -2223,13 +2223,12 @@ static struct obd_ops lod_obd_device_ops = { .o_pool_del = lod_pool_del, }; -static struct obd_type sym; +static struct obd_type *sym; static int __init lod_init(void) { struct dentry *symlink; struct obd_type *type; - struct kobject *kobj; struct qstr dname; int rc; @@ -2244,6 +2243,15 @@ static int __init lod_init(void) return rc; } + sym = class_setup_tunables(LUSTRE_LOV_NAME); + if (IS_ERR(sym)) { + rc = PTR_ERR(sym); + /* does real "lov" already exist ? */ + if (rc == -EEXIST) + GOTO(try_proc, rc = 0); + GOTO(no_lov, rc); + } + /* create "lov" entry for compatibility purposes */ dname.name = "lov"; dname.len = strlen(dname.name); @@ -2256,26 +2264,11 @@ static int __init lod_init(void) rc = symlink ? PTR_ERR(symlink) : -ENOMEM; GOTO(no_lov, rc); } - sym.typ_debugfs_entry = symlink; + sym->typ_debugfs_entry = symlink; } else { dput(symlink); } - kobj = kset_find_obj(lustre_kset, dname.name); - if (kobj) { - kobject_put(kobj); - goto try_proc; - } - - kobj = class_setup_tunables(dname.name); - if (IS_ERR(kobj)) { - rc = PTR_ERR(kobj); - if (sym.typ_debugfs_entry) - ldebugfs_remove(&sym.typ_debugfs_entry); - GOTO(no_lov, rc); - } - sym.typ_kobj = kobj; - try_proc: type = class_search_type(LUSTRE_LOV_NAME); if (type && type->typ_procroot) @@ -2295,8 +2288,10 @@ no_lov: static void __exit lod_exit(void) { - ldebugfs_remove(&sym.typ_debugfs_entry); - kobject_put(sym.typ_kobj); + if (!IS_ERR_OR_NULL(sym)) { + ldebugfs_remove(&sym->typ_debugfs_entry); + kobject_put(&sym->typ_kobj); + } class_unregister_type(LUSTRE_LOD_NAME); lu_kmem_fini(lod_caches); }