GOTO(out_pop, rc = PTR_ERR(mnt));
}
- file = dentry_open(dentry, mnt, O_RDONLY);
+ file = ll_dentry_open(dentry, mnt, O_RDONLY, current_cred());
if (IS_ERR(file))
/* dentry_open_it() drops the dentry, mnt refs */
GOTO(out_pop, rc = PTR_ERR(file));
static int mgs_write_log_mdc_to_mdt(struct obd_device *, struct fs_db *,
struct mgs_target_info *, char *);
+static int mgs_write_log_osc_to_lov(struct obd_device *obd, struct fs_db *fsdb,
+ struct mgs_target_info *mti,
+ char *logname, char *suffix, char *lovname,
+ enum lustre_sec_part sec_part, int flags);
+static void name_create_mdt_and_lov(char **logname, char **lovname,
+ struct fs_db *fsdb, int i);
static int mgs_steal_llog_handler(struct llog_handle *llh,
struct llog_rec_hdr *rec,
memset(tmti, 0, sizeof(*tmti));
RETURN(rc);
}
+
+ if (lcfg->lcfg_command == LCFG_LOV_ADD_OBD) {
+ char mdt_index[9];
+ char *logname, *lovname;
+
+ name_create_mdt_and_lov(&logname, &lovname, fsdb, mti->mti_stripe_index);
+ sprintf(mdt_index, "-MDT%04x", mti->mti_stripe_index);
+
+ mgs_write_log_osc_to_lov(obd, fsdb, tmti, logname,
+ mdt_index, lovname,
+ LUSTRE_SP_MDT, 0);
+ name_destroy(&logname);
+ name_destroy(&lovname);
+ RETURN(rc);
+ }
RETURN(rc);
}
lovdesc->ld_default_stripe_count = 1;
lovdesc->ld_pattern = LOV_PATTERN_RAID0;
lovdesc->ld_default_stripe_size = 1024 * 1024;
- lovdesc->ld_default_stripe_offset = 0;
+ lovdesc->ld_default_stripe_offset = -1;
lovdesc->ld_qos_maxage = QOS_DEFAULT_MAXAGE;
sprintf((char*)lovdesc->ld_uuid.uuid, "%s_UUID", lovname);
/* can these be the same? */
int i, rc;
ENTRY;
- if (mgs_log_is_empty(obd, mti->mti_svname)) {
+ if (mgs_log_is_empty(obd, logname)) {
CERROR("log is empty! Logical error\n");
RETURN (-EINVAL);
}
mti->mti_svname, logname);
if (mgs_log_is_empty(obd, logname)) {
- /* The first item in the log must be the lov, so we have
- somewhere to add our osc. */
- rc = mgs_write_log_lov(obd, fsdb, mti, logname, lovname);
+ CERROR("log is empty! Logical error\n");
+ RETURN (-EINVAL);
}
name_create(&nodeuuid, libcfs_nid2str(mti->mti_nids[0]), "");
/* Append ost info to the client log */
name_create(&logname, mti->mti_fsname, "-client");
+ if (mgs_log_is_empty(obd, logname)) {
+ /* Start client log */
+ rc = mgs_write_log_lov(obd, fsdb, mti, logname,
+ fsdb->fsdb_clilov);
+ rc = mgs_write_log_lmv(obd, fsdb, mti, logname,
+ fsdb->fsdb_clilmv);
+ }
mgs_write_log_osc_to_lov(obd, fsdb, mti, logname, "",
- fsdb->fsdb_clilov, LUSTRE_SP_CLI, 0);
+ fsdb->fsdb_clilov, LUSTRE_SP_CLI, flags);
name_destroy(&logname);
RETURN(rc);
}
/* obsolete old one */
mgs_modify(obd, fsdb, mti, logname, mti->mti_svname, comment, CM_SKIP);
- if (!mgs_param_empty(param)) {
- /* write the new one */
- rc = mgs_write_log_direct(obd, fsdb, logname, lcfg,
- mti->mti_svname, comment);
- if (rc)
- CERROR("err %d writing log %s\n", rc, logname);
- }
+ /* write the new one */
+ rc = mgs_write_log_direct(obd, fsdb, logname, lcfg,
+ mti->mti_svname, comment);
+ if (rc)
+ CERROR("err %d writing log %s\n", rc, logname);
+
out:
name_destroy(&logname);
out_lcfg:
char *param)
{
char *copy;
- int rc, copy_size, del;
+ int rc, copy_size;
ENTRY;
#ifndef HAVE_GSS
return -ENOMEM;
memcpy(copy, param, copy_size);
- del = mgs_param_empty(param);
- if (!del) {
- rc = mgs_srpc_set_param_mem(fsdb, mti->mti_svname, param);
- if (rc)
- goto out_free;
- }
+ rc = mgs_srpc_set_param_mem(fsdb, mti->mti_svname, param);
+ if (rc)
+ goto out_free;
/* previous steps guaranteed the syntax is correct */
rc = mgs_srpc_set_param_disk(obd, fsdb, mti, copy);
struct lustre_cfg_bufs bufs;
char *logname;
char *tmp;
- int rc = 0;
+ int rc = 0, rc2 = 0;
ENTRY;
/* For various parameter settings, we have to figure out which logs
}
LCONSOLE_WARN("Ignoring unrecognized param '%s'\n", ptr);
+ rc2 = -ENOSYS;
end:
if (rc)
CERROR("err %d on param '%s'\n", rc, ptr);
- RETURN(rc);
+ RETURN(rc ?: rc2);
}
/* Not implementing automatic failover nid addition at this time. */