Whamcloud - gitweb
delete the mgs_open_llog, use the disk llog instead
authorlincent <lincent>
Wed, 9 Nov 2005 08:08:10 +0000 (08:08 +0000)
committerlincent <lincent>
Wed, 9 Nov 2005 08:08:10 +0000 (08:08 +0000)
lustre/include/linux/lustre_mgs.h
lustre/mgs/Makefile.in
lustre/mgs/mgs_handler.c
lustre/mgs/mgs_llog.c
lustre/ptlrpc/import.c

index f4d85ce..c16697f 100644 (file)
@@ -100,7 +100,7 @@ struct llog_verion_desc{
 
 struct mgc_open_llog {
         struct list_head   mol_list;
-        __u64              mol_version;
+        __u64              mol_step;
         llogid_t           mol_id;
         char               mol_fsname[40];
 };
index f340f73..8bb6a5f 100644 (file)
@@ -1,4 +1,4 @@
 MODULES := mgs
-mgs-objs := mgs_handler.o mgs_fs.o mgs_llog.o
+mgs-objs := mgs_handler.o mgs_fs.o mgs_llog.o lproc_mgs.o
 
 @INCLUDE_RULES@
index fa19e91..03a22bc 100644 (file)
@@ -274,7 +274,7 @@ static int mgs_postsetup(struct obd_device *obd)
         ENTRY;
 
         rc = llog_setup(obd, LLOG_CONFIG_ORIG_CTXT, obd, 0, NULL,
-                        &mgs_llog_lvfs_ops);
+                        &llog_lvfs_ops);
         RETURN(rc);
 }
 
@@ -301,9 +301,9 @@ static int mgs_cleanup(struct obd_device *obd)
                 RETURN(0);
         save_dev = lvfs_sbdev(mgs->mgs_sb);
 
-        lprocfs_obd_cleanup(obd);
+//       lprocfs_obd_cleanup(obd);
 
-        mgs_update_server_data(obd, 1);
//       mgs_update_server_data(obd, 1);
 
         mgs_fs_cleanup(obd);
 
@@ -503,8 +503,8 @@ static int mgt_setup(struct obd_device *obd, obd_count len, void *buf)
         int rc = 0;
         ENTRY;
 
-        lprocfs_init_vars(mgt, &lvars);
-        lprocfs_obd_setup(obd, lvars.obd_vars);
+       lprocfs_init_vars(mgt, &lvars);
+       lprocfs_obd_setup(obd, lvars.obd_vars);
 
         mgs->mgs_service =
                 ptlrpc_init_svc(MGS_NBUFS, MGS_BUFSIZE, MGS_MAXREQSIZE,
index c40829d..6eaef93 100644 (file)
@@ -202,7 +202,6 @@ struct mgs_open_llog* create_mgs_open_llog(struct obd_device *obd, char *name)
         struct mgs_obd *mgs = &obd->u.mgs;
         struct mgs_open_llog *mol, *tmp;
         char *p;
-        int rc;
 
         OBD_ALLOC(mol, sizeof(*mol));
         if (!mol) {
@@ -217,11 +216,11 @@ struct mgs_open_llog* create_mgs_open_llog(struct obd_device *obd, char *name)
                 CERROR("logname need to include fsname.\n");
                 goto cleanup;
         }
-
+#if 0
         rc = mgs_load_system_db(obd, name, &mol->mol_system_db);
         if (rc) 
                 goto cleanup;
-
+#endif
         mol->mol_refs = 1;
 
         spin_lock_init(&mol->mol_lock);
@@ -798,521 +797,3 @@ int mgs_iocontrol(unsigned int cmd, struct obd_export *exp, int len,
         RETURN(0);
 }
 
-
-#ifdef __KERNEL__
-
-static int mgs_llog_lvfs_pad(struct obd_device *obd, struct l_file *file,
-                                int len, int index)
-{
-        struct llog_rec_hdr rec = { 0 };
-        struct llog_rec_tail tail;
-        int rc;
-        ENTRY;
-
-        LASSERT(len >= LLOG_MIN_REC_SIZE && (len & 0x7) == 0);
-
-        tail.lrt_len = rec.lrh_len = len;
-        tail.lrt_index = rec.lrh_index = index;
-        rec.lrh_type = LLOG_PAD_MAGIC;
-
-        rc = fsfilt_write_record(obd, file, &rec, sizeof(rec), &file->f_pos, 0);
-        if (rc) {
-                CERROR("error writing padding record: rc %d\n", rc);
-                goto out;
-        }
-
-        file->f_pos += len - sizeof(rec) - sizeof(tail);
-        rc = fsfilt_write_record(obd, file, &tail, sizeof(tail),&file->f_pos,0);
-        if (rc) {
-                CERROR("error writing padding record: rc %d\n", rc);
-                goto out;
-        }
-
- out:
-        RETURN(rc);
-}
-
-static int mgs_llog_lvfs_read_header(struct llog_handle *handle)
-{
-        struct obd_device *obd;
-        int rc;
-        ENTRY;
-
-        LASSERT(sizeof(*handle->lgh_hdr) == LLOG_CHUNK_SIZE);
-
-        obd = handle->lgh_ctxt->loc_exp->exp_obd;
-
-        if (handle->lgh_file->f_dentry->d_inode->i_size == 0) {
-                CDEBUG(D_HA, "not reading header from 0-byte log\n");
-                RETURN(LLOG_EEMPTY);
-        }
-
-        rc = llog_lvfs_read_blob(obd, handle->lgh_file, handle->lgh_hdr,
-                                 LLOG_CHUNK_SIZE, 0);
-        if (rc) {
-                CERROR("error reading log header from %.*s\n",
-                       handle->lgh_file->f_dentry->d_name.len,
-                       handle->lgh_file->f_dentry->d_name.name);
-        } else {
-                struct llog_rec_hdr *llh_hdr = &handle->lgh_hdr->llh_hdr;
-
-                if (LLOG_REC_HDR_NEEDS_SWABBING(llh_hdr))
-                        lustre_swab_llog_hdr(handle->lgh_hdr);
-
-                if (llh_hdr->lrh_type != LLOG_HDR_MAGIC) {
-                        CERROR("bad log %.*s header magic: %#x (expected %#x)\n",
-                               handle->lgh_file->f_dentry->d_name.len,
-                               handle->lgh_file->f_dentry->d_name.name,
-                               llh_hdr->lrh_type, LLOG_HDR_MAGIC);
-                        rc = -EIO;
-                } else if (llh_hdr->lrh_len != LLOG_CHUNK_SIZE) {
-                        CERROR("incorrectly sized log %.*s header: %#x "
-                               "(expected %#x)\n",
-                               handle->lgh_file->f_dentry->d_name.len,
-                               handle->lgh_file->f_dentry->d_name.name,
-                               llh_hdr->lrh_len, LLOG_CHUNK_SIZE);
-                        CERROR("you may need to re-run lconf --write_conf.\n");
-                        rc = -EIO;
-                }
-        }
-
-        handle->lgh_last_idx = handle->lgh_hdr->llh_tail.lrt_index;
-        handle->lgh_file->f_pos = handle->lgh_file->f_dentry->d_inode->i_size;
-
-        RETURN(rc);
-}
-
-static int mgs_llog_lvfs_write_blob(struct obd_device *obd, struct l_file *file,
-                                struct llog_rec_hdr *rec, void *buf, loff_t off)
-{
-        int rc;
-        struct llog_rec_tail end;
-        loff_t saved_off = file->f_pos;
-        int buflen = rec->lrh_len;
-
-        ENTRY;
-        file->f_pos = off;
-
-        if (!buf) {
-                rc = fsfilt_write_record(obd, file, rec, buflen,&file->f_pos,0);
-                if (rc) {
-                        CERROR("error writing log record: rc %d\n", rc);
-                        goto out;
-                }
-                GOTO(out, rc = 0);
-        }
-
-        /* the buf case */
-        rec->lrh_len = sizeof(*rec) + buflen + sizeof(end);
-        rc = fsfilt_write_record(obd, file, rec, sizeof(*rec), &file->f_pos, 0);
-        if (rc) {
-                CERROR("error writing log hdr: rc %d\n", rc);
-                goto out;
-        }
-
-        rc = fsfilt_write_record(obd, file, buf, buflen, &file->f_pos, 0);
-        if (rc) {
-                CERROR("error writing log buffer: rc %d\n", rc);
-                goto out;
-        }
-
-        end.lrt_len = rec->lrh_len;
-        end.lrt_index = rec->lrh_index;
-        rc = fsfilt_write_record(obd, file, &end, sizeof(end), &file->f_pos, 0);
-        if (rc) {
-                CERROR("error writing log tail: rc %d\n", rc);
-                goto out;
-        }
-
-        rc = 0;
- out:
-        if (saved_off > file->f_pos)
-                file->f_pos = saved_off;
-        LASSERT(rc <= 0);
-        RETURN(rc);
-}
-
-static int mgs_llog_lvfs_read_blob(struct obd_device *obd, struct l_file *file,
-                                void *buf, int size, loff_t off)
-{
-        loff_t offset = off;
-        int rc;
-        ENTRY;
-
-        rc = fsfilt_read_record(obd, file, buf, size, &offset);
-        if (rc) {
-                CERROR("error reading log record: rc %d\n", rc);
-                RETURN(rc);
-        }
-        RETURN(0);
-}
-
-/* We can skip reading at least as many log blocks as the number of
-* minimum sized log records we are skipping.  If it turns out
-* that we are not far enough along the log (because the
-* actual records are larger than minimum size) we just skip
-* some more records. */
-
-static void llog_skip_over(__u64 *off, int curr, int goal)
-{
-        if (goal <= curr)
-                return;
-        *off = (*off + (goal-curr-1) * LLOG_MIN_REC_SIZE) &
-                ~(LLOG_CHUNK_SIZE - 1);
-}
-
-static struct dentry * 
-mgs_lvfs_logid2dentry(struct obd_device *obd, struct dentry *parent,
-                      struct llog_logid *logid)
-{
-        struct mgs_obd *mgs = &obd->u.mgs;
-        struct ll_fid fid;
-        fid.id = logid->lgl_oid;
-        fid.generation = logid->lgl_ogen;
-
-        CDEBUG(D_DENTRY, "--> mgs_logid2dentry: ino/gen %lu/%u, sb %p\n",
-               fid.id, fid.generation, mgs->mgs_sb);
-
-        return ll_fid2dentry(parent, fid.id, fid.generation);
-}
-
-static struct file *llog_filp_open(char *name, int flags, int mode)
-{
-        char *logname;
-        struct file *filp;
-        int len;
-
-        OBD_ALLOC(logname, PATH_MAX);
-        if (logname == NULL)
-                return ERR_PTR(-ENOMEM); 
-
-        len = snprintf(logname, PATH_MAX, "%s/%s", 
-                       MOUNT_CONFIGS_DIR, name);
-
-        if (len >= PATH_MAX - 1) {
-                filp = ERR_PTR(-ENAMETOOLONG);
-        } else {
-                CERROR("logname = %s\n", logname);
-                filp = l_filp_open(logname, flags, mode);
-                if (IS_ERR(filp))
-                        CERROR("logfile creation %s: %ld\n", logname,
-                               PTR_ERR(filp));
-        }
-
-        OBD_FREE(logname, PATH_MAX);
-        return filp;
-}
-
-/* This is a callback from the llog_* functions.
- * Assumes caller has already pushed us into the kernel context. */
-static int mgs_llog_lvfs_create(struct llog_ctxt *ctxt,
-                                struct llog_handle **res,
-                                struct llog_logid *logid, char *name)
-{
-        struct llog_handle *handle;
-        struct obd_device *obd;
-        struct l_dentry *dchild = NULL;
-        int rc = 0, cleanup_phase = 1;
-        int open_flags = O_RDWR | O_CREAT | O_LARGEFILE;
-        ENTRY;
-
-        handle = llog_alloc_handle();
-        if (handle == NULL)
-                RETURN(-ENOMEM);
-        *res = handle;
-
-        LASSERT(ctxt);
-        LASSERT(ctxt->loc_exp);
-        obd = ctxt->loc_exp->exp_obd;
-
-        if (logid != NULL) {
-                struct mgs_open_llog *mol = find_mgs_open_llog(obd, name);
-                if (!mol) {
-                        CERROR("can not find mgs_open_llog: %s\n", name);
-                        GOTO(cleanup, -EINVAL);
-                }
-
-                dchild = mgs_logid2dentry(obd, mol->mol_dentry, logid);
-
-                if (IS_ERR(dchild)) {
-                        rc = PTR_ERR(dchild);
-                        CERROR("error looking up logfile "LPX64":0x%x: rc %d\n",
-                               logid->lgl_oid, logid->lgl_ogen, rc);
-                        GOTO(cleanup, rc);
-                }
-
-                cleanup_phase = 2;
-                if (dchild->d_inode == NULL) {
-                        rc = -ENOENT;
-                        CERROR("nonexistent log file "LPX64":"LPX64": rc %d\n",
-                               logid->lgl_oid, logid->lgl_ogr, rc);
-                        GOTO(cleanup, rc);
-                }
-
-                handle->lgh_file = l_dentry_open(&obd->obd_lvfs_ctxt, dchild,
-                                                 O_RDWR | O_LARGEFILE);
-                if (IS_ERR(handle->lgh_file)) {
-                        rc = PTR_ERR(handle->lgh_file);
-                        CERROR("error opening logfile "LPX64"0x%x: rc %d\n",
-                               logid->lgl_oid, logid->lgl_ogen, rc);
-                        GOTO(cleanup, rc);
-                }
-
-                /* assign the value of lgh_id for handle directly */
-                handle->lgh_id = *logid;
-
-        } else if (name) {
-                handle->lgh_file = llog_filp_open(name, open_flags, 0644);
-
-                if (IS_ERR(handle->lgh_file))
-                        GOTO(cleanup, rc = PTR_ERR(handle->lgh_file));
-
-                handle->lgh_id.lgl_ogr = 1;
-                handle->lgh_id.lgl_oid =
-                        handle->lgh_file->f_dentry->d_inode->i_ino;
-                handle->lgh_id.lgl_ogen =
-                        handle->lgh_file->f_dentry->d_inode->i_generation;
-
-                rc = open_mgs_open_llog(obd, name);
-                if (rc) {
-                        CERROR("can not open mgs_open_llog (%s): rc %d\n",
-                                name, rc);
-                        GOTO(cleanup, rc);
-                }
-        } else {
-                CERROR("No llog id and llog name be specified.\n");
-                GOTO(cleanup, rc = -EINVAL);
-        }
-
-        handle->lgh_ctxt = ctxt;
-
-finish:
-        RETURN(rc);
-cleanup:
-        switch (cleanup_phase) {
-        case 2:
-                l_dput(dchild);
-        case 1:
-                llog_free_handle(handle);
-        }
-        goto finish;
-}
-
-
-static int mgs_llog_lvfs_destroy(struct llog_handle *handle)
-{
-        struct dentry *fdentry;
-        struct obdo *oa;
-        int rc;
-        ENTRY;
-
-        fdentry = handle->lgh_file->f_dentry;
-        if (strcmp(fdentry->d_parent->d_name.name, MOUNT_CONFIGS_DIR) == 0) {
-                /* CONFIGS files aren't really "lustre" objects - special case*/
-                struct obd_device *obd = handle->lgh_ctxt->loc_exp->exp_obd;
-                struct inode *inode = fdentry->d_parent->d_inode;
-                struct lvfs_run_ctxt saved;
-
-                push_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
-                dget(fdentry);
-                rc = mgs_llog_lvfs_close(handle);
-
-                if (rc == 0) {
-                        down(&inode->i_sem);
-                        rc = vfs_unlink(inode, fdentry);
-                        up(&inode->i_sem);
-                }
-
-                dput(fdentry);
-                pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
-                RETURN(rc);
-        }
-
-        oa = obdo_alloc();
-        if (oa == NULL)
-                RETURN(-ENOMEM);
-
-        oa->o_id = handle->lgh_id.lgl_oid;
-        oa->o_gr = handle->lgh_id.lgl_ogr;
-        oa->o_generation = handle->lgh_id.lgl_ogen;
-        oa->o_valid = OBD_MD_FLID | OBD_MD_FLGROUP | OBD_MD_FLGENER;
-
-        rc = mgs_llog_lvfs_close(handle);
-        if (rc)
-                GOTO(out, rc);
-
-        rc = obd_destroy(handle->lgh_ctxt->loc_exp, oa, NULL, NULL);
- out:
-        obdo_free(oa);
-        RETURN(rc);
-}
-
-/* reads the catalog list */
-int llog_get_cat_list(struct obd_device *obd, struct obd_device *disk_obd,
-                      char *name, int count, struct llog_catid *idarray)
-{
-        struct lvfs_run_ctxt saved;
-        struct l_file *file;
-        int rc;
-        int size = sizeof(*idarray) * count;
-        loff_t off = 0;
-
-        if (!count) {
-                CERROR("Empty catalog?\n");
-                RETURN(0);
-        }
-
-        push_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
-        file = filp_open(name, O_RDWR | O_CREAT | O_LARGEFILE, 0700);
-        if (!file || IS_ERR(file)) {
-                rc = PTR_ERR(file);
-                CERROR("OBD filter: cannot open/create %s: rc = %d\n",
-                       name, rc);
-                GOTO(out, rc);
-        }
-
-        if (!S_ISREG(file->f_dentry->d_inode->i_mode)) {
-                CERROR("%s is not a regular file!: mode = %o\n", name,
-                       file->f_dentry->d_inode->i_mode);
-                GOTO(out, rc = -ENOENT);
-        }
-
-        rc = fsfilt_read_record(disk_obd, file, idarray, size, &off);
-        if (rc) {
-                CDEBUG(D_INODE,"OBD filter: error reading %s: rc %d\n",
-                       name, rc);
-                GOTO(out, rc);
-        }
-
- out:
-        pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
-        if (file && !IS_ERR(file))
-                rc = filp_close(file, 0);
-        RETURN(rc);
-}
-EXPORT_SYMBOL(llog_get_cat_list);
-
-/* writes the cat list */
-int llog_put_cat_list(struct obd_device *obd, struct obd_device *disk_obd,
-                      char *name, int count, struct llog_catid *idarray)
-{
-        struct lvfs_run_ctxt saved;
-        struct l_file *file;
-        int rc;
-        int size = sizeof(*idarray) * count;
-        loff_t off = 0;
-
-        if (!count) {
-                CERROR("Empty catalog?\n");
-                RETURN(0);
-        }
-        
-        push_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
-        file = filp_open(name, O_RDWR | O_CREAT | O_LARGEFILE, 0700);
-        if (!file || IS_ERR(file)) {
-                rc = PTR_ERR(file);
-                CERROR("OBD filter: cannot open/create %s: rc = %d\n",
-                       name, rc);
-                GOTO(out, rc);
-        }
-
-        if (!S_ISREG(file->f_dentry->d_inode->i_mode)) {
-                CERROR("%s is not a regular file!: mode = %o\n", name,
-                       file->f_dentry->d_inode->i_mode);
-                GOTO(out, rc = -ENOENT);
-        }
-
-        rc = fsfilt_write_record(disk_obd, file, idarray, size, &off, 1);
-        if (rc) {
-                CDEBUG(D_INODE,"OBD filter: error reading %s: rc %d\n",
-                       name, rc);
-                GOTO(out, rc);
-        }
-
- out:
-        pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
-        if (file && !IS_ERR(file))
-                rc = filp_close(file, 0);
-        RETURN(rc);
-}
-
-struct llog_operations mgs_llog_lvfs_ops = {
-        lop_create:      mgs_llog_lvfs_create,
-        lop_read_header: mgs_llog_lvfs_read_header,
-        lop_write_rec:   llog_lvfs_write_rec,
-        lop_next_block:  llog_lvfs_next_block,
-        lop_destroy:     llog_lvfs_destroy,
-        lop_close:       llog_lvfs_close,
-        //        lop_cancel: llog_lvfs_cancel,
-};
-
-EXPORT_SYMBOL(mgs_llog_lvfs_ops);
-
-#else /* !__KERNEL__ */
-
-static int mgs_llog_lvfs_read_header(struct llog_handle *handle)
-{
-        LBUG();
-        return 0;
-}
-
-static int mgs_llog_lvfs_write_rec(struct llog_handle *loghandle,
-                                   struct llog_rec_hdr *rec,
-                                   struct llog_cookie *reccookie, int cookiecount,
-                                   void *buf, int idx)
-{
-        LBUG();
-        return 0;
-}
-
-static int mgs_llog_lvfs_next_block(struct llog_handle *loghandle, int *cur_idx,
-                                int next_idx, __u64 *cur_offset, void *buf,
-                                int len)
-{
-        LBUG();
-        return 0;
-}
-
-static int mgs_llog_lvfs_create(struct llog_ctxt *ctxt, struct llog_handle **res,
-                            struct llog_logid *logid, char *fsname, char *name)
-{
-        LBUG();
-        return 0;
-}
-
-static int mgs_llog_lvfs_close(struct llog_handle *handle)
-{
-        LBUG();
-        return 0;
-}
-
-static int mgs_llog_lvfs_destroy(struct llog_handle *handle)
-{
-        LBUG();
-        return 0;
-}
-
-int mgs_llog_get_cat_list(struct obd_device *obd, struct obd_device *disk_obd,
-                      char *name, int count, struct llog_catid *idarray)
-{
-        LBUG();
-        return 0;
-}
-
-int mgs_llog_put_cat_list(struct obd_device *obd, struct obd_device *disk_obd,
-                      char *name, int count, struct llog_catid *idarray)
-{
-        LBUG();
-        return 0;
-}
-
-struct llog_operations mgs_llog_lvfs_ops = {
-        lop_write_rec:   llog_lvfs_ops.lop_write_rec,
-        lop_next_block:  llog_lvfs_ops.lop_next_block,
-        lop_read_header: llog_lvfs_ops.lop_read_header,
-        lop_create:      mgs_llog_lvfs_create,
-        lop_destroy:     mgs_llog_lvfs_destroy,
-        lop_close:       mgs_llog_lvfs_close,
-//        lop_cancel:      mgs_llog_lvfs_cancel,
-};
-#endif
index 0196321..a2e7dbb 100644 (file)
@@ -91,6 +91,7 @@ int ptlrpc_init_import(struct obd_import *imp)
 
         return 0;
 }
+EXPORT_SYMBOL(ptlrpc_init_import);
 
 #define UUID_STR "_UUID"
 static void deuuidify(char *uuid, const char *prefix, char **uuid_start, int *uuid_len)
@@ -392,6 +393,7 @@ out:
 
         RETURN(rc);
 }
+EXPORT_SYMBOL(ptlrpc_connect_import);
 
 static void ptlrpc_maybe_ping_import_soon(struct obd_import *imp)
 {