struct ll_sb_info *lsi_llsbi; /* add'l client sbi info */
struct dt_device *lsi_dt_dev; /* dt device to access disk fs*/
struct kref lsi_mounts; /* references to the srv_mnt */
- struct kobject *lsi_kobj;
char lsi_svname[MTI_NAME_MAXLEN];
/* lsi_osd_obdname format = 'lsi->ls_svname'-osd */
char lsi_osd_obdname[MTI_NAME_MAXLEN + 4];
struct lustre_cfg *lustre_cfg_rename(struct lustre_cfg *cfg,
const char *new_name);
void print_lustre_cfg(struct lustre_cfg *lcfg);
-int class_process_config(struct lustre_cfg *lcfg);
+int class_process_config(struct lustre_cfg *lcfg, struct kobject *kobj);
ssize_t class_set_global(const char *param);
ssize_t class_modify_config(struct lustre_cfg *lcfg, const char *prefix,
struct kobject *kobj);
/* Passed as data param to class_config_parse_llog */
struct config_llog_instance {
unsigned long cfg_instance;
+ struct kobject *cfg_kobj;
struct super_block *cfg_sb;
struct obd_uuid cfg_uuid;
llog_cb_t cfg_callback;
* joker tries to mount the same fs at two mount points.
*/
cfg->cfg_instance = cfg_instance;
+ cfg->cfg_kobj = &sbi->ll_kset.kobj;
cfg->cfg_uuid = lsi->lsi_llsbi->ll_sb_uuid;
cfg->cfg_callback = class_config_llog_handler;
cfg->cfg_sub_clds = CONFIG_SUB_CLIENT;
int ll_debugfs_register_super(struct super_block *sb, const char *name)
{
- struct lustre_sb_info *lsi = s2lsi(sb);
struct ll_sb_info *sbi = ll_s2sbi(sb);
int err, id;
if (err)
RETURN(err);
- lsi->lsi_kobj = kobject_get(&sbi->ll_kset.kobj);
-
if (IS_ERR_OR_NULL(llite_root))
RETURN(0);
void ll_debugfs_unregister_super(struct super_block *sb)
{
- struct lustre_sb_info *lsi = s2lsi(sb);
struct ll_sb_info *sbi = ll_s2sbi(sb);
debugfs_remove_recursive(sbi->ll_debugfs_entry);
sysfs_remove_link(&sbi->ll_kset.kobj,
sbi->ll_md_obd->obd_type->typ_name);
- kobject_put(lsi->lsi_kobj);
-
kset_unregister(&sbi->ll_kset);
wait_for_completion(&sbi->ll_kobj_unregister);
CDEBUG(D_INFO, "ir apply logs %lld/%lld for %s -> %s\n",
prev_version, max_version, obdname, params);
- rc = class_process_config(lcfg);
+ rc = class_process_config(lcfg, &obd->obd_kset.kobj);
OBD_FREE(lcfg, lustre_cfg_len(lcfg->lcfg_bufcount,
lcfg->lcfg_buflens));
if (rc)
switch (cmd) {
case LCFG_SET_TIMEOUT:
if (!obd_timeout_set || lcfg->lcfg_num > obd_timeout)
- class_process_config(lcfg);
+ class_process_config(lcfg, &lustre_kset->kobj);
break;
case LCFG_SET_LDLM_TIMEOUT:
if (!ldlm_timeout_set || lcfg->lcfg_num > ldlm_timeout)
- class_process_config(lcfg);
+ class_process_config(lcfg, &lustre_kset->kobj);
break;
default:
break;
if (!rc)
rc = lustre_cfg_sanity_check(lcfg, data->ioc_plen1);
if (!rc)
- rc = class_process_config(lcfg);
+ rc = class_process_config(lcfg, NULL);
OBD_FREE(lcfg, data->ioc_plen1);
GOTO(out, rc);
* These may come from direct calls (e.g. class_manual_cleanup)
* or processing the config llog, or ioctl from lctl.
*/
-int class_process_config(struct lustre_cfg *lcfg)
+int class_process_config(struct lustre_cfg *lcfg, struct kobject *kobj)
{
struct obd_device *obd;
struct lnet_nid nid;
/* llite has no OBD */
if (class_match_param(lustre_cfg_string(lcfg, 1),
PARAM_LLITE, NULL) == 0) {
- struct lustre_sb_info *lsi;
- unsigned long addr;
ssize_t count;
- /*
- * The instance name contains the sb:
- * lustre-client-aacfe000
- */
- tmp = strrchr(lustre_cfg_string(lcfg, 0), '-');
- if (!tmp || !*(++tmp))
- GOTO(out, err = -EINVAL);
-
- if (sscanf(tmp, "%lx", &addr) != 1)
- GOTO(out, err = -EINVAL);
-
- lsi = s2lsi((struct super_block *)addr);
- /* This better be a real Lustre superblock! */
- LASSERT(lsi->lsi_lmd->lmd_magic == LMD_MAGIC);
-
- count = class_modify_config(lcfg, PARAM_LLITE,
- lsi->lsi_kobj);
+ LASSERT(kobj);
+ count = class_modify_config(lcfg, PARAM_LLITE, kobj);
err = count < 0 ? count : 0;
GOTO(out, err);
} else if ((class_match_param(lustre_cfg_string(lcfg, 1),
lcfg_new->lcfg_nal = 0; /* illegal value for obsolete field */
- rc = class_process_config(lcfg_new);
+ rc = class_process_config(lcfg_new, cfg->cfg_kobj);
OBD_FREE(lcfg_new, lustre_cfg_len(lcfg_new->lcfg_bufcount,
lcfg_new->lcfg_buflens));
out_inst:
RETURN(-ENOMEM);
lustre_cfg_init(lcfg, LCFG_CLEANUP, &bufs);
- rc = class_process_config(lcfg);
+ rc = class_process_config(lcfg, NULL);
if (rc) {
CERROR("cleanup failed %d: %s\n", rc, obd->obd_name);
GOTO(out, rc);
/* the lcfg is almost the same for both ops */
lcfg->lcfg_command = LCFG_DETACH;
- rc = class_process_config(lcfg);
+ rc = class_process_config(lcfg, NULL);
if (rc)
CERROR("detach failed %d: %s\n", rc, obd->obd_name);
out:
return -ENOMEM;
lustre_cfg_init(lcfg, cmd, &bufs);
lcfg->lcfg_nid = nid;
- rc = class_process_config(lcfg);
+ rc = class_process_config(lcfg, NULL);
OBD_FREE(lcfg, lustre_cfg_len(lcfg->lcfg_bufcount, lcfg->lcfg_buflens));
return rc;
}