Whamcloud - gitweb
Branch b1_4_mountconf
authornathan <nathan>
Thu, 16 Feb 2006 19:14:55 +0000 (19:14 +0000)
committernathan <nathan>
Thu, 16 Feb 2006 19:14:55 +0000 (19:14 +0000)
b=9860
namespace cleanup, new flags for upgrading from 146

lustre/include/linux/lustre_disk.h
lustre/include/linux/lustre_idl.h
lustre/include/linux/lustre_mgs.h
lustre/mgc/mgc_request.c
lustre/mgs/mgs_handler.c
lustre/mgs/mgs_internal.h
lustre/mgs/mgs_llog.c
lustre/obdclass/obd_mount.c
lustre/ptlrpc/pack_generic.c
lustre/utils/Makefile.am
lustre/utils/mkfs_lustre.c

index 3d34b5f..1910f5c 100644 (file)
 #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);
index fde3354..d12e1de 100644 (file)
@@ -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;
index a36599b..e9638a6 100644 (file)
 #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);
index af3abec..167ba59 100644 (file)
@@ -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: 
index 3d6a61d..553876a 100644 (file)
@@ -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");
index 2d2ae3c..d77b761 100644 (file)
@@ -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);
index a5bdb50..4951c5a 100644 (file)
 */
 /* 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) {
index 80c185d..534f93b 100644 (file)
@@ -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);
+
 
 
index 5cfc889..b3e09ff 100644 (file)
@@ -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",
index 0ec6b46..066abd3 100644 (file)
@@ -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
index 853b828..d48c302 100644 (file)
@@ -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) {