X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fobdclass%2Fobd_config.c;h=25f9d5a8543098a36174d02b00777ee671f3e2e9;hp=ccaa00de1cc2fb8e34dcc1268c1a1826cbe9553b;hb=87319353501f4520284186e9e8bdb57695f90feb;hpb=0521288fde9ed5862c1a01b0a884e91b8ad9841f diff --git a/lustre/obdclass/obd_config.c b/lustre/obdclass/obd_config.c index ccaa00d..25f9d5a 100644 --- a/lustre/obdclass/obd_config.c +++ b/lustre/obdclass/obd_config.c @@ -120,8 +120,9 @@ EXPORT_SYMBOL(class_parse_nid); /********************** class fns **********************/ -/* Create a new device and set the type, name and uuid. If - * successful, the new device can be accessed by either name or uuid. +/** + * Create a new device and set the type, name and uuid. If successful, the new + * device can be accessed by either name or uuid. */ int class_attach(struct lustre_cfg *lcfg) { @@ -168,6 +169,10 @@ int class_attach(struct lustre_cfg *lcfg) LASSERTF(strncmp(obd->obd_name, name, strlen(name)) == 0, "%p obd_name %s != %s\n", obd, obd->obd_name, name); + rwlock_init(&obd->obd_pool_lock); + obd->obd_pool_limit = 0; + obd->obd_pool_slv = 0; + CFS_INIT_LIST_HEAD(&obd->obd_exports); CFS_INIT_LIST_HEAD(&obd->obd_exports_timed); CFS_INIT_LIST_HEAD(&obd->obd_nid_stats); @@ -196,8 +201,8 @@ int class_attach(struct lustre_cfg *lcfg) len = strlen(uuid); if (len >= sizeof(obd->obd_uuid)) { - CERROR("uuid must be < "LPSZ" bytes long\n", - sizeof(obd->obd_uuid)); + CERROR("uuid must be < %d bytes long\n", + (int)sizeof(obd->obd_uuid)); GOTO(out, rc = -EINVAL); } memcpy(obd->obd_uuid.uuid, uuid, len); @@ -338,10 +343,10 @@ int class_detach(struct obd_device *obd, struct lustre_cfg *lcfg) obd->obd_name, obd->obd_uuid.uuid); class_decref(obd); - + /* not strictly necessary, but cleans up eagerly */ obd_zombie_impexp_cull(); - + RETURN(0); } @@ -450,8 +455,7 @@ int class_cleanup(struct obd_device *obd, struct lustre_cfg *lcfg) /* destroy a nid-stats hash body */ lustre_hash_exit(&obd->obd_nid_stats_hash_body); - /* Precleanup stage 1, we must make sure all exports (other than the - self-export) get destroyed. */ + /* Precleanup, we must make sure all exports get destroyed. */ err = obd_precleanup(obd, OBD_CLEANUP_EXPORTS); if (err) CERROR("Precleanup %s returned %d\n", @@ -484,17 +488,9 @@ void class_decref(struct obd_device *obd) CDEBUG(D_INFO, "Decref %s (%p) now %d\n", obd->obd_name, obd, refs); if ((refs == 1) && obd->obd_stopping) { - /* All exports (other than the self-export) have been - destroyed; there should be no more in-progress ops - by this point.*/ - /* if we're not stopping, we didn't finish setup */ - /* Precleanup stage 2, do other type-specific - cleanup requiring the self-export. */ - err = obd_precleanup(obd, OBD_CLEANUP_SELF_EXP); - if (err) - CERROR("Precleanup %s returned %d\n", - obd->obd_name, err); - + /* All exports have been destroyed; there should + be no more in-progress ops by this point.*/ + spin_lock(&obd->obd_self_export->exp_lock); obd->obd_self_export->exp_flags |= (obd->obd_fail ? OBD_OPT_FAILOVER : 0) | @@ -751,7 +747,6 @@ int class_process_config(struct lustre_cfg *lcfg) CDEBUG(D_IOCTL, "changing lustre timeout from %d to %d\n", obd_timeout, lcfg->lcfg_num); obd_timeout = max(lcfg->lcfg_num, 1U); - obd_health_check_timeout = HEALTH_CHECK_TIMEOUT; GOTO(out, err = 0); } case LCFG_SET_UPCALL: { @@ -887,8 +882,7 @@ int class_process_proc_param(char *prefix, struct lprocfs_vars *lvars, if (!matched) { CERROR("%s: unknown param %s\n", (char *)lustre_cfg_string(lcfg, 0), key); - rc = -EINVAL; - /* continue parsing other params */ + /* rc = -EINVAL; continue parsing other params */ } else { LCONSOLE_INFO("%s.%.*s: set parameter %.*s=%s\n", (char *)lustre_cfg_string(lcfg, 0),