From: nathan Date: Thu, 16 Feb 2006 19:14:55 +0000 (+0000) Subject: Branch b1_4_mountconf X-Git-Tag: v1_8_0_110~486^4~34 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=cff30d16c44dcf8d7f9da3ce752bf38b9ed180ba;p=fs%2Flustre-release.git Branch b1_4_mountconf b=9860 namespace cleanup, new flags for upgrading from 146 --- diff --git a/lustre/include/linux/lustre_disk.h b/lustre/include/linux/lustre_disk.h index 3d34b5f..1910f5c 100644 --- a/lustre/include/linux/lustre_disk.h +++ b/lustre/include/linux/lustre_disk.h @@ -43,11 +43,12 @@ #define LDD_F_SV_TYPE_MDT 0x0001 #define LDD_F_SV_TYPE_OST 0x0002 #define LDD_F_SV_TYPE_MGS 0x0004 -#define LDD_F_NEED_INDEX 0x0010 /* we need an index assignment */ -#define LDD_F_NEED_REGISTER 0x0020 /* we have never registered */ -#define LDD_F_UPGRADE14 0x0040 /* COMPAT_14 */ -#define LDD_F_REWRITE 0x0080 /* rewrite the LDD */ +#define LDD_F_NEED_INDEX 0x0010 /* need an index assignment */ +#define LDD_F_VIRGIN 0x0020 /* never registered */ +#define LDD_F_UPDATE 0x0040 /* update the config logs for this server*/ +#define LDD_F_REWRITE_LDD 0x0080 /* rewrite the LDD */ #define LDD_F_WRITECONF 0x0100 /* regenerate all logs for this fs */ +#define LDD_F_UPGRADE14 0x0200 /* COMPAT_14 */ enum ldd_mount_type { @@ -303,6 +304,7 @@ int lustre_end_log(struct super_block *sb, char *logname, struct lustre_mount_info *server_get_mount(char *name); int server_put_mount(char *name, struct vfsmount *mnt); int server_register_target(struct super_block *sb); +int server_mti_print(char *title, struct mgs_target_info *mti); /* mgc_request.c */ int mgc_logname2resid(char *logname, struct ldlm_res_id *res_id); diff --git a/lustre/include/linux/lustre_idl.h b/lustre/include/linux/lustre_idl.h index fde3354..d12e1de 100644 --- a/lustre/include/linux/lustre_idl.h +++ b/lustre/include/linux/lustre_idl.h @@ -983,7 +983,7 @@ typedef enum { MGS_CONNECT = 250, MGS_DISCONNECT, MGS_EXCEPTION, /* node died, etc. */ - MGS_TARGET_ADD, /* whenever target starts up */ + MGS_TARGET_REG, /* whenever target starts up */ MGS_TARGET_DEL, MGS_LAST_OPC } mgs_cmd_t; diff --git a/lustre/include/linux/lustre_mgs.h b/lustre/include/linux/lustre_mgs.h index a36599b..e9638a6 100644 --- a/lustre/include/linux/lustre_mgs.h +++ b/lustre/include/linux/lustre_mgs.h @@ -25,13 +25,13 @@ #define FSDB_EMPTY 0x0001 struct fs_db { - char fd_name[8]; - struct list_head fd_list; - struct semaphore fd_sem; - void* fd_ost_index_map; - void* fd_mdt_index_map; - __u32 fd_flags; - __u32 fd_gen; + char fsdb_name[8]; + struct list_head fsdb_list; + struct semaphore fsdb_sem; + void* fsdb_ost_index_map; + void* fsdb_mdt_index_map; + __u32 fsdb_flags; + __u32 fsdb_gen; }; int mgs_fs_setup(struct obd_device *obd, struct vfsmount *mnt); diff --git a/lustre/mgc/mgc_request.c b/lustre/mgc/mgc_request.c index af3abec..167ba59 100644 --- a/lustre/mgc/mgc_request.c +++ b/lustre/mgc/mgc_request.c @@ -560,8 +560,9 @@ out: } #endif -/* Send target_add message to MGS */ -static int mgc_target_add(struct obd_export *exp, struct mgs_target_info *mti) +/* Send target_reg message to MGS */ +static int mgc_target_register(struct obd_export *exp, + struct mgs_target_info *mti) { struct ptlrpc_request *req; struct mgs_target_info *req_mti, *rep_mti; @@ -571,7 +572,7 @@ static int mgc_target_add(struct obd_export *exp, struct mgs_target_info *mti) ENTRY; req = ptlrpc_prep_req(class_exp2cliimp(exp), LUSTRE_MGS_VERSION, - MGS_TARGET_ADD, 1, &size, NULL); + MGS_TARGET_REG, 1, &size, NULL); if (!req) RETURN(rc = -ENOMEM); @@ -636,14 +637,14 @@ int mgc_set_info(struct obd_export *exp, obd_count keylen, RETURN(0); } /* Hack alert */ - if (KEY_IS("add_target")) { + if (KEY_IS("register_target")) { struct mgs_target_info *mti; if (vallen != sizeof(struct mgs_target_info)) RETURN(-EINVAL); mti = (struct mgs_target_info *)val; - CDEBUG(D_MGC, "add_target %s %#x\n", + CDEBUG(D_MGC, "register_target %s %#x\n", mti->mti_svname, mti->mti_flags); - rc = mgc_target_add(exp, mti); + rc = mgc_target_register(exp, mti); RETURN(rc); } if (KEY_IS("set_fs")) { @@ -927,7 +928,7 @@ static int mgc_process_config(struct obd_device *obd, obd_count len, void *buf) mti = (struct mgs_target_info *)lustre_cfg_buf(lcfg, 1); CDEBUG(D_MGC, "add_target %s %#x\n", mti->mti_svname, mti->mti_flags); - rc = mgc_target_add(obd->u.cli.cl_mgc_mgsexp, mti); + rc = mgc_target_register(obd->u.cli.cl_mgc_mgsexp, mti); break; } case LCFG_LOV_DEL_OBD: diff --git a/lustre/mgs/mgs_handler.c b/lustre/mgs/mgs_handler.c index 3d6a61d..553876a 100644 --- a/lustre/mgs/mgs_handler.c +++ b/lustre/mgs/mgs_handler.c @@ -169,7 +169,7 @@ static int mgs_setup(struct obd_device *obd, obd_count len, void *buf) GOTO(err_fs, rc); /* Internal mgs setup */ - mgs_init_db_list(obd); + mgs_init_fsdb_list(obd); sema_init(&mgs->mgs_log_sem, 1); /* Start the service threads */ @@ -223,7 +223,7 @@ static int mgs_precleanup(struct obd_device *obd, int stage) switch (stage) { case OBD_CLEANUP_SELF_EXP: - mgs_cleanup_db_list(obd); + mgs_cleanup_fsdb_list(obd); llog_cleanup(llog_get_context(obd, LLOG_CONFIG_ORIG_CTXT)); rc = obd_llog_finish(obd, 0); } @@ -305,7 +305,7 @@ static int mgs_check_target(struct obd_device *obd, struct mgs_target_info *mti) LCONSOLE_ERROR("Index for %s has disappeared! " "Regenerating this portion of the logs." "\n", mti->mti_svname); - mti->mti_flags |= LDD_F_NEED_REGISTER; + mti->mti_flags |= LDD_F_UPDATE; rc = 1; } else if (rc == -1) { LCONSOLE_ERROR("Client log %s-client has disappeared! " @@ -325,7 +325,7 @@ static int mgs_check_target(struct obd_device *obd, struct mgs_target_info *mti) } /* Called whenever a target starts up. Flags indicate first connect, etc. */ -static int mgs_handle_target_add(struct ptlrpc_request *req) +static int mgs_handle_target_reg(struct ptlrpc_request *req) { struct obd_device *obd = req->rq_export->exp_obd; struct lustre_handle lockh; @@ -338,7 +338,7 @@ static int mgs_handle_target_add(struct ptlrpc_request *req) lustre_swab_mgs_target_info); if (!(mti->mti_flags & (LDD_F_WRITECONF | LDD_F_UPGRADE14 | - LDD_F_NEED_REGISTER))) { + LDD_F_UPDATE))) { /* We're just here as a startup ping. */ CDEBUG(D_MGS, "Server %s is running on %s\n", mti->mti_svname, obd_export_nid2str(req->rq_export)); @@ -365,22 +365,16 @@ static int mgs_handle_target_add(struct ptlrpc_request *req) if (mti->mti_flags & LDD_F_WRITECONF) { rc = mgs_erase_logs(obd, mti->mti_fsname); - mti->mti_flags |= LDD_F_NEED_REGISTER; + mti->mti_flags |= LDD_F_UPDATE; LCONSOLE_WARN("%s: Logs for fs %s were removed by user request." " All servers must re-register in order to " "regenerate the client log.\n", obd->obd_name, mti->mti_fsname); mti->mti_flags &= ~LDD_F_WRITECONF; - mti->mti_flags |= LDD_F_REWRITE; } /* COMPAT_146 */ if (mti->mti_flags & LDD_F_UPGRADE14) { - CDEBUG(D_MGS, "upgrading fs %s from pre-1.6\n", - mti->mti_fsname); - /* nobody else should be running 1.6 yet, since we're going - to rewrite logs. - FIXME We should set a "must restart" flag in the lock */ rc = mgs_upgrade_sv_14(obd, mti); if (rc) { CERROR("Can't upgrade from 1.4 (%d)\n", rc); @@ -388,11 +382,11 @@ static int mgs_handle_target_add(struct ptlrpc_request *req) } mti->mti_flags &= ~LDD_F_UPGRADE14; - mti->mti_flags |= LDD_F_REWRITE; + //mti->mti_flags |= LDD_F_REWRITE_LDD; } /* end COMPAT_146 */ - if (mti->mti_flags & LDD_F_NEED_REGISTER) { + if (mti->mti_flags & LDD_F_UPDATE) { CDEBUG(D_MGS, "adding %s, index=%d\n", mti->mti_svname, mti->mti_stripe_index); @@ -405,8 +399,9 @@ static int mgs_handle_target_add(struct ptlrpc_request *req) GOTO(out, rc); } - mti->mti_flags &= ~(LDD_F_NEED_REGISTER | LDD_F_NEED_INDEX); - mti->mti_flags |= LDD_F_REWRITE; + mti->mti_flags &= ~(LDD_F_VIRGIN | LDD_F_UPDATE | + LDD_F_NEED_INDEX); + mti->mti_flags |= LDD_F_REWRITE_LDD; } out: @@ -454,9 +449,9 @@ int mgs_handle(struct ptlrpc_request *req) rc = target_handle_disconnect(req); req->rq_status = rc; /* superfluous? */ break; - case MGS_TARGET_ADD: + case MGS_TARGET_REG: DEBUG_REQ(D_MGS, req, "target add\n"); - rc = mgs_handle_target_add(req); + rc = mgs_handle_target_reg(req); break; case MGS_TARGET_DEL: DEBUG_REQ(D_MGS, req, "target del\n"); diff --git a/lustre/mgs/mgs_internal.h b/lustre/mgs/mgs_internal.h index 2d2ae3c..d77b761 100644 --- a/lustre/mgs/mgs_internal.h +++ b/lustre/mgs/mgs_internal.h @@ -12,8 +12,8 @@ extern struct lvfs_callback_ops mgs_lvfs_ops; -int mgs_init_db_list(struct obd_device *obd); -int mgs_cleanup_db_list(struct obd_device *obd); +int mgs_init_fsdb_list(struct obd_device *obd); +int mgs_cleanup_fsdb_list(struct obd_device *obd); int mgs_check_index(struct obd_device *obd, struct mgs_target_info *mti); int mgs_set_index(struct obd_device *obd, struct mgs_target_info *mti); int mgs_write_log_target(struct obd_device *obd, struct mgs_target_info *mti); diff --git a/lustre/mgs/mgs_llog.c b/lustre/mgs/mgs_llog.c index a5bdb50..4951c5a 100644 --- a/lustre/mgs/mgs_llog.c +++ b/lustre/mgs/mgs_llog.c @@ -55,10 +55,10 @@ */ /* FIXME is it better to have a separate db file, instead of parsing the info out of the client log? */ -static int mgsdb_handler(struct llog_handle *llh, struct llog_rec_hdr *rec, - void *data) +static int mgs_fsdb_handler(struct llog_handle *llh, struct llog_rec_hdr *rec, + void *data) { - struct fs_db *db = (struct fs_db *)data; + struct fs_db *fsdb = (struct fs_db *)data; int cfg_len = rec->lrh_len; char *cfg_buf = (char*) (rec + 1); struct lustre_cfg *lcfg; @@ -91,7 +91,7 @@ static int mgsdb_handler(struct llog_handle *llh, struct llog_rec_hdr *rec, CDEBUG(D_MGS, "OST index for %s is %lu (%s)\n", lustre_cfg_string(lcfg, 1), index, lustre_cfg_string(lcfg, 2)); - set_bit(index, db->fd_ost_index_map); + set_bit(index, fsdb->fsdb_ost_index_map); } /* Figure out mdt indicies */ @@ -107,14 +107,14 @@ static int mgsdb_handler(struct llog_handle *llh, struct llog_rec_hdr *rec, rc = 0; } CDEBUG(D_MGS, "MDT index is %lu\n", index); - set_bit(index, db->fd_mdt_index_map); + set_bit(index, fsdb->fsdb_mdt_index_map); } /* Keep track of the latest marker step */ if (lcfg->lcfg_command == LCFG_MARKER) { struct cfg_marker *marker; marker = lustre_cfg_buf(lcfg, 1); - db->fd_gen = max(db->fd_gen, marker->cm_step); + fsdb->fsdb_gen = max(fsdb->fsdb_gen, marker->cm_step); CDEBUG(D_MGS, "marker %d %s\n", marker->cm_step, marker->cm_comment); } @@ -122,15 +122,15 @@ static int mgsdb_handler(struct llog_handle *llh, struct llog_rec_hdr *rec, RETURN(rc); } -static int mgs_get_db_from_llog(struct obd_device *obd, char *logname, - struct fs_db *db) +static int mgs_get_fsdb_from_llog(struct obd_device *obd, char *logname, + struct fs_db *fsdb) { struct llog_handle *loghandle; struct lvfs_run_ctxt saved; int rc, rc2; ENTRY; - down(&db->fd_sem); + down(&fsdb->fsdb_sem); push_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL); rc = llog_create(llog_get_context(obd, LLOG_CONFIG_ORIG_CTXT), @@ -143,9 +143,9 @@ static int mgs_get_db_from_llog(struct obd_device *obd, char *logname, GOTO(out_close, rc); if (llog_get_size(loghandle) <= 1) - db->fd_flags |= FSDB_EMPTY; + fsdb->fsdb_flags |= FSDB_EMPTY; - rc = llog_process(loghandle, mgsdb_handler, (void *)db, NULL); + rc = llog_process(loghandle, mgs_fsdb_handler, (void *)fsdb, NULL); CDEBUG(D_MGS, "get_db = %d\n", rc); out_close: rc2 = llog_close(loghandle); @@ -154,7 +154,7 @@ out_close: out_pop: pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL); - up(&db->fd_sem); + up(&fsdb->fsdb_sem); RETURN(rc); } @@ -181,16 +181,16 @@ static int count_osts(void *index_map, int map_len) } #endif -static struct fs_db *mgs_find_db(struct obd_device *obd, char *fsname) +static struct fs_db *mgs_find_fsdb(struct obd_device *obd, char *fsname) { struct mgs_obd *mgs = &obd->u.mgs; - struct fs_db *db; + struct fs_db *fsdb; struct list_head *tmp; list_for_each(tmp, &mgs->mgs_fs_db_list) { - db = list_entry(tmp, struct fs_db, fd_list); - if (strcmp(db->fd_name, fsname) == 0) - return db; + fsdb = list_entry(tmp, struct fs_db, fsdb_list); + if (strcmp(fsdb->fsdb_name, fsname) == 0) + return fsdb; } return NULL; } @@ -198,48 +198,48 @@ static struct fs_db *mgs_find_db(struct obd_device *obd, char *fsname) #define INDEX_MAP_SIZE 4096 /* caller must hold the mgs->mgs_fs_db_lock */ -static struct fs_db *mgs_new_db(struct obd_device *obd, char *fsname) +static struct fs_db *mgs_new_fsdb(struct obd_device *obd, char *fsname) { struct mgs_obd *mgs = &obd->u.mgs; - struct fs_db *db; + struct fs_db *fsdb; ENTRY; - OBD_ALLOC(db, sizeof(*db)); - if (!db) + OBD_ALLOC_PTR(fsdb); + if (!fsdb) RETURN(NULL); - OBD_ALLOC(db->fd_ost_index_map, INDEX_MAP_SIZE); - OBD_ALLOC(db->fd_mdt_index_map, INDEX_MAP_SIZE); - if (!db->fd_ost_index_map || !db->fd_mdt_index_map) { + OBD_ALLOC(fsdb->fsdb_ost_index_map, INDEX_MAP_SIZE); + OBD_ALLOC(fsdb->fsdb_mdt_index_map, INDEX_MAP_SIZE); + if (!fsdb->fsdb_ost_index_map || !fsdb->fsdb_mdt_index_map) { CERROR("No memory for index maps\n"); GOTO(err, 0); } - strncpy(db->fd_name, fsname, sizeof(db->fd_name)); - sema_init(&db->fd_sem, 1); - list_add(&db->fd_list, &mgs->mgs_fs_db_list); + strncpy(fsdb->fsdb_name, fsname, sizeof(fsdb->fsdb_name)); + sema_init(&fsdb->fsdb_sem, 1); + list_add(&fsdb->fsdb_list, &mgs->mgs_fs_db_list); - RETURN(db); + RETURN(fsdb); err: - if (db->fd_ost_index_map) - OBD_FREE(db->fd_ost_index_map, INDEX_MAP_SIZE); - if (db->fd_mdt_index_map) - OBD_FREE(db->fd_mdt_index_map, INDEX_MAP_SIZE); - OBD_FREE(db, sizeof(*db)); + if (fsdb->fsdb_ost_index_map) + OBD_FREE(fsdb->fsdb_ost_index_map, INDEX_MAP_SIZE); + if (fsdb->fsdb_mdt_index_map) + OBD_FREE(fsdb->fsdb_mdt_index_map, INDEX_MAP_SIZE); + OBD_FREE_PTR(fsdb); RETURN(NULL); } -static void mgs_free_db(struct fs_db *db) +static void mgs_free_fsdb(struct fs_db *fsdb) { /* wait for anyone with the sem */ - down(&db->fd_sem); - list_del(&db->fd_list); - OBD_FREE(db->fd_ost_index_map, INDEX_MAP_SIZE); - OBD_FREE(db->fd_mdt_index_map, INDEX_MAP_SIZE); - OBD_FREE(db, sizeof(*db)); + down(&fsdb->fsdb_sem); + list_del(&fsdb->fsdb_list); + OBD_FREE(fsdb->fsdb_ost_index_map, INDEX_MAP_SIZE); + OBD_FREE(fsdb->fsdb_mdt_index_map, INDEX_MAP_SIZE); + OBD_FREE_PTR(fsdb); } -int mgs_init_db_list(struct obd_device *obd) +int mgs_init_fsdb_list(struct obd_device *obd) { struct mgs_obd *mgs = &obd->u.mgs; spin_lock_init(&mgs->mgs_fs_db_lock); @@ -247,15 +247,15 @@ int mgs_init_db_list(struct obd_device *obd) return 0; } -int mgs_cleanup_db_list(struct obd_device *obd) +int mgs_cleanup_fsdb_list(struct obd_device *obd) { struct mgs_obd *mgs = &obd->u.mgs; - struct fs_db *db; + struct fs_db *fsdb; struct list_head *tmp, *tmp2; spin_lock(&mgs->mgs_fs_db_lock); list_for_each_safe(tmp, tmp2, &mgs->mgs_fs_db_list) { - db = list_entry(tmp, struct fs_db, fd_list); - mgs_free_db(db); + fsdb = list_entry(tmp, struct fs_db, fsdb_list); + mgs_free_fsdb(fsdb); } spin_unlock(&mgs->mgs_fs_db_lock); return 0; @@ -278,39 +278,39 @@ static inline void name_destroy(char *newname) } -static int mgs_find_or_make_db(struct obd_device *obd, char *name, +static int mgs_find_or_make_fsdb(struct obd_device *obd, char *name, struct fs_db **dbh) { struct mgs_obd *mgs = &obd->u.mgs; - struct fs_db *db; + struct fs_db *fsdb; char *cliname; int rc = 0; spin_lock(&mgs->mgs_fs_db_lock); - db = mgs_find_db(obd, name); - if (db) { + fsdb = mgs_find_fsdb(obd, name); + if (fsdb) { spin_unlock(&mgs->mgs_fs_db_lock); - *dbh = db; + *dbh = fsdb; return 0; } CDEBUG(D_MGS, "Creating new db\n"); - db = mgs_new_db(obd, name); + fsdb = mgs_new_fsdb(obd, name); spin_unlock(&mgs->mgs_fs_db_lock); - if (!db) + if (!fsdb) return -ENOMEM; /* populate the db from the client llog */ name_create(name, "-client", &cliname); - rc = mgs_get_db_from_llog(obd, cliname, db); + rc = mgs_get_fsdb_from_llog(obd, cliname, fsdb); name_destroy(cliname); if (rc) { CERROR("Can't get db from llog %d\n", rc); - mgs_free_db(db); + mgs_free_fsdb(fsdb); return rc; } - *dbh = db; + *dbh = fsdb; return 0; } @@ -320,26 +320,26 @@ static int mgs_find_or_make_db(struct obd_device *obd, char *name, -1= empty client log */ int mgs_check_index(struct obd_device *obd, struct mgs_target_info *mti) { - struct fs_db *db; + struct fs_db *fsdb; void *imap; int rc = 0; ENTRY; LASSERT(!(mti->mti_flags & LDD_F_NEED_INDEX)); - rc = mgs_find_or_make_db(obd, mti->mti_fsname, &db); + rc = mgs_find_or_make_fsdb(obd, mti->mti_fsname, &fsdb); if (rc) { CERROR("Can't get db for %s\n", mti->mti_fsname); RETURN(rc); } - if (db->fd_flags & FSDB_EMPTY) + if (fsdb->fsdb_flags & FSDB_EMPTY) RETURN(-1); if (mti->mti_flags & LDD_F_SV_TYPE_OST) - imap = db->fd_ost_index_map; + imap = fsdb->fsdb_ost_index_map; else if (mti->mti_flags & LDD_F_SV_TYPE_MDT) - imap = db->fd_mdt_index_map; + imap = fsdb->fsdb_mdt_index_map; else RETURN(-EINVAL); @@ -351,21 +351,21 @@ int mgs_check_index(struct obd_device *obd, struct mgs_target_info *mti) int mgs_set_index(struct obd_device *obd, struct mgs_target_info *mti) { - struct fs_db *db; + struct fs_db *fsdb; void *imap; int rc = 0; ENTRY; - rc = mgs_find_or_make_db(obd, mti->mti_fsname, &db); + rc = mgs_find_or_make_fsdb(obd, mti->mti_fsname, &fsdb); if (rc) { CERROR("Can't get db for %s\n", mti->mti_fsname); RETURN(rc); } if (mti->mti_flags & LDD_F_SV_TYPE_OST) - imap = db->fd_ost_index_map; + imap = fsdb->fsdb_ost_index_map; else if (mti->mti_flags & LDD_F_SV_TYPE_MDT) - imap = db->fd_mdt_index_map; + imap = fsdb->fsdb_mdt_index_map; else RETURN(-EINVAL); @@ -538,7 +538,7 @@ static inline int record_mount_opt(struct obd_device *obd, } static int record_marker(struct obd_device *obd, struct llog_handle *llh, - struct fs_db *db, __u32 flags, + struct fs_db *fsdb, __u32 flags, char *svname, char *comment) { struct cfg_marker marker; @@ -549,8 +549,8 @@ static int record_marker(struct obd_device *obd, struct llog_handle *llh, CDEBUG(D_MGS, "lcfg marker\n"); if (flags & CM_START) - db->fd_gen++; - marker.cm_step = db->fd_gen; + fsdb->fsdb_gen++; + marker.cm_step = fsdb->fsdb_gen; marker.cm_flags = flags; strncpy(marker.cm_svname, svname, sizeof(marker.cm_svname)); strncpy(marker.cm_comment, comment, sizeof(marker.cm_comment)); @@ -639,7 +639,7 @@ static int mgs_log_is_empty(struct obd_device *obd, char *name) /******************** config "macros" *********************/ /* lov is the first thing in the mdt and client logs */ -static int mgs_write_log_lov(struct obd_device *obd, struct fs_db *db, +static int mgs_write_log_lov(struct obd_device *obd, struct fs_db *fsdb, struct mgs_target_info *mti, char *logname, char *lovname) { @@ -675,10 +675,10 @@ static int mgs_write_log_lov(struct obd_device *obd, struct fs_db *db, /* This should always be the first entry in a log. rc = mgs_clear_log(obd, logname); */ rc = record_start_log(obd, &llh, logname); - rc = record_marker(obd, llh, db, CM_START, lovname, "lov setup"); + rc = record_marker(obd, llh, fsdb, CM_START, lovname, "lov setup"); rc = record_attach(obd, llh, lovname, "lov", uuid); rc = record_lov_setup(obd, llh, lovname, lovdesc); - rc = record_marker(obd, llh, db, CM_END, lovname, "lov setup"); + rc = record_marker(obd, llh, fsdb, CM_END, lovname, "lov setup"); rc = record_end_log(obd, &llh); OBD_FREE(lovdesc, sizeof(*lovdesc)); @@ -717,7 +717,7 @@ static int mgs_write_log_failnids(struct obd_device *obd, return rc; } -static int mgs_write_log_mdt(struct obd_device *obd, struct fs_db *db, +static int mgs_write_log_mdt(struct obd_device *obd, struct fs_db *fsdb, struct mgs_target_info *mti) { struct llog_handle *llh = NULL; @@ -728,15 +728,26 @@ static int mgs_write_log_mdt(struct obd_device *obd, struct fs_db *db, CDEBUG(D_MGS, "writing new mdt %s\n", mti->mti_svname); - if (*mti->mti_uuid == 0) { + /* COMPAT_146 */ + if (mti->mti_flags & LDD_F_UPGRADE14) { + char *ptr, oldname[sizeof(mti->mti_uuid)]; + /* We're starting with an old uuid. Assume old name for lov + as well since the lov entry already exists in the log. */ + CERROR("old mds uuid %s\n", mti->mti_uuid); + strcpy(oldname, mti->mti_uuid); + ptr = strstr(oldname, "_UUID"); + if (!ptr) { + CERROR("Can't get old MDT name from %s\n", + mti->mti_uuid); + RETURN(-EINVAL); + } + *ptr = '\0'; + name_create("lov_", oldname, &lovname); + CERROR("lov name: %s\n", lovname); + } else { snprintf(mti->mti_uuid, sizeof(mti->mti_uuid), "%s_UUID", mti->mti_svname); name_create(mti->mti_fsname, "-mdtlov", &lovname); - } else { - /* We're starting with an old uuid. Assume old name for lov - as well. */ - /* FIXME parse mds name out of uuid */ - name_create("lov", "_mdsA", &lovname); } /* Append mdt info to mdt log */ @@ -744,7 +755,7 @@ static int mgs_write_log_mdt(struct obd_device *obd, struct fs_db *db, /* This is the first time for all logs for this fs, since any ost should have already started the mdt log. */ first_log++; - rc = mgs_write_log_lov(obd, db, mti, mti->mti_svname, + rc = mgs_write_log_lov(obd, fsdb, mti, mti->mti_svname, lovname); } /* else there's already some ost entries in the mdt log. */ @@ -760,7 +771,7 @@ static int mgs_write_log_mdt(struct obd_device *obd, struct fs_db *db, setup /dev/loop2 ldiskfs mdsA errors=remount-ro,user_xattr */ rc = record_start_log(obd, &llh, mti->mti_svname); - rc = record_marker(obd, llh, db, CM_START, mti->mti_svname, "add mdt"); + rc = record_marker(obd, llh, fsdb, CM_START, mti->mti_svname,"add mdt"); /* FIXME this should just be added via a MGS ioctl OBD_IOC_LOV_SETSTRIPE / LL_IOC_LOV_SETSTRIPE. @@ -789,12 +800,14 @@ static int mgs_write_log_mdt(struct obd_device *obd, struct fs_db *db, rc = record_setup(obd, llh, mti->mti_svname, "dev"/*ignored*/, "type"/*ignored*/, mti->mti_svname, 0/*options*/); - rc = record_marker(obd, llh, db, CM_END, mti->mti_svname, "add mdt"); + rc = record_marker(obd, llh, fsdb, CM_END, mti->mti_svname, "add mdt"); rc = record_end_log(obd, &llh); +#if 0 /* this would be for trying to update an old client log */ if (mti->mti_flags & LDD_F_UPGRADE14) /* If we're upgrading, the client log is done. */ GOTO(out_nocli, rc); +#endif /* Append the mdt info to the client log */ name_create(mti->mti_fsname, "-client", &cliname); @@ -802,7 +815,7 @@ static int mgs_write_log_mdt(struct obd_device *obd, struct fs_db *db, name_create(mti->mti_fsname, "-clilov", &lovname); if (first_log) { /* Start client log */ - rc = mgs_write_log_lov(obd, db, mti, cliname, lovname); + rc = mgs_write_log_lov(obd, fsdb, mti, cliname, lovname); } name_create(libcfs_nid2str(mti->mti_nids[0]), /*"_UUID"*/"", &nodeuuid); @@ -817,7 +830,7 @@ static int mgs_write_log_mdt(struct obd_device *obd, struct fs_db *db, #14 L mount_option 0: 1:client 2:lov1 3:MDC_uml1_mdsA_MNT_client */ rc = record_start_log(obd, &llh, cliname); - rc = record_marker(obd, llh, db, CM_START, mti->mti_svname, "add mdc"); + rc = record_marker(obd, llh, fsdb, CM_START, mti->mti_svname,"add mdc"); if (!first_log && s1) { /* Record new lov settings */ record_param(obd, llh, lovname, s1, s2, s3, s4); @@ -831,7 +844,7 @@ static int mgs_write_log_mdt(struct obd_device *obd, struct fs_db *db, rc = record_setup(obd, llh, mdcname, mti->mti_uuid,nodeuuid, 0, 0); rc = mgs_write_log_failnids(obd, mti, llh, mdcname); rc = record_mount_opt(obd, llh, cliname, lovname, mdcname); - rc = record_marker(obd, llh, db, CM_END, mti->mti_svname, "add mdc"); + rc = record_marker(obd, llh, fsdb, CM_END, mti->mti_svname, "add mdc"); rc = record_end_log(obd, &llh); name_destroy(mdcuuid); @@ -844,7 +857,7 @@ out_nocli: } /* Add the ost info to the client/mdt lov */ -static int mgs_write_log_osc(struct obd_device *obd, struct fs_db *db, +static int mgs_write_log_osc(struct obd_device *obd, struct fs_db *fsdb, struct mgs_target_info *mti, char *logname, char *lovname) { @@ -855,7 +868,7 @@ static int mgs_write_log_osc(struct obd_device *obd, struct fs_db *db, if (mgs_log_is_empty(obd, logname)) { /* The first time an osc is added, setup the lov */ - rc = mgs_write_log_lov(obd, db, mti, logname, lovname); + rc = mgs_write_log_lov(obd, fsdb, mti, logname, lovname); } CDEBUG(D_MGS, "adding osc for %s to log %s\n", @@ -878,7 +891,7 @@ static int mgs_write_log_osc(struct obd_device *obd, struct fs_db *db, #08 L lov_modify_tgts add 0:lov1 1:ost1_UUID 2(index):0 3(gen):1 */ rc = record_start_log(obd, &llh, logname); - rc = record_marker(obd, llh, db, CM_START, mti->mti_svname, "add osc"); + rc = record_marker(obd, llh, fsdb, CM_START, mti->mti_svname,"add osc"); for (i = 0; i < mti->mti_nid_count; i++) { CDEBUG(D_MGS, "add nid %s\n", libcfs_nid2str(mti->mti_nids[i])); rc = record_add_uuid(obd, llh, mti->mti_nids[i], nodeuuid); @@ -888,7 +901,7 @@ static int mgs_write_log_osc(struct obd_device *obd, struct fs_db *db, rc = mgs_write_log_failnids(obd, mti, llh, oscname); snprintf(index, sizeof(index), "%d", mti->mti_stripe_index); rc = record_lov_add(obd, llh, lovname, mti->mti_uuid, index, "1"); - rc = record_marker(obd, llh, db, CM_END, mti->mti_svname, "add osc"); + rc = record_marker(obd, llh, fsdb, CM_END, mti->mti_svname, "add osc"); rc = record_end_log(obd, &llh); name_destroy(lovuuid); @@ -898,7 +911,7 @@ static int mgs_write_log_osc(struct obd_device *obd, struct fs_db *db, return rc; } -static int mgs_write_log_ost(struct obd_device *obd, struct fs_db *db, +static int mgs_write_log_ost(struct obd_device *obd, struct fs_db *fsdb, struct mgs_target_info *mti) { struct llog_handle *llh = NULL; @@ -930,8 +943,8 @@ static int mgs_write_log_ost(struct obd_device *obd, struct fs_db *db, setup /dev/loop2 ldiskfs f|n errors=remount-ro,user_xattr */ rc = record_start_log(obd, &llh, mti->mti_svname); - rc = record_marker(obd, llh, db, CM_START, mti->mti_svname, "add ost"); - if (*mti->mti_uuid == 0) + rc = record_marker(obd, llh, fsdb, CM_START, mti->mti_svname,"add ost"); + if (*mti->mti_uuid == '\0') snprintf(mti->mti_uuid, sizeof(mti->mti_uuid), "%s_UUID", mti->mti_svname); rc = record_attach(obd, llh, mti->mti_svname, @@ -939,28 +952,30 @@ static int mgs_write_log_ost(struct obd_device *obd, struct fs_db *db, rc = record_setup(obd,llh,mti->mti_svname, "dev"/*ignored*/,"type"/*ignored*/, "f", 0/*options*/); - rc = record_marker(obd, llh, db, CM_END, mti->mti_svname, "add ost"); + rc = record_marker(obd, llh, fsdb, CM_END, mti->mti_svname, "add ost"); rc = record_end_log(obd, &llh); - + +#if 0 /* this would be for trying to update an old client log */ if (mti->mti_flags & LDD_F_UPGRADE14) /* If we're upgrading, the client log is done. */ RETURN(rc); +#endif /* We also have to update the other logs where this osc is part of the lov */ /* Append ost info to mdt log */ + /* FIXME add to all mdt logs for CMD */ // FIXME need real mdt name -- but MDT may not have registered yet! - // FIXME add to all mdt logs for CMD name_create(mti->mti_fsname, "-MDT0000", &logname); name_create(mti->mti_fsname, "-mdtlov", &lovname); - mgs_write_log_osc(obd, db, mti, logname, lovname); + mgs_write_log_osc(obd, fsdb, mti, logname, lovname); name_destroy(lovname); name_destroy(logname); /* Append ost info to the client log */ name_create(mti->mti_fsname, "-client", &logname); name_create(mti->mti_fsname, "-clilov", &lovname); - mgs_write_log_osc(obd, db, mti, logname, lovname); + mgs_write_log_osc(obd, fsdb, mti, logname, lovname); name_destroy(lovname); name_destroy(logname); @@ -970,7 +985,7 @@ static int mgs_write_log_ost(struct obd_device *obd, struct fs_db *db, int mgs_write_log_target(struct obd_device *obd, struct mgs_target_info *mti) { - struct fs_db *db; + struct fs_db *fsdb; int rc = -EINVAL; /* set/check the new target index */ @@ -980,25 +995,26 @@ int mgs_write_log_target(struct obd_device *obd, return rc; } - rc = mgs_find_or_make_db(obd, mti->mti_fsname, &db); + rc = mgs_find_or_make_fsdb(obd, mti->mti_fsname, &fsdb); if (rc) { CERROR("Can't get db for %s\n", mti->mti_fsname); return rc; } - down(&db->fd_sem); + down(&fsdb->fsdb_sem); if (mti->mti_flags & LDD_F_SV_TYPE_MDT) { - rc = mgs_write_log_mdt(obd, db, mti); + rc = mgs_write_log_mdt(obd, fsdb, mti); } else if (mti->mti_flags & LDD_F_SV_TYPE_OST) { - rc = mgs_write_log_ost(obd, db, mti); + rc = mgs_write_log_ost(obd, fsdb, mti); } else { CERROR("Unknown target type %#x, can't create log for %s\n", mti->mti_flags, mti->mti_svname); } - up(&db->fd_sem); + up(&fsdb->fsdb_sem); if (!rc) - db->fd_flags &= ~FSDB_EMPTY; + /* I know the db isn't empty if we succeeded in writing. */ + fsdb->fsdb_flags &= ~FSDB_EMPTY; return rc; } @@ -1007,7 +1023,7 @@ int mgs_write_log_target(struct obd_device *obd, /* COMPAT_146 */ /***************** upgrade pre-mountconf logs to mountconf *****************/ -int mgs_upgrade_logs_14(struct obd_device *obd, struct fs_db *db, +int mgs_upgrade_logs_14(struct obd_device *obd, struct fs_db *fsdb, struct mgs_target_info *mti) { int rc = 0; @@ -1035,111 +1051,99 @@ int mgs_upgrade_logs_14(struct obd_device *obd, struct fs_db *db, ? update server uuids? */ - /* FIXME hardcoded for proof-of-concept. Really, we have to parse the - old logs to find osts, lov & mdc for client mountopt. */ + + /* + Why not just create logs normally, as servers register? + That way logs are modern (except have old uuids) + - Old clients can continue to use upgraded OSTs + - New clients will only start with upgraded OSTs + - MDT won't know about old OSTs, only upgraded :( + Don't need 1,2,3 above (normal server gen at first mount), uuid from + old last_rcvd + + */ + /* old mdt log: + old osc's were part of old lov, + mount opt connects mdt to lov + so need to use old lov name. + old client logs starts old mdc and lov, + so need to use old lov,mdc names in mount opt - but new client name + *-client instead of just "client" */ - if (!(mti->mti_flags & LDD_F_SV_TYPE_MDT)) { - CERROR("MDT first\n"); - RETURN(-EINVAL); - } - - if (1) - { + + if ((mti->mti_flags & LDD_F_SV_TYPE_MDT)) { CDEBUG(D_MGS, "Upgrade MDT\n"); - /* Need to set the mdsuuid first */ - mti->mti_stripe_index = 0; - server_make_name(mti->mti_flags, mti->mti_stripe_index, - mti->mti_fsname, mti->mti_svname); - sprintf(mti->mti_uuid, "mdsA_UUID"); if (mgs_log_is_empty(obd, mti->mti_svname)) { CERROR("The MDT log %s is missing.\n", mti->mti_svname); RETURN(-ENOENT); } + /* Append the MDT startup sequence to the old log + (lconf used to start the MDT directly) */ /* FIXME Old logs already have an old mount opt which we should drop */ - rc = mgs_write_log_mdt(obd, db, mti); - } - - { - /* Write the ost logs */ - struct mgs_target_info omti; - CDEBUG(D_MGS, "Upgrade OST\n"); - - /* these indicies were already marked by mgs_db_handler */ - omti = *mti; - omti.mti_flags |= LDD_F_SV_TYPE_OST; - omti.mti_flags &= ~(LDD_F_SV_TYPE_MDT | LDD_F_SV_TYPE_MGS); - omti.mti_stripe_index = 0; - server_make_name(omti.mti_flags, omti.mti_stripe_index, - omti.mti_fsname, omti.mti_svname); - sprintf(omti.mti_uuid, "ost1_UUID"); - if (!mgs_log_is_empty(obd, omti.mti_svname)) { - CERROR("The OST log %s already exists.\n", - omti.mti_svname); - } else { - rc = mgs_write_log_ost(obd, db, &omti); - } - - omti.mti_stripe_index = 1; - server_make_name(omti.mti_flags, omti.mti_stripe_index, - omti.mti_fsname, omti.mti_svname); - sprintf(omti.mti_uuid, "ost2_UUID"); - if (!mgs_log_is_empty(obd, omti.mti_svname)) { - CERROR("The OST log %s already exists.\n", - omti.mti_svname); - } else { - rc = mgs_write_log_ost(obd, db, &omti); - } - } + rc = mgs_write_log_mdt(obd, fsdb, mti); + if (rc) + RETURN(rc); - { +#if 0 /* this would be for trying to update an old client log */ struct llog_handle *llh = NULL; char *cliname; CDEBUG(D_MGS, "Upgrade client\n"); name_create(mti->mti_fsname, "-client", &cliname); - /* Mark the client log so we know we updated (fd_gen == 1) */ rc = record_start_log(obd, &llh, cliname); - rc = record_marker(obd, llh, db, CM_START, "client", + rc = record_marker(obd, llh, fsdb, CM_START, "client", "upgrade from 1.4"); - /* FIXME find the old lovname and mdcname */ + /* FIXME find the old lovname and mdcname from old log */ /* old: mount_option 0: 1:client 2:lov1 3:MDC_uml1_mdsA_MNT_client */ /* new: mount_option 0: 1:lustre-client 2:lustre-clilov 3:lustre-MDT0000-mdc */ rc = record_mount_opt(obd, llh, cliname, "lov1", "MDC_uml1_mdsA_MNT_client"); - rc = record_marker(obd, llh, db, CM_END, "client", + rc = record_marker(obd, llh, fsdb, CM_END, "client", "upgrade to 1.6"); rc = record_end_log(obd, &llh); name_destroy(cliname); +#endif } + if ((mti->mti_flags & LDD_F_SV_TYPE_OST)) { + CDEBUG(D_MGS, "Upgrade OST\n"); + /* A regular new ost log, but don't update client or MDT logs */ + rc = mgs_write_log_ost(obd, fsdb, mti); + } + RETURN(rc); } -/* Make newly-connecting upgraded servers happy. */ +/* first connect of upgraded servers */ int mgs_upgrade_sv_14(struct obd_device *obd, struct mgs_target_info *mti) { - struct fs_db *db; + struct fs_db *fsdb; int rc = 0; ENTRY; + + CDEBUG(D_MGS, "upgrading server %s from pre-1.6\n", + mti->mti_svname); + server_mti_print("upgrade", mti); - rc = mgs_find_or_make_db(obd, mti->mti_fsname, &db); - if (rc) { - LCONSOLE_ERROR("The 1.4 log for fs %s in %s is unreadable, " - "I can't upgrade it.\n", - mti->mti_fsname, MOUNT_CONFIGS_DIR); - RETURN(-ENOENT); - } + rc = mgs_find_or_make_fsdb(obd, mti->mti_fsname, &fsdb); + if (rc) + RETURN(rc); - if (db->fd_gen == 0) { + if (fsdb->fsdb_flags & FSDB_EMPTY) + CWARN("missing client log\n"); + + if (!(fsdb->fsdb_flags & FSDB_EMPTY) && (fsdb->fsdb_gen == 0)) { /* There were no markers in the client log, meaning we have not updated the logs for this fs */ - rc = mgs_upgrade_logs_14(obd, db, mti); - if (rc) - RETURN(rc); + CWARN("Old log, not updated yet\n"); } + rc = mgs_upgrade_logs_14(obd, fsdb, mti); + if (rc) + RETURN(rc); + RETURN(rc); } /* end COMPAT_146 */ @@ -1206,7 +1210,7 @@ out_pop: int mgs_erase_logs(struct obd_device *obd, char *fsname) { struct mgs_obd *mgs = &obd->u.mgs; - static struct fs_db *db; + static struct fs_db *fsdb; struct list_head dentry_list; struct l_linux_dirent *dirent, *n; int rc, len = strlen(fsname); @@ -1222,9 +1226,9 @@ int mgs_erase_logs(struct obd_device *obd, char *fsname) /* Delete the fs db */ spin_lock(&mgs->mgs_fs_db_lock); - db = mgs_find_db(obd, fsname); - if (db) - mgs_free_db(db); + fsdb = mgs_find_fsdb(obd, fsname); + if (fsdb) + mgs_free_fsdb(fsdb); spin_unlock(&mgs->mgs_fs_db_lock); list_for_each_entry_safe(dirent, n, &dentry_list, lld_list) { diff --git a/lustre/obdclass/obd_mount.c b/lustre/obdclass/obd_mount.c index 80c185d..534f93b 100644 --- a/lustre/obdclass/obd_mount.c +++ b/lustre/obdclass/obd_mount.c @@ -780,6 +780,17 @@ static int server_stop_servers(struct super_block *sb) RETURN(rc); } +int server_mti_print(char *title, struct mgs_target_info *mti) +{ + PRINT_CMD(PRINT_MASK, "mti %s\n", title); + PRINT_CMD(PRINT_MASK, "server: %s\n", mti->mti_svname); + PRINT_CMD(PRINT_MASK, "fs: %s\n", mti->mti_fsname); + PRINT_CMD(PRINT_MASK, "uuid: %s\n", mti->mti_uuid); + PRINT_CMD(PRINT_MASK, "ver: %d flags: %#x\n", + mti->mti_config_ver, mti->mti_flags); + return(0); +} + static int server_sb2mti(struct super_block *sb, struct mgs_target_info *mti) { struct lustre_sb_info *lsi = s2lsi(sb); @@ -813,6 +824,7 @@ static int server_sb2mti(struct super_block *sb, struct mgs_target_info *mti) mti->mti_failnid_count = ldd->ldd_failnid_count; memcpy(mti->mti_failnids, ldd->ldd_failnid, sizeof(mti->mti_failnids)); + memcpy(mti->mti_uuid, ldd->ldd_uuid, sizeof(mti->mti_uuid)); mti->mti_config_ver = 0; mti->mti_flags = ldd->ldd_flags; mti->mti_stripe_index = ldd->ldd_svindex; @@ -844,8 +856,7 @@ int server_register_target(struct super_block *sb) if (rc) GOTO(out, rc); - CDEBUG(D_MOUNT, "%sregistration %s, fs=%s, %s, index=%04x, flags=%#x\n", - mti->mti_flags & LDD_F_NEED_REGISTER ? "Initial " : "", + CDEBUG(D_MOUNT, "Registration %s, fs=%s, %s, index=%04x, flags=%#x\n", mti->mti_svname, mti->mti_fsname, libcfs_nid2str(mti->mti_nids[0]), mti->mti_stripe_index, mti->mti_flags); @@ -853,7 +864,7 @@ int server_register_target(struct super_block *sb) /* Register the target */ /* FIXME use mdc_process_config instead */ rc = obd_set_info(mgc->u.cli.cl_mgc_mgsexp, - strlen("add_target"), "add_target", + strlen("register_target"), "register_target", sizeof(*mti), mti); if (rc) { CERROR("registration with the MGS failed (%d)\n", rc); @@ -862,7 +873,7 @@ int server_register_target(struct super_block *sb) /* If this flag is set, it means the MGS wants us to change our on-disk data. (So far this means just the index.) */ - if (mti->mti_flags & LDD_F_REWRITE) { + if (mti->mti_flags & LDD_F_REWRITE_LDD) { CDEBUG(D_MOUNT, "Must change on-disk index from %#x to %#x for " " %s\n", ldd->ldd_svindex, mti->mti_stripe_index, @@ -871,7 +882,7 @@ int server_register_target(struct super_block *sb) strncpy(ldd->ldd_svname, mti->mti_svname, sizeof(ldd->ldd_svname)); /* or ldd_make_sv_name(ldd); */ - ldd->ldd_flags = mti->mti_flags & ~LDD_F_REWRITE; + ldd->ldd_flags = mti->mti_flags & ~LDD_F_REWRITE_LDD; ldd_write(&mgc->obd_lvfs_ctxt, ldd); /* FIXME write last_rcvd?, disk label? */ @@ -930,8 +941,8 @@ static int server_start_targets(struct super_block *sb, struct vfsmount *mnt) /* Register with MGS */ rc = server_register_target(sb); if (rc && (lsi->lsi_ldd->ldd_flags & - (LDD_F_NEED_INDEX | LDD_F_NEED_REGISTER | LDD_F_UPGRADE14))){ - CERROR("Required refistration failed for %s: %d\n", + (LDD_F_NEED_INDEX | LDD_F_UPDATE | LDD_F_UPGRADE14))){ + CERROR("Required registration failed for %s: %d\n", lsi->lsi_ldd->ldd_svname, rc); GOTO(out, rc); } @@ -1781,5 +1792,7 @@ EXPORT_SYMBOL(server_get_mount); EXPORT_SYMBOL(server_put_mount); EXPORT_SYMBOL(server_register_target); EXPORT_SYMBOL(server_name2index); +EXPORT_SYMBOL(server_mti_print); + diff --git a/lustre/ptlrpc/pack_generic.c b/lustre/ptlrpc/pack_generic.c index 5cfc889..b3e09ff 100644 --- a/lustre/ptlrpc/pack_generic.c +++ b/lustre/ptlrpc/pack_generic.c @@ -1123,8 +1123,8 @@ void lustre_assert_wire_constants(void) (long long)MGS_DISCONNECT); LASSERTF(MGS_EXCEPTION == 252, " found %lld\n", (long long)MGS_EXCEPTION); - LASSERTF(MGS_TARGET_ADD == 253, " found %lld\n", - (long long)MGS_TARGET_ADD); + LASSERTF(MGS_TARGET_REG == 253, " found %lld\n", + (long long)MGS_TARGET_REG); LASSERTF(MGS_TARGET_DEL == 254, " found %lld\n", (long long)MGS_TARGET_DEL); LASSERTF(OBD_PING == 400, " found %lld\n", diff --git a/lustre/utils/Makefile.am b/lustre/utils/Makefile.am index 0ec6b46..066abd3 100644 --- a/lustre/utils/Makefile.am +++ b/lustre/utils/Makefile.am @@ -8,8 +8,7 @@ AM_LDFLAGS := -L$(top_builddir)/lnet/utils LIBPTLCTL := $(top_builddir)/lnet/utils/libptlctl.a -sbin_scripts = llanalyze llstat.pl llobdstat.pl lactive \ - load_ldap.sh lrun +sbin_scripts = llanalyze llstat.pl llobdstat.pl lactive lrun bin_scripts = lfind lstripe if UTILS diff --git a/lustre/utils/mkfs_lustre.c b/lustre/utils/mkfs_lustre.c index 853b828..d48c302 100644 --- a/lustre/utils/mkfs_lustre.c +++ b/lustre/utils/mkfs_lustre.c @@ -55,7 +55,7 @@ command_t cmdlist[] = { #define INDEX_UNASSIGNED 0xFFFF static char *progname; -static int verbose = 1; +static int verbose = 0; static int print_only = 0; @@ -572,8 +572,8 @@ int write_local_files(struct mkfs_opts *mop) ret = mount(dev, mntpt, MT_STR(&mop->mo_ldd), 0, NULL); if (ret) { - fprintf(stderr, "%s: Unable to mount %s: %d\n", - progname, mop->mo_device, ret); + fprintf(stderr, "%s: Unable to mount %s: %s\n", + progname, dev, strerror(errno)); goto out_rmdir; } @@ -609,6 +609,10 @@ int write_local_files(struct mkfs_opts *mop) char cmd[128]; char *term; vprint("Copying old logs\n"); +#if 0 + /* Generate new client log as servers upgrade. Starting a new client + may end up with short lov's, so will be degraded until all servers + upgrade */ /* Copy the old client log to fsname-client */ sprintf(filepnm, "%s/%s/%s-client", mntpt, MOUNT_CONFIGS_DIR, mop->mo_ldd.ldd_fsname); @@ -629,6 +633,10 @@ int write_local_files(struct mkfs_opts *mop) mop->mo_ldd.ldd_fsname); goto out_umnt; } + #endif + /* We need to use the old mdt log because otherwise mdt won't + have complete lov if old clients connect before all + servers upgrade. */ /* Copy the old mdt log to fsname-MDT0000 (get old name from mdt_UUID) */ ret = 1; @@ -692,7 +700,7 @@ int read_local_files(struct mkfs_opts *mop) ret = mount(dev, mntpt, MT_STR(&mop->mo_ldd), 0, NULL); if (ret) { fprintf(stderr, "%s: Unable to mount %s: %s\n", - progname, mop->mo_device, strerror(ret)); + progname, dev, strerror(errno)); goto out_rmdir; } @@ -705,23 +713,24 @@ int read_local_files(struct mkfs_opts *mop) /* COMPAT_146 */ /* Try to read pre-1.6 config from last_rcvd */ struct lr_server_data lsd; - fprintf(stderr, "%s: Unable to read %s, trying last_rcvd\n", - progname, MOUNT_DATA_FILE); + vprint("%s: Unable to read %s, trying last_rcvd\n", + progname, MOUNT_DATA_FILE); sprintf(filepnm, "%s/%s", mntpt, LAST_RCVD); filep = fopen(filepnm, "r"); if (!filep) { fprintf(stderr, "%s: Unable to read old data\n", progname); - ret = errno; + ret = -errno; goto out_umnt; } vprint("Reading %s\n", LAST_RCVD); - ret = fread(&lsd, sizeof(lsd), 1, filep); + ret = fread(&lsd, 1, sizeof(lsd), filep); if (ret < sizeof(lsd)) { fprintf(stderr, "%s: Short read (%d of %d)\n", progname, ret, sizeof(lsd)); - ret = ferror(filep); - goto out_umnt; + ret = -ferror(filep); + if (ret) + goto out_close; } if (lsd.lsd_feature_compat & OBD_COMPAT_OST) { mop->mo_ldd.ldd_flags = LDD_F_SV_TYPE_OST; @@ -761,6 +770,7 @@ int read_local_files(struct mkfs_opts *mop) mop->mo_ldd.ldd_flags |= LDD_F_UPGRADE14; } /* end COMPAT_146 */ +out_close: fclose(filep); out_umnt: @@ -1149,7 +1159,7 @@ int main(int argc, char *const argv[]) server_make_name(ldd->ldd_flags, ldd->ldd_svindex, ldd->ldd_fsname, ldd->ldd_svname); - if (verbose > 0) + if (verbose >= 0) print_ldd("Permanent disk data", ldd); if (print_only) {