X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fmgs%2Fmgs_llog.c;h=643b7751894de7e3c1c8e7abcea578e5dd714524;hp=1310334ac5013ab4f7308a4794697b8105140329;hb=0e4ce3ad1d80e78d16a01310a714eec0fe2ab0f8;hpb=ac16c5819bdd944230c938dd3b14401b72556d9b diff --git a/lustre/mgs/mgs_llog.c b/lustre/mgs/mgs_llog.c index 1310334..643b775 100644 --- a/lustre/mgs/mgs_llog.c +++ b/lustre/mgs/mgs_llog.c @@ -26,7 +26,7 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. */ /* @@ -89,7 +89,7 @@ int class_dentry_readdir(struct obd_device *obd, struct dentry *dir, 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)); @@ -1073,6 +1073,12 @@ struct temp_comp 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, @@ -1194,6 +1200,21 @@ static int mgs_steal_llog_handler(struct llog_handle *llh, 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); } @@ -1305,7 +1326,7 @@ static int mgs_write_log_lov(struct obd_device *obd, struct fs_db *fsdb, 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? */ @@ -1437,7 +1458,7 @@ static int mgs_write_log_mdc_to_mdt(struct obd_device *obd, struct fs_db *fsdb, 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); } @@ -1686,9 +1707,8 @@ static int mgs_write_log_osc_to_lov(struct obd_device *obd, struct fs_db *fsdb, 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]), ""); @@ -1818,8 +1838,15 @@ static int mgs_write_log_ost(struct obd_device *obd, struct fs_db *fsdb, /* 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); } @@ -2051,13 +2078,12 @@ static int mgs_srpc_set_param_disk(struct obd_device *obd, /* 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: @@ -2193,7 +2219,7 @@ static int mgs_srpc_set_param(struct obd_device *obd, char *param) { char *copy; - int rc, copy_size, del; + int rc, copy_size; ENTRY; #ifndef HAVE_GSS @@ -2207,12 +2233,9 @@ static int mgs_srpc_set_param(struct obd_device *obd, 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); @@ -2365,7 +2388,7 @@ static int mgs_write_log_param(struct obd_device *obd, struct fs_db *fsdb, 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 @@ -2618,12 +2641,13 @@ static int mgs_write_log_param(struct obd_device *obd, struct fs_db *fsdb, } 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. */