/* Caller must list_del and OBD_FREE each dentry from the list */
int class_dentry_readdir(struct obd_device *obd, struct dentry *dir,
struct vfsmount *inmnt,
- struct list_head *dentry_list){
+ cfs_list_t *dentry_list){
/* see mds_cleanup_pending */
struct lvfs_run_ctxt saved;
struct file *file;
*name = NULL;
}
+struct mgs_fsdb_handler_data
+{
+ struct fs_db *fsdb;
+ __u32 ver;
+};
+
/* from the (client) config log, figure out:
1. which ost's/mdt's are configured (by index)
2. what the last config step is
3. COMPAT_146 lov name
4. COMPAT_146 mdt lov name
5. COMPAT_146 mdc name
+ 6. COMPAT_18 osc name
*/
/* It might be better to have a separate db file, instead of parsing the info
out of the client log. This is slow and potentially error-prone. */
static int mgs_fsdb_handler(struct llog_handle *llh, struct llog_rec_hdr *rec,
void *data)
{
- struct fs_db *fsdb = (struct fs_db *)data;
+ struct mgs_fsdb_handler_data *d = (struct mgs_fsdb_handler_data *) data;
+ struct fs_db *fsdb = d->fsdb;
int cfg_len = rec->lrh_len;
char *cfg_buf = (char*) (rec + 1);
struct lustre_cfg *lcfg;
CDEBUG(D_MGS, "OST index for %s is %u (%s)\n",
lustre_cfg_string(lcfg, 1), index,
lustre_cfg_string(lcfg, 2));
- set_bit(index, fsdb->fsdb_ost_index_map);
+ cfs_set_bit(index, fsdb->fsdb_ost_index_map);
}
/* Figure out mdt indicies */
}
rc = 0;
CDEBUG(D_MGS, "MDT index is %u\n", index);
- set_bit(index, fsdb->fsdb_mdt_index_map);
+ cfs_set_bit(index, fsdb->fsdb_mdt_index_map);
}
/* COMPAT_146 */
}
/* end COMPAT_146 */
- /* Keep track of the latest marker step */
+ /*
+ * compat to 1.8, check osc name used by MDT0 to OSTs, bz18548.
+ */
+ if (fsdb->fsdb_fl_oscname_18 == 0 &&
+ lcfg->lcfg_command == LCFG_ATTACH &&
+ strcmp(lustre_cfg_string(lcfg, 1), LUSTRE_OSC_NAME) == 0) {
+ if (OBD_OCD_VERSION_MAJOR(d->ver) == 1 &&
+ OBD_OCD_VERSION_MINOR(d->ver) <= 8) {
+ CWARN("MDT using 1.8 OSC name scheme\n");
+ fsdb->fsdb_fl_oscname_18 = 1;
+ }
+ }
+
if (lcfg->lcfg_command == LCFG_MARKER) {
struct cfg_marker *marker;
marker = lustre_cfg_buf(lcfg, 1);
+
+ d->ver = marker->cm_vers;
+
+ /* Keep track of the latest marker step */
fsdb->fsdb_gen = max(fsdb->fsdb_gen, marker->cm_step);
}
struct llog_handle *loghandle;
struct lvfs_run_ctxt saved;
struct llog_ctxt *ctxt;
+ struct mgs_fsdb_handler_data d = { fsdb, 0 };
int rc, rc2;
ENTRY;
ctxt = llog_get_context(obd, LLOG_CONFIG_ORIG_CTXT);
LASSERT(ctxt != NULL);
name_create(&logname, fsdb->fsdb_name, "-client");
- down(&fsdb->fsdb_sem);
+ cfs_down(&fsdb->fsdb_sem);
push_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
rc = llog_create(ctxt, &loghandle, NULL, logname);
if (rc)
if (llog_get_size(loghandle) <= 1)
fsdb->fsdb_flags |= FSDB_LOG_EMPTY;
- rc = llog_process(loghandle, mgs_fsdb_handler, (void *)fsdb, NULL);
+ rc = llog_process(loghandle, mgs_fsdb_handler, (void *) &d, NULL);
CDEBUG(D_INFO, "get_db = %d\n", rc);
out_close:
rc2 = llog_close(loghandle);
rc = rc2;
out_pop:
pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
- up(&fsdb->fsdb_sem);
+ cfs_up(&fsdb->fsdb_sem);
name_destroy(&logname);
llog_ctxt_put(ctxt);
{
struct mgs_obd *mgs = &obd->u.mgs;
struct fs_db *fsdb;
- struct list_head *tmp;
+ cfs_list_t *tmp;
- list_for_each(tmp, &mgs->mgs_fs_db_list) {
- fsdb = list_entry(tmp, struct fs_db, fsdb_list);
+ cfs_list_for_each(tmp, &mgs->mgs_fs_db_list) {
+ fsdb = cfs_list_entry(tmp, struct fs_db, fsdb_list);
if (strcmp(fsdb->fsdb_name, fsname) == 0)
return fsdb;
}
RETURN(NULL);
strcpy(fsdb->fsdb_name, fsname);
- sema_init(&fsdb->fsdb_sem, 1);
+ cfs_sema_init(&fsdb->fsdb_sem, 1);
fsdb->fsdb_fl_udesc = 1;
if (strcmp(fsname, MGSSELF_NAME) == 0) {
lproc_mgs_add_live(obd, fsdb);
}
- list_add(&fsdb->fsdb_list, &mgs->mgs_fs_db_list);
+ cfs_list_add(&fsdb->fsdb_list, &mgs->mgs_fs_db_list);
RETURN(fsdb);
err:
static void mgs_free_fsdb(struct obd_device *obd, struct fs_db *fsdb)
{
/* wait for anyone with the sem */
- down(&fsdb->fsdb_sem);
+ cfs_down(&fsdb->fsdb_sem);
lproc_mgs_del_live(obd, fsdb);
- list_del(&fsdb->fsdb_list);
+ cfs_list_del(&fsdb->fsdb_list);
if (fsdb->fsdb_ost_index_map)
OBD_FREE(fsdb->fsdb_ost_index_map, INDEX_MAP_SIZE);
if (fsdb->fsdb_mdt_index_map)
{
struct mgs_obd *mgs = &obd->u.mgs;
struct fs_db *fsdb;
- struct list_head *tmp, *tmp2;
- down(&mgs->mgs_sem);
- list_for_each_safe(tmp, tmp2, &mgs->mgs_fs_db_list) {
- fsdb = list_entry(tmp, struct fs_db, fsdb_list);
+ cfs_list_t *tmp, *tmp2;
+ cfs_down(&mgs->mgs_sem);
+ cfs_list_for_each_safe(tmp, tmp2, &mgs->mgs_fs_db_list) {
+ fsdb = cfs_list_entry(tmp, struct fs_db, fsdb_list);
mgs_free_fsdb(obd, fsdb);
}
- up(&mgs->mgs_sem);
+ cfs_up(&mgs->mgs_sem);
return 0;
}
struct fs_db *fsdb;
int rc = 0;
- down(&mgs->mgs_sem);
+ cfs_down(&mgs->mgs_sem);
fsdb = mgs_find_fsdb(obd, name);
if (fsdb) {
- up(&mgs->mgs_sem);
+ cfs_up(&mgs->mgs_sem);
*dbh = fsdb;
return 0;
}
CDEBUG(D_MGS, "Creating new db\n");
fsdb = mgs_new_fsdb(obd, name);
- up(&mgs->mgs_sem);
+ cfs_up(&mgs->mgs_sem);
if (!fsdb)
return -ENOMEM;
else
RETURN(-EINVAL);
- if (test_bit(mti->mti_stripe_index, imap))
+ if (cfs_test_bit(mti->mti_stripe_index, imap))
RETURN(1);
RETURN(0);
}
{
int i;
for (i = 0; i < map_len * 8; i++)
- if (!test_bit(i, index_map)) {
+ if (!cfs_test_bit(i, index_map)) {
return i;
}
CERROR("max index %d exceeded.\n", i);
RETURN(-ERANGE);
}
- if (test_bit(mti->mti_stripe_index, imap)) {
+ if (cfs_test_bit(mti->mti_stripe_index, imap)) {
if ((mti->mti_flags & LDD_F_VIRGIN) &&
!(mti->mti_flags & LDD_F_WRITECONF)) {
LCONSOLE_ERROR_MSG(0x140, "Server %s requested index "
}
}
- set_bit(mti->mti_stripe_index, imap);
+ cfs_set_bit(mti->mti_stripe_index, imap);
fsdb->fsdb_flags &= ~FSDB_LOG_EMPTY;
server_make_name(mti->mti_flags, mti->mti_stripe_index,
mti->mti_fsname, mti->mti_svname);
char *devname, char *comment)
{
struct mgs_obd *mgs = &obd->u.mgs;
- struct list_head dentry_list;
+ cfs_list_t dentry_list;
struct l_linux_dirent *dirent, *n;
char *fsname = mti->mti_fsname;
char *logname;
}
/* Could use fsdb index maps instead of directory listing */
- list_for_each_entry_safe(dirent, n, &dentry_list, lld_list) {
- list_del(&dirent->lld_list);
+ cfs_list_for_each_entry_safe(dirent, n, &dentry_list, lld_list) {
+ cfs_list_del(&dirent->lld_list);
/* don't write to sptlrpc rule log */
if (strncmp(fsname, dirent->lld_name, len) == 0 &&
strstr(dirent->lld_name, "-sptlrpc") == NULL) {
char *log = mti->mti_svname;
struct llog_handle *llh = NULL;
char *uuid, *lovname;
- char mdt_index[5];
+ char mdt_index[6];
char *ptr = mti->mti_params;
int rc = 0, failout = 0;
ENTRY;
rc = mgs_write_log_lov(obd, fsdb, mti, log, lovname);
sprintf(uuid, "%s_UUID", log);
- sprintf(mdt_index,"%d",mti->mti_stripe_index);
+ sprintf(mdt_index, "%d", mti->mti_stripe_index);
/* add MDT itself */
rc = record_start_log(obd, &llh, log);
RETURN(rc);
}
+static inline void name_create_mdt(char **logname, char *fsname, int i)
+{
+ char mdt_index[9];
+
+ sprintf(mdt_index, "-MDT%04x", i);
+ name_create(logname, fsname, mdt_index);
+}
+
+static void name_create_mdt_and_lov(char **logname, char **lovname,
+ struct fs_db *fsdb, int i)
+{
+ name_create_mdt(logname, fsdb->fsdb_name, i);
+ /* COMPAT_180 */
+ if (i == 0 && fsdb->fsdb_fl_oscname_18)
+ name_create(lovname, fsdb->fsdb_name, "-mdtlov");
+ else
+ name_create(lovname, *logname, "-mdtlov");
+}
+
+static inline void name_create_mdt_osc(char **oscname, char *ostname,
+ struct fs_db *fsdb, int i)
+{
+ char suffix[16];
+
+ if (i == 0 && fsdb->fsdb_fl_oscname_18)
+ sprintf(suffix, "-osc");
+ else
+ sprintf(suffix, "-osc-MDT%04x", i);
+ name_create(oscname, ostname, suffix);
+}
+
/* envelope method for all layers log */
static int mgs_write_log_mdt(struct obd_device *obd, struct fs_db *fsdb,
struct mgs_target_info *mti)
struct llog_handle *llh = NULL;
char *cliname;
struct temp_comp comp = { 0 };
- char mdt_index[9];
int rc, i = 0;
ENTRY;
for (i = 0; i < INDEX_MAP_SIZE * 8; i++){
char *mdtname;
if (i != mti->mti_stripe_index &&
- test_bit(i, fsdb->fsdb_mdt_index_map)) {
- sprintf(mdt_index,"-MDT%04x",i);
-
- name_create(&mdtname, mti->mti_fsname, mdt_index);
+ cfs_test_bit(i, fsdb->fsdb_mdt_index_map)) {
+ name_create_mdt(&mdtname, mti->mti_fsname, i);
rc = mgs_write_log_mdc_to_mdt(obd, fsdb, mti, mdtname);
name_destroy(&mdtname);
}
{
struct llog_handle *llh = NULL;
char *logname, *lovname;
- char mdt_index[9];
char *ptr = mti->mti_params;
int rc, flags = 0, failout = 0, i;
ENTRY;
mti->mti_svname);
}
- // for_all_existing_mdt
+ /* Add ost to all MDT lov defs */
for (i = 0; i < INDEX_MAP_SIZE * 8; i++){
- if (test_bit(i, fsdb->fsdb_mdt_index_map)) {
- sprintf(mdt_index,"-MDT%04x",i);
- name_create(&logname, mti->mti_fsname, mdt_index);
- name_create(&lovname, logname, "-mdtlov");
+ if (cfs_test_bit(i, fsdb->fsdb_mdt_index_map)) {
+ char mdt_index[9];
+
+ name_create_mdt_and_lov(&logname, &lovname, fsdb, i);
+ sprintf(mdt_index, "-MDT%04x", i);
mgs_write_log_osc_to_lov(obd, fsdb, mti, logname,
mdt_index, lovname,
LUSTRE_SP_MDT, flags);
rc = record_end_log(obd, &llh);
}
name_destroy(&logname);
+ name_destroy(&cliname);
if (mti->mti_flags & LDD_F_SV_TYPE_OST) {
- /* Add OST failover nids to the MDT log as well */
- name_create(&logname, mti->mti_fsname, "-MDT0000");
- rc = record_start_log(obd, &llh, logname);
- if (!rc) {
- rc = record_marker(obd, llh, fsdb, CM_START,
- mti->mti_svname, "add failnid");
- rc = mgs_write_log_failnids(obd, mti, llh, cliname);
- rc = record_marker(obd, llh, fsdb, CM_END,
- mti->mti_svname, "add failnid");
- rc = record_end_log(obd, &llh);
+ /* Add OST failover nids to the MDT logs as well */
+ int i;
+
+ for (i = 0; i < INDEX_MAP_SIZE * 8; i++) {
+ if (!cfs_test_bit(i, fsdb->fsdb_mdt_index_map))
+ continue;
+ name_create_mdt(&logname, mti->mti_fsname, i);
+ name_create_mdt_osc(&cliname, mti->mti_svname, fsdb, i);
+
+ rc = record_start_log(obd, &llh, logname);
+ if (!rc) {
+ rc = record_marker(obd, llh, fsdb, CM_START,
+ mti->mti_svname,
+ "add failnid");
+ rc = mgs_write_log_failnids(obd, mti, llh,
+ cliname);
+ rc = record_marker(obd, llh, fsdb, CM_END,
+ mti->mti_svname,
+ "add failnid");
+ rc = record_end_log(obd, &llh);
+ }
+ name_destroy(&cliname);
+ name_destroy(&logname);
}
- name_destroy(&logname);
}
- name_destroy(&cliname);
RETURN(rc);
}
return rc;
}
+/* write global variable settings into log */
+static int mgs_write_log_sys(struct obd_device *obd, struct fs_db *fsdb,
+ struct mgs_target_info *mti, char *sys, char *ptr)
+{
+ struct lustre_cfg_bufs bufs;
+ struct lustre_cfg *lcfg;
+ char *tmp;
+ int cmd, val;
+ int rc;
+
+ if (class_match_param(ptr, PARAM_TIMEOUT, &tmp) == 0)
+ cmd = LCFG_SET_TIMEOUT;
+ else if (class_match_param(ptr, PARAM_LDLM_TIMEOUT, &tmp) == 0)
+ cmd = LCFG_SET_LDLM_TIMEOUT;
+ /* Check for known params here so we can return error to lctl */
+ else if ((class_match_param(ptr, PARAM_AT_MIN, &tmp) == 0)
+ || (class_match_param(ptr, PARAM_AT_MAX, &tmp) == 0)
+ || (class_match_param(ptr, PARAM_AT_EXTRA, &tmp) == 0)
+ || (class_match_param(ptr, PARAM_AT_EARLY_MARGIN, &tmp) == 0)
+ || (class_match_param(ptr, PARAM_AT_HISTORY, &tmp) == 0))
+ cmd = LCFG_PARAM;
+ else
+ return -EINVAL;
+
+ val = simple_strtoul(tmp, NULL, 0);
+ CDEBUG(D_MGS, "global %s = %d\n", ptr, val);
+
+ lustre_cfg_bufs_reset(&bufs, NULL);
+ lustre_cfg_bufs_set_string(&bufs, 1, sys);
+ lcfg = lustre_cfg_new(cmd, &bufs);
+ lcfg->lcfg_num = val;
+ /* modify all servers and clients */
+ rc = mgs_write_log_direct_all(obd, fsdb, mti, lcfg, mti->mti_fsname,
+ ptr);
+ lustre_cfg_free(lcfg);
+ return rc;
+}
+
static int mgs_srpc_set_param_disk(struct obd_device *obd,
struct fs_db *fsdb,
struct mgs_target_info *mti,
rset = &fsdb->fsdb_srpc_gen;
}
- rc = sptlrpc_rule_set_merge(rset, &rule, 1);
+ rc = sptlrpc_rule_set_merge(rset, &rule);
RETURN(rc);
}
int rc, copy_size;
ENTRY;
+#ifndef HAVE_GSS
+ RETURN(-EINVAL);
+#endif
/* keep a copy of original param, which could be destroied
* during parsing */
copy_size = strlen(param) + 1;
struct mgs_target_info *mti, char *ptr)
{
struct lustre_cfg_bufs bufs;
- struct lustre_cfg *lcfg;
char *logname;
char *tmp;
int rc = 0;
GOTO(end, rc);
}
- if (class_match_param(ptr, PARAM_SYS_TIMEOUT, &tmp) == 0) {
- /* Change obd timeout */
- int timeout;
- timeout = simple_strtoul(tmp, NULL, 0);
-
- CDEBUG(D_MGS, "obd timeout %d\n", timeout);
- lustre_cfg_bufs_reset(&bufs, NULL);
- lcfg = lustre_cfg_new(LCFG_SET_TIMEOUT, &bufs);
- lcfg->lcfg_num = timeout;
- /* modify all servers and clients */
- rc = mgs_write_log_direct_all(obd, fsdb, mti, lcfg,
- mti->mti_fsname,
- "timeout");
- lustre_cfg_free(lcfg);
- GOTO(end, rc);
- }
-
- if (class_match_param(ptr, PARAM_LDLM_TIMEOUT, &tmp) == 0) {
- /* Change ldlm timeout */
- int timeout;
- timeout = simple_strtoul(tmp, NULL, 0);
-
- CDEBUG(D_MGS, "ldlm timeout %d\n", timeout);
-
- lustre_cfg_bufs_reset(&bufs, NULL);
- lcfg = lustre_cfg_new(LCFG_SET_LDLM_TIMEOUT, &bufs);
- lcfg->lcfg_num = timeout;
- /* modify all servers and clients */
- rc = mgs_write_log_direct_all(obd, fsdb, mti, lcfg,
- mti->mti_fsname,
- "ldlm_timeout");
- lustre_cfg_free(lcfg);
+ if (class_match_param(ptr, PARAM_SYS, &tmp) == 0) {
+ rc = mgs_write_log_sys(obd, fsdb, mti, ptr, tmp);
GOTO(end, rc);
}
if (class_match_param(ptr, PARAM_OSC""PARAM_ACTIVE, &tmp) == 0) {
/* active=0 means off, anything else means on */
- char mdt_index[16];
int flag = (*tmp == '0') ? CM_EXCLUDE : 0;
int i;
if (rc)
goto active_err;
/* Modify mdtlov */
- /* FIXME add to all MDT logs for CMD */
+ /* Add to all MDT logs for CMD */
for (i = 0; i < INDEX_MAP_SIZE * 8; i++) {
- if (!test_bit(i, fsdb->fsdb_mdt_index_map))
+ if (!cfs_test_bit(i, fsdb->fsdb_mdt_index_map))
continue;
- sprintf(mdt_index,"-MDT%04x", i);
- name_create(&logname, mti->mti_fsname, mdt_index);
+ name_create_mdt(&logname, mti->mti_fsname, i);
rc = mgs_modify(obd, fsdb, mti, logname,
mti->mti_svname, "add osc", flag);
name_destroy(&logname);
/* All lov. in proc */
if (class_match_param(ptr, PARAM_LOV, NULL) == 0) {
- char mdt_index[16];
char *mdtlovname;
CDEBUG(D_MGS, "lov param %s\n", ptr);
if (mgs_log_is_empty(obd, mti->mti_svname))
GOTO(end, rc = -ENODEV);
- sprintf(mdt_index,"-MDT%04x", mti->mti_stripe_index);
- name_create(&logname, mti->mti_fsname, mdt_index);
- name_create(&mdtlovname, logname, "-mdtlov");
+ name_create_mdt_and_lov(&logname, &mdtlovname, fsdb,
+ mti->mti_stripe_index);
rc = mgs_wlp_lcfg(obd, fsdb, mti, mti->mti_svname,
&bufs, mdtlovname, ptr);
name_destroy(&logname);
/* osc params affect the MDT as well */
if (!rc && (mti->mti_flags & LDD_F_SV_TYPE_OST)) {
- char mdt_index[16];
int i;
for (i = 0; i < INDEX_MAP_SIZE * 8; i++){
- if (!test_bit(i, fsdb->fsdb_mdt_index_map))
+ if (!cfs_test_bit(i, fsdb->fsdb_mdt_index_map))
continue;
name_destroy(&cname);
- sprintf(mdt_index, "-osc-MDT%04x", i);
- name_create(&cname, mti->mti_svname,
- mdt_index);
+ name_create_mdt_osc(&cname, mti->mti_svname,
+ fsdb, i);
name_destroy(&logname);
- sprintf(mdt_index, "-MDT%04x", i);
- name_create(&logname, mti->mti_fsname,
- mdt_index);
+ name_create_mdt(&logname, mti->mti_fsname, i);
if (!mgs_log_is_empty(obd, logname))
- rc = mgs_wlp_lcfg(obd, fsdb,
- mti, logname,
- &bufs, cname,
- ptr);
+ rc = mgs_wlp_lcfg(obd, fsdb,mti,logname,
+ &bufs, cname, ptr);
if (rc)
break;
}
/* All mdt. params in proc */
if (class_match_param(ptr, PARAM_MDT, NULL) == 0) {
- char mdt_index[16];
int i;
__u32 idx;
goto active_err;
if (rc & LDD_F_SV_ALL) {
for (i = 0; i < INDEX_MAP_SIZE * 8; i++) {
- if (!test_bit(i,
- fsdb->fsdb_mdt_index_map))
+ if (!cfs_test_bit(i,
+ fsdb->fsdb_mdt_index_map))
continue;
- sprintf(mdt_index,"-MDT%04x", i);
- name_create(&logname, mti->mti_fsname,
- mdt_index);
+ name_create_mdt(&logname, mti->mti_fsname, i);
rc = mgs_wlp_lcfg(obd, fsdb, mti,
logname, &bufs,
logname, ptr);
the failover list. Modify mti->params for rewriting back at
server_register_target(). */
- down(&fsdb->fsdb_sem);
+ cfs_down(&fsdb->fsdb_sem);
rc = mgs_write_log_add_failnid(obd, fsdb, mti);
- up(&fsdb->fsdb_sem);
+ cfs_up(&fsdb->fsdb_sem);
RETURN(rc);
#endif
RETURN(rc);
}
- down(&fsdb->fsdb_sem);
+ cfs_down(&fsdb->fsdb_sem);
if (mti->mti_flags &
(LDD_F_VIRGIN | LDD_F_UPGRADE14 | LDD_F_WRITECONF)) {
OBD_FREE(buf, strlen(mti->mti_params) + 1);
out_up:
- up(&fsdb->fsdb_sem);
+ cfs_up(&fsdb->fsdb_sem);
RETURN(rc);
}
{
struct mgs_obd *mgs = &obd->u.mgs;
static struct fs_db *fsdb;
- struct list_head dentry_list;
+ cfs_list_t dentry_list;
struct l_linux_dirent *dirent, *n;
int rc, len = strlen(fsname);
+ char *suffix;
ENTRY;
/* Find all the logs in the CONFIGS directory */
RETURN(rc);
}
- down(&mgs->mgs_sem);
+ cfs_down(&mgs->mgs_sem);
/* Delete the fs db */
fsdb = mgs_find_fsdb(obd, fsname);
if (fsdb)
mgs_free_fsdb(obd, fsdb);
- list_for_each_entry_safe(dirent, n, &dentry_list, lld_list) {
- list_del(&dirent->lld_list);
- if (strncmp(fsname, dirent->lld_name, len) == 0) {
- CDEBUG(D_MGS, "Removing log %s\n", dirent->lld_name);
- mgs_erase_log(obd, dirent->lld_name);
+ cfs_list_for_each_entry_safe(dirent, n, &dentry_list, lld_list) {
+ cfs_list_del(&dirent->lld_list);
+ suffix = strrchr(dirent->lld_name, '-');
+ if (suffix != NULL) {
+ if ((len == suffix - dirent->lld_name) &&
+ (strncmp(fsname, dirent->lld_name, len) == 0)) {
+ CDEBUG(D_MGS, "Removing log %s\n",
+ dirent->lld_name);
+ mgs_erase_log(obd, dirent->lld_name);
+ }
}
OBD_FREE(dirent, sizeof(*dirent));
}
- up(&mgs->mgs_sem);
+ cfs_up(&mgs->mgs_sem);
RETURN(rc);
}
mti->mti_flags = rc | LDD_F_PARAM;
- down(&fsdb->fsdb_sem);
+ cfs_down(&fsdb->fsdb_sem);
/* this is lctl conf_param's single param path, there is not
need to loop through parameters */
rc = mgs_write_log_param(obd, fsdb, mti, mti->mti_params);
- up(&fsdb->fsdb_sem);
+ cfs_up(&fsdb->fsdb_sem);
out:
OBD_FREE_PTR(mti);
char *fsname, char *poolname, char *ostname)
{
struct fs_db *fsdb;
- char mdt_index[16];
char *lovname;
char *logname;
char *label = NULL, *canceled_label = NULL;
}
}
- down(&fsdb->fsdb_sem);
+ cfs_down(&fsdb->fsdb_sem);
if (canceled_label != NULL) {
OBD_ALLOC_PTR(mti);
GOTO(out, rc = -ENOMEM);
}
- /* loop on all potential MDT */
+ /* write pool def to all MDT logs */
for (i = 0; i < INDEX_MAP_SIZE * 8; i++) {
- if (test_bit(i, fsdb->fsdb_mdt_index_map)) {
- sprintf(mdt_index, "-MDT%04x", i);
- name_create(&logname, fsname, mdt_index);
- name_create(&lovname, logname, "-mdtlov");
+ if (cfs_test_bit(i, fsdb->fsdb_mdt_index_map)) {
+ name_create_mdt_and_lov(&logname, &lovname, fsdb, i);
if (canceled_label != NULL) {
strcpy(mti->mti_svname, "lov pool");
cmd, fsname, poolname, ostname, label);
name_destroy(&logname);
- up(&fsdb->fsdb_sem);
+ cfs_up(&fsdb->fsdb_sem);
EXIT;
out: