From e09182948a5953c211eaf6812c6a307d2daed750 Mon Sep 17 00:00:00 2001 From: lincent Date: Wed, 9 Nov 2005 08:08:10 +0000 Subject: [PATCH] delete the mgs_open_llog, use the disk llog instead --- lustre/include/linux/lustre_mgs.h | 2 +- lustre/mgs/Makefile.in | 2 +- lustre/mgs/mgs_handler.c | 10 +- lustre/mgs/mgs_llog.c | 523 +------------------------------------- lustre/ptlrpc/import.c | 2 + 5 files changed, 11 insertions(+), 528 deletions(-) diff --git a/lustre/include/linux/lustre_mgs.h b/lustre/include/linux/lustre_mgs.h index f4d85ce..c16697f 100644 --- a/lustre/include/linux/lustre_mgs.h +++ b/lustre/include/linux/lustre_mgs.h @@ -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]; }; diff --git a/lustre/mgs/Makefile.in b/lustre/mgs/Makefile.in index f340f73..8bb6a5f 100644 --- a/lustre/mgs/Makefile.in +++ b/lustre/mgs/Makefile.in @@ -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@ diff --git a/lustre/mgs/mgs_handler.c b/lustre/mgs/mgs_handler.c index fa19e91..03a22bc 100644 --- a/lustre/mgs/mgs_handler.c +++ b/lustre/mgs/mgs_handler.c @@ -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, diff --git a/lustre/mgs/mgs_llog.c b/lustre/mgs/mgs_llog.c index c40829d..6eaef93 100644 --- a/lustre/mgs/mgs_llog.c +++ b/lustre/mgs/mgs_llog.c @@ -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 diff --git a/lustre/ptlrpc/import.c b/lustre/ptlrpc/import.c index 0196321..a2e7dbb 100644 --- a/lustre/ptlrpc/import.c +++ b/lustre/ptlrpc/import.c @@ -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) { -- 1.8.3.1