@@ -339,7 +339,7 @@ enum {
#define EXTRA_FIRST_OPC LDLM_GLIMPSE_ENQUEUE
/* class_obd.c */
extern struct dentry *debugfs_lustre_root;
-extern struct kobject *lustre_kobj;
+extern struct kset *lustre_kset;
struct obd_device;
struct obd_histogram;
@@ -572,6 +572,7 @@ struct lustre_attr {
#define LUSTRE_ATTR(name, mode, show, store) \
static struct lustre_attr lustre_attr_##name = __ATTR(name, mode, show, store)
+#define LUSTRE_WO_ATTR(name) LUSTRE_ATTR(name, 0200, NULL, name##_store)
#define LUSTRE_RO_ATTR(name) LUSTRE_ATTR(name, 0444, name##_show, NULL)
#define LUSTRE_RW_ATTR(name) LUSTRE_ATTR(name, 0644, name##_show, name##_store)
@@ -34,7 +34,9 @@
#ifndef __OBD_H
#define __OBD_H
+#include <linux/kobject.h>
#include <linux/spinlock.h>
+#include <linux/sysfs.h>
#include <uapi/linux/lustre/lustre_idl.h>
#include <lustre_lib.h>
@@ -109,7 +111,8 @@ struct obd_type {
int typ_refcnt;
struct lu_device_type *typ_lu;
spinlock_t obd_type_lock;
- struct kobject *typ_kobj;
+ struct kobject typ_kobj;
+ struct completion typ_kobj_unregister;
};
struct brw_page {
@@ -623,9 +626,9 @@ struct obd_device {
*/
struct lu_ref obd_reference;
- struct kobject obd_kobj; /* sysfs object */
+ struct kset obd_kset; /* sysfs object collection */
struct kobj_type obd_ktype;
- struct completion obd_kobj_unregister;
+ struct completion obd_kobj_unregister;
};
int obd_uuid_add(struct obd_device *obd, struct obd_export *export);
@@ -956,7 +956,7 @@ static int ldlm_setup(void)
if (!ldlm_state)
return -ENOMEM;
- ldlm_kobj = kobject_create_and_add("ldlm", lustre_kobj);
+ ldlm_kobj = kobject_create_and_add("ldlm", &lustre_kset->kobj);
if (!ldlm_kobj) {
rc = -ENOMEM;
goto out;
@@ -574,7 +574,7 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt)
if (sbi->ll_dt_obd) {
err = sysfs_create_link(&sbi->ll_kset.kobj,
- &sbi->ll_dt_obd->obd_kobj,
+ &sbi->ll_dt_obd->obd_kset.kobj,
sbi->ll_dt_obd->obd_type->typ_name);
if (err < 0) {
CERROR("%s: could not register %s in llite: rc = %d\n",
@@ -585,7 +585,7 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt)
if (sbi->ll_md_obd) {
err = sysfs_create_link(&sbi->ll_kset.kobj,
- &sbi->ll_md_obd->obd_kobj,
+ &sbi->ll_md_obd->obd_kset.kobj,
sbi->ll_md_obd->obd_type->typ_name);
if (err < 0) {
CERROR("%s: could not register %s in llite: rc = %d\n",
@@ -63,8 +63,9 @@ int llite_tunables_register(void)
if (!kobj)
return -ENOMEM;
+ kobj->kset = lustre_kset;
kobject_init(kobj, &class_ktype);
- rc = kobject_add(kobj, lustre_kobj, "%s", name);
+ rc = kobject_add(kobj, &lustre_kset->kobj, "%s", name);
if (rc) {
kobject_put(kobj);
return -ENOMEM;
@@ -210,7 +210,7 @@ static int lmv_connect(const struct lu_env *env,
lmv->conn_data = *data;
lmv->lmv_tgts_kobj = kobject_create_and_add("target_obds",
- &obd->obd_kobj);
+ &obd->obd_kset.kobj);
rc = lmv_check_connect(obd);
if (rc)
goto out_sysfs;
@@ -349,7 +349,8 @@ static int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
if (lmv->lmv_tgts_kobj)
/* Even if we failed to create the link, that's fine */
- rc = sysfs_create_link(lmv->lmv_tgts_kobj, &mdc_obd->obd_kobj,
+ rc = sysfs_create_link(lmv->lmv_tgts_kobj,
+ &mdc_obd->obd_kset.kobj,
mdc_obd->obd_name);
return 0;
}
@@ -43,7 +43,7 @@ static ssize_t numobd_show(struct kobject *kobj, struct attribute *attr,
char *buf)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct lmv_desc *desc;
desc = &dev->u.lmv.desc;
@@ -55,7 +55,7 @@ static ssize_t activeobd_show(struct kobject *kobj, struct attribute *attr,
char *buf)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct lmv_desc *desc;
desc = &dev->u.lmv.desc;
@@ -191,7 +191,8 @@ int lov_connect_obd(struct obd_device *obd, __u32 index, int activate,
if (lov->lov_tgts_kobj)
/* Even if we failed, that's ok */
- rc = sysfs_create_link(lov->lov_tgts_kobj, &tgt_obd->obd_kobj,
+ rc = sysfs_create_link(lov->lov_tgts_kobj,
+ &tgt_obd->obd_kset.kobj,
tgt_obd->obd_name);
return 0;
@@ -226,7 +227,7 @@ static int lov_connect(const struct lu_env *env,
obd_getref(obd);
lov->lov_tgts_kobj = kobject_create_and_add("target_obds",
- &obd->obd_kobj);
+ &obd->obd_kset.kobj);
for (i = 0; i < lov->desc.ld_tgt_count; i++) {
tgt = lov->lov_tgts[i];
@@ -171,7 +171,7 @@ static ssize_t numobd_show(struct kobject *kobj, struct attribute *attr,
char *buf)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct lov_desc *desc;
desc = &dev->u.lov.desc;
@@ -183,7 +183,7 @@ static ssize_t activeobd_show(struct kobject *kobj, struct attribute *attr,
char *buf)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct lov_desc *desc;
desc = &dev->u.lov.desc;
@@ -41,7 +41,7 @@ static ssize_t active_show(struct kobject *kobj, struct attribute *attr,
char *buf)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
return sprintf(buf, "%u\n", !dev->u.cli.cl_import->imp_deactive);
}
@@ -50,7 +50,7 @@ static ssize_t active_store(struct kobject *kobj, struct attribute *attr,
const char *buffer, size_t count)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
unsigned long val;
int rc;
@@ -79,7 +79,7 @@ static ssize_t max_rpcs_in_flight_show(struct kobject *kobj,
{
int len;
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
__u32 max;
max = obd_get_max_rpcs_in_flight(&dev->u.cli);
@@ -94,7 +94,7 @@ static ssize_t max_rpcs_in_flight_store(struct kobject *kobj,
size_t count)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
int rc;
unsigned long val;
@@ -115,7 +115,7 @@ static ssize_t max_mod_rpcs_in_flight_show(struct kobject *kobj,
char *buf)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
u16 max;
int len;
@@ -131,7 +131,7 @@ static ssize_t max_mod_rpcs_in_flight_store(struct kobject *kobj,
size_t count)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
u16 val;
int rc;
@@ -187,7 +187,7 @@ static ssize_t max_pages_per_rpc_show(struct kobject *kobj,
char *buf)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct client_obd *cli = &dev->u.cli;
return sprintf(buf, "%d\n", cli->cl_max_pages_per_rpc);
@@ -133,6 +133,19 @@ void class_put_type(struct obd_type *type)
spin_unlock(&type->obd_type_lock);
}
+static void class_sysfs_release(struct kobject *kobj)
+{
+ struct obd_type *type = container_of(kobj, struct obd_type,
+ typ_kobj);
+
+ complete(&type->typ_kobj_unregister);
+}
+
+static struct kobj_type class_ktype = {
+ .sysfs_ops = &lustre_sysfs_ops,
+ .release = class_sysfs_release,
+};
+
#define CLASS_MAX_NAME 1024
int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
@@ -174,17 +187,21 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
type->typ_debugfs_entry = debugfs_create_dir(type->typ_name,
debugfs_lustre_root);
- type->typ_kobj = kobject_create_and_add(type->typ_name, lustre_kobj);
- if (!type->typ_kobj) {
- rc = -ENOMEM;
+ type->typ_kobj.kset = lustre_kset;
+ init_completion(&type->typ_kobj_unregister);
+ rc = kobject_init_and_add(&type->typ_kobj, &class_ktype,
+ &lustre_kset->kobj, "%s", type->typ_name);
+ if (rc)
goto failed;
- }
+
if (ldt) {
type->typ_lu = ldt;
rc = lu_device_type_init(ldt);
- if (rc != 0)
+ if (rc != 0) {
+ kobject_put(&type->typ_kobj);
goto failed;
+ }
}
spin_lock(&obd_types_lock);
@@ -193,9 +210,7 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
return 0;
- failed:
- if (type->typ_kobj)
- kobject_put(type->typ_kobj);
+failed:
kfree(type->typ_name);
kfree(type->typ_md_ops);
kfree(type->typ_dt_ops);
@@ -222,8 +237,8 @@ int class_unregister_type(const char *name)
return -EBUSY;
}
- if (type->typ_kobj)
- kobject_put(type->typ_kobj);
+ kobject_put(&type->typ_kobj);
+ wait_for_completion(&type->typ_kobj_unregister);
debugfs_remove_recursive(type->typ_debugfs_entry);
@@ -353,7 +353,7 @@ static ssize_t uuid_show(struct kobject *kobj, struct attribute *attr,
char *buf)
{
struct obd_device *obd = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
return sprintf(buf, "%s\n", obd->obd_uuid.uuid);
}
@@ -363,7 +363,7 @@ static ssize_t blocksize_show(struct kobject *kobj, struct attribute *attr,
char *buf)
{
struct obd_device *obd = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct obd_statfs osfs;
int rc = obd_statfs(NULL, obd->obd_self_export, &osfs,
get_jiffies_64() - OBD_STATFS_CACHE_SECONDS * HZ,
@@ -379,7 +379,7 @@ static ssize_t kbytestotal_show(struct kobject *kobj, struct attribute *attr,
char *buf)
{
struct obd_device *obd = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct obd_statfs osfs;
int rc = obd_statfs(NULL, obd->obd_self_export, &osfs,
get_jiffies_64() - OBD_STATFS_CACHE_SECONDS * HZ,
@@ -402,7 +402,7 @@ static ssize_t kbytesfree_show(struct kobject *kobj, struct attribute *attr,
char *buf)
{
struct obd_device *obd = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct obd_statfs osfs;
int rc = obd_statfs(NULL, obd->obd_self_export, &osfs,
get_jiffies_64() - OBD_STATFS_CACHE_SECONDS * HZ,
@@ -425,7 +425,7 @@ static ssize_t kbytesavail_show(struct kobject *kobj, struct attribute *attr,
char *buf)
{
struct obd_device *obd = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct obd_statfs osfs;
int rc = obd_statfs(NULL, obd->obd_self_export, &osfs,
get_jiffies_64() - OBD_STATFS_CACHE_SECONDS * HZ,
@@ -448,7 +448,7 @@ static ssize_t filestotal_show(struct kobject *kobj, struct attribute *attr,
char *buf)
{
struct obd_device *obd = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct obd_statfs osfs;
int rc = obd_statfs(NULL, obd->obd_self_export, &osfs,
get_jiffies_64() - OBD_STATFS_CACHE_SECONDS * HZ,
@@ -464,7 +464,7 @@ static ssize_t filesfree_show(struct kobject *kobj, struct attribute *attr,
char *buf)
{
struct obd_device *obd = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct obd_statfs osfs;
int rc = obd_statfs(NULL, obd->obd_self_export, &osfs,
get_jiffies_64() - OBD_STATFS_CACHE_SECONDS * HZ,
@@ -1008,7 +1008,7 @@ int lprocfs_rd_connect_flags(struct seq_file *m, void *data)
static void obd_sysfs_release(struct kobject *kobj)
{
struct obd_device *obd = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
complete(&obd->obd_kobj_unregister);
}
@@ -1017,13 +1017,20 @@ int lprocfs_obd_setup(struct obd_device *obd, bool uuid_only)
{
int rc;
+ if (!obd || obd->obd_magic != OBD_DEVICE_MAGIC)
+ return -ENODEV;
+
+ rc = kobject_set_name(&obd->obd_kset.kobj, "%s", obd->obd_name);
+ if (rc)
+ return rc;
+
obd->obd_ktype.sysfs_ops = &lustre_sysfs_ops;
obd->obd_ktype.release = obd_sysfs_release;
+ obd->obd_kset.kobj.parent = &obd->obd_type->typ_kobj;
+ obd->obd_kset.kobj.ktype = &obd->obd_ktype;
init_completion(&obd->obd_kobj_unregister);
- rc = kobject_init_and_add(&obd->obd_kobj, &obd->obd_ktype,
- obd->obd_type->typ_kobj,
- "%s", obd->obd_name);
+ rc = kset_register(&obd->obd_kset);
if (rc)
return rc;
@@ -1032,9 +1039,9 @@ int lprocfs_obd_setup(struct obd_device *obd, bool uuid_only)
else
obd->obd_attrs = obd_def_attrs;
- rc = sysfs_create_files(&obd->obd_kobj, obd->obd_attrs);
+ rc = sysfs_create_files(&obd->obd_kset.kobj, obd->obd_attrs);
if (rc) {
- kobject_put(&obd->obd_kobj);
+ kset_unregister(&obd->obd_kset);
return rc;
}
@@ -1053,12 +1060,16 @@ int lprocfs_obd_cleanup(struct obd_device *obd)
debugfs_remove_recursive(obd->obd_debugfs_entry);
+ /* obd device never allocated a kset */
+ if (!obd->obd_kset.kobj.state_initialized)
+ return 0;
+
if (obd->obd_attrs) {
- sysfs_remove_files(&obd->obd_kobj, obd->obd_attrs);
+ sysfs_remove_files(&obd->obd_kset.kobj, obd->obd_attrs);
obd->obd_attrs = NULL;
}
- kobject_put(&obd->obd_kobj);
+ kset_unregister(&obd->obd_kset);
wait_for_completion(&obd->obd_kobj_unregister);
return 0;
@@ -471,8 +471,8 @@ static int obd_device_list_open(struct inode *inode, struct file *file)
.release = seq_release,
};
-struct kobject *lustre_kobj;
-EXPORT_SYMBOL_GPL(lustre_kobj);
+struct kset *lustre_kset;
+EXPORT_SYMBOL_GPL(lustre_kset);
static const struct attribute_group lustre_attr_group = {
.attrs = lustre_attrs,
@@ -482,14 +482,14 @@ int class_procfs_init(void)
{
int rc = -ENOMEM;
- lustre_kobj = kobject_create_and_add("lustre", fs_kobj);
- if (!lustre_kobj)
+ lustre_kset = kset_create_and_add("lustre", NULL, fs_kobj);
+ if (!lustre_kset)
goto out;
/* Create the files associated with this kobject */
- rc = sysfs_create_group(lustre_kobj, &lustre_attr_group);
+ rc = sysfs_create_group(&lustre_kset->kobj, &lustre_attr_group);
if (rc) {
- kobject_put(lustre_kobj);
+ kset_unregister(lustre_kset);
goto out;
}
@@ -507,8 +507,9 @@ int class_procfs_clean(void)
debugfs_lustre_root = NULL;
- sysfs_remove_group(lustre_kobj, &lustre_attr_group);
- kobject_put(lustre_kobj);
+ sysfs_remove_group(&lustre_kset->kobj, &lustre_attr_group);
+
+ kset_unregister(lustre_kset);
return 0;
}
@@ -158,5 +158,5 @@ static ssize_t max_dirty_mb_store(struct kobject *kobj, struct attribute *attr,
int obd_sysctl_init(void)
{
- return sysfs_create_group(lustre_kobj, &lustre_attr_group);
+ return sysfs_create_group(&lustre_kset->kobj, &lustre_attr_group);
}
@@ -44,7 +44,7 @@ static ssize_t active_show(struct kobject *kobj, struct attribute *attr,
char *buf)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
return sprintf(buf, "%d\n", !dev->u.cli.cl_import->imp_deactive);
}
@@ -54,7 +54,7 @@ static ssize_t active_store(struct kobject *kobj, struct attribute *attr,
size_t count)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
int rc;
unsigned long val;
@@ -80,7 +80,7 @@ static ssize_t max_rpcs_in_flight_show(struct kobject *kobj,
char *buf)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct client_obd *cli = &dev->u.cli;
return sprintf(buf, "%u\n", cli->cl_max_rpcs_in_flight);
@@ -92,7 +92,7 @@ static ssize_t max_rpcs_in_flight_store(struct kobject *kobj,
size_t count)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct client_obd *cli = &dev->u.cli;
int rc;
unsigned long val;
@@ -133,7 +133,7 @@ static ssize_t max_dirty_mb_show(struct kobject *kobj,
char *buf)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct client_obd *cli = &dev->u.cli;
long val;
int mult;
@@ -149,7 +149,7 @@ static ssize_t max_dirty_mb_store(struct kobject *kobj,
size_t count)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct client_obd *cli = &dev->u.cli;
int rc;
unsigned long pages_number;
@@ -247,7 +247,7 @@ static ssize_t cur_dirty_bytes_show(struct kobject *kobj,
char *buf)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct client_obd *cli = &dev->u.cli;
return sprintf(buf, "%lu\n", cli->cl_dirty_pages << PAGE_SHIFT);
@@ -260,7 +260,7 @@ static ssize_t cur_grant_bytes_show(struct kobject *kobj,
char *buf)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct client_obd *cli = &dev->u.cli;
return sprintf(buf, "%lu\n", cli->cl_avail_grant);
@@ -272,7 +272,7 @@ static ssize_t cur_grant_bytes_store(struct kobject *kobj,
size_t count)
{
struct obd_device *obd = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct client_obd *cli = &obd->u.cli;
int rc;
unsigned long long val;
@@ -298,7 +298,7 @@ static ssize_t cur_lost_grant_bytes_show(struct kobject *kobj,
char *buf)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct client_obd *cli = &dev->u.cli;
return sprintf(buf, "%lu\n", cli->cl_lost_grant);
@@ -310,7 +310,7 @@ static ssize_t cur_dirty_grant_bytes_show(struct kobject *kobj,
char *buf)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct client_obd *cli = &dev->u.cli;
return sprintf(buf, "%lu\n", cli->cl_dirty_grant);
@@ -322,7 +322,7 @@ static ssize_t grant_shrink_interval_show(struct kobject *kobj,
char *buf)
{
struct obd_device *obd = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
return sprintf(buf, "%d\n", obd->u.cli.cl_grant_shrink_interval);
}
@@ -333,7 +333,7 @@ static ssize_t grant_shrink_interval_store(struct kobject *kobj,
size_t count)
{
struct obd_device *obd = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
int rc;
unsigned long val;
@@ -355,7 +355,7 @@ static ssize_t checksums_show(struct kobject *kobj,
char *buf)
{
struct obd_device *obd = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
return sprintf(buf, "%d\n", obd->u.cli.cl_checksum ? 1 : 0);
}
@@ -366,7 +366,7 @@ static ssize_t checksums_store(struct kobject *kobj,
size_t count)
{
struct obd_device *obd = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
int rc;
unsigned long val;
@@ -442,7 +442,7 @@ static ssize_t resend_count_show(struct kobject *kobj,
char *buf)
{
struct obd_device *obd = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
return sprintf(buf, "%u\n", atomic_read(&obd->u.cli.cl_resends));
}
@@ -453,7 +453,7 @@ static ssize_t resend_count_store(struct kobject *kobj,
size_t count)
{
struct obd_device *obd = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
int rc;
unsigned long val;
@@ -472,7 +472,7 @@ static ssize_t contention_seconds_show(struct kobject *kobj,
char *buf)
{
struct obd_device *obd = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct osc_device *od = obd2osc_dev(obd);
return sprintf(buf, "%u\n", od->od_contention_time);
@@ -484,7 +484,7 @@ static ssize_t contention_seconds_store(struct kobject *kobj,
size_t count)
{
struct obd_device *obd = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct osc_device *od = obd2osc_dev(obd);
int rc;
int val;
@@ -507,7 +507,7 @@ static ssize_t lockless_truncate_show(struct kobject *kobj,
char *buf)
{
struct obd_device *obd = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct osc_device *od = obd2osc_dev(obd);
return sprintf(buf, "%u\n", od->od_lockless_truncate);
@@ -519,7 +519,7 @@ static ssize_t lockless_truncate_store(struct kobject *kobj,
size_t count)
{
struct obd_device *obd = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct osc_device *od = obd2osc_dev(obd);
int rc;
unsigned int val;
@@ -539,7 +539,7 @@ static ssize_t destroys_in_flight_show(struct kobject *kobj,
char *buf)
{
struct obd_device *obd = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
return sprintf(buf, "%u\n",
atomic_read(&obd->u.cli.cl_destroy_in_flight));
@@ -551,7 +551,7 @@ static ssize_t max_pages_per_rpc_show(struct kobject *kobj,
char *buf)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct client_obd *cli = &dev->u.cli;
return sprintf(buf, "%d\n", cli->cl_max_pages_per_rpc);
@@ -563,7 +563,7 @@ static ssize_t max_pages_per_rpc_store(struct kobject *kobj,
size_t count)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct client_obd *cli = &dev->u.cli;
struct obd_connect_data *ocd = &cli->cl_import->imp_connect_data;
int chunk_mask, rc;
@@ -598,7 +598,7 @@ static ssize_t unstable_stats_show(struct kobject *kobj,
char *buf)
{
struct obd_device *dev = container_of(kobj, struct obd_device,
- obd_kobj);
+ obd_kset.kobj);
struct client_obd *cli = &dev->u.cli;
long pages;
int mb;