X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fobdclass%2Fllog_test.c;h=d03f0bd8d3e7b2179ad7a7fb5c3529aec28116cb;hb=313da5b87dbb6db3b8d75b039fc10474d42ee22f;hp=efb1228175919fcfc3e759570286b504da358d3e;hpb=0521288fde9ed5862c1a01b0a884e91b8ad9841f;p=fs%2Flustre-release.git diff --git a/lustre/obdclass/llog_test.c b/lustre/obdclass/llog_test.c index efb1228..d03f0bd 100644 --- a/lustre/obdclass/llog_test.c +++ b/lustre/obdclass/llog_test.c @@ -1,28 +1,41 @@ /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- * vim:expandtab:shiftwidth=8:tabstop=8: * - * Copyright (C) 2003 Cluster File Systems, Inc. - * Author: Phil Schwan + * GPL HEADER START * - * This file is part of the Lustre file system, http://www.lustre.org - * Lustre is a trademark of Cluster File Systems, Inc. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * You may have signed or agreed to another license before downloading - * this software. If so, you are bound by the terms and conditions - * of that agreement, and the following does not apply to you. See the - * LICENSE file included with this distribution for more information. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 only, + * as published by the Free Software Foundation. * - * If you did not agree to a different license, then this copy of Lustre - * is open source software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License version 2 for more details (a copy is included + * in the LICENSE file that accompanied this code). * - * In either case, Lustre is distributed in the hope that it will be - * useful, but WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * license text for more details. + * You should have received a copy of the GNU General Public License + * version 2 along with this program; If not, see + * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf * - * A kernel module which tests the llog API from the OBD setup function. + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + * + * GPL HEADER END + */ +/* + * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. + * Use is subject to license terms. + */ +/* + * This file is part of Lustre, http://www.lustre.org/ + * Lustre is a trademark of Sun Microsystems, Inc. + * + * lustre/obdclass/llog_test.c + * + * Author: Phil Schwan */ #ifndef EXPORT_SYMTAB @@ -118,10 +131,8 @@ static int llog_test_1(struct obd_device *obd, char *name) static int llog_test_2(struct obd_device *obd, char *name, struct llog_handle **llh) { - struct llog_handle *loghandle; - struct llog_logid logid; - int rc; struct llog_ctxt *ctxt = llog_get_context(obd, LLOG_TEST_ORIG_CTXT); + int rc; ENTRY; CWARN("2a: re-open a log with name: %s\n", name); @@ -134,7 +145,7 @@ static int llog_test_2(struct obd_device *obd, char *name, if ((rc = verify_handle("2", *llh, 1))) GOTO(out, rc); - +#if 0 CWARN("2b: create a log without specified NAME & LOGID\n"); rc = llog_create(ctxt, &loghandle, NULL, NULL); if (rc) { @@ -160,6 +171,7 @@ static int llog_test_2(struct obd_device *obd, char *name, GOTO(out, rc); } llog_free_handle(loghandle); +#endif out: llog_ctxt_put(ctxt); @@ -225,6 +237,41 @@ static int llog_test_3(struct obd_device *obd, struct llog_handle *llh) if ((rc = verify_handle("3c", llh, num_recs))) RETURN(rc); + CWARN("3d: write log more than BITMAP_SIZE, return -ENOSPC\n"); + for (i = 0; i < LLOG_BITMAP_SIZE(llh->lgh_hdr) + 1; i++) { + struct llog_rec_hdr hdr; + char buf_even[24]; + char buf_odd[32]; + + memset(buf_odd, 0, sizeof buf_odd); + memset(buf_even, 0, sizeof buf_even); + if ((i % 2) == 0) { + hdr.lrh_len = 24; + hdr.lrh_type = OBD_CFG_REC; + rc = llog_write_rec(llh, &hdr, NULL, 0, buf_even, -1); + } else { + hdr.lrh_len = 32; + hdr.lrh_type = OBD_CFG_REC; + rc = llog_write_rec(llh, &hdr, NULL, 0, buf_odd, -1); + } + if (rc) { + if (rc == -ENOSPC) { + break; + } else { + CERROR("3c: write recs failed at #%d: %d\n", + i + 1, rc); + RETURN(rc); + } + } + num_recs++; + } + if (rc != -ENOSPC) { + CWARN("3d: write record more than BITMAP size!\n"); + RETURN(-EINVAL); + } + if ((rc = verify_handle("3d", llh, num_recs))) + RETURN(rc); + RETURN(rc); } @@ -402,7 +449,7 @@ static int llog_test_5(struct obd_device *obd) } CWARN("5c: Cancel 40000 records, see one log zapped\n"); - rc = llog_cat_process(llh, llog_cancel_rec_cb, "foobar"); + rc = llog_cat_process(llh, llog_cancel_rec_cb, "foobar", 0, 0); if (rc != -4711) { CERROR("5c: process with cat_cancel_cb failed: %d\n", rc); GOTO(out, rc); @@ -424,7 +471,7 @@ static int llog_test_5(struct obd_device *obd) } CWARN("5e: print plain log entries.. expect 6\n"); - rc = llog_cat_process(llh, plain_print_cb, "foobar"); + rc = llog_cat_process(llh, plain_print_cb, "foobar", 0, 0); if (rc) { CERROR("5e: process with plain_print_cb failed: %d\n", rc); GOTO(out, rc); @@ -451,10 +498,9 @@ static int llog_test_5(struct obd_device *obd) /* Test client api; open log by name and process */ static int llog_test_6(struct obd_device *obd, char *name) { - struct obd_device *mdc_obd; + struct obd_device *mgc_obd; struct llog_ctxt *ctxt = llog_get_context(obd, LLOG_TEST_ORIG_CTXT); - struct obd_uuid *mds_uuid = &ctxt->loc_exp->exp_obd->obd_uuid; - struct lustre_handle exph = {0, }; + struct obd_uuid *mgs_uuid = &ctxt->loc_exp->exp_obd->obd_uuid; struct obd_export *exp; struct obd_uuid uuid = {"LLOG_TEST6_UUID"}; struct llog_handle *llh = NULL; @@ -462,22 +508,24 @@ static int llog_test_6(struct obd_device *obd, char *name) int rc; CWARN("6a: re-open log %s using client API\n", name); - mdc_obd = class_find_client_obd(mds_uuid, LUSTRE_MDC_NAME, NULL); - if (mdc_obd == NULL) { - CERROR("6: no MDC devices connected to %s found.\n", - mds_uuid->uuid); + mgc_obd = class_find_client_obd(mgs_uuid, LUSTRE_MGC_NAME, NULL); + if (mgc_obd == NULL) { + CERROR("6: no MGC devices connected to %s found.\n", + mgs_uuid->uuid); GOTO(ctxt_release, rc = -ENOENT); } - rc = obd_connect(NULL, &exph, mdc_obd, &uuid, + rc = obd_connect(NULL, &exp, mgc_obd, &uuid, NULL /* obd_connect_data */, NULL); - if (rc) { - CERROR("6: failed to connect to MDC: %s\n", mdc_obd->obd_name); - GOTO(ctxt_release, rc); + if (rc != -EALREADY) { + CERROR("6: connect on connected MDC (%s) failed to return" + " -EALREADY", mgc_obd->obd_name); + if (rc == 0) + obd_disconnect(exp); + GOTO(ctxt_release, rc = -EINVAL); } - exp = class_conn2export(&exph); - nctxt = llog_get_context(mdc_obd, LLOG_CONFIG_REPL_CTXT); + nctxt = llog_get_context(mgc_obd, LLOG_CONFIG_REPL_CTXT); rc = llog_create(nctxt, &llh, NULL, name); if (rc) { CERROR("6: llog_create failed %d\n", rc); @@ -505,7 +553,6 @@ parse_out: if (rc) { CERROR("6: llog_close failed: rc = %d\n", rc); } - rc = obd_disconnect(exp); ctxt_release: llog_ctxt_put(ctxt); RETURN(rc); @@ -609,14 +656,14 @@ static int llog_run_tests(struct obd_device *obd) } -static int llog_test_llog_init(struct obd_device *obd, int group, - struct obd_device *tgt, int count, - struct llog_catid *logid, struct obd_uuid *uuid) +static int llog_test_llog_init(struct obd_device *obd, + struct obd_llog_group *olg, + struct obd_device *tgt, int *index) { int rc; ENTRY; - rc = llog_setup(obd, &obd->obd_olg, LLOG_TEST_ORIG_CTXT, tgt, 0, NULL, + rc = llog_setup(obd, &obd->obd_olg, LLOG_TEST_ORIG_CTXT, tgt, 0, NULL, &llog_lvfs_ops); RETURN(rc); } @@ -667,6 +714,7 @@ static int llog_test_setup(struct obd_device *obd, struct lustre_cfg *lcfg) RETURN(-EINVAL); } + /* disk obd */ tgt = class_name2obd(lustre_cfg_string(lcfg, 1)); if (!tgt || !tgt->obd_attached || !tgt->obd_set_up) { CERROR("target device not attached or not set up (%s)\n", @@ -674,11 +722,11 @@ static int llog_test_setup(struct obd_device *obd, struct lustre_cfg *lcfg) RETURN(-EINVAL); } - rc = obd_llog_init(obd, OBD_LLOG_GROUP, tgt, 0, NULL, NULL); + rc = obd_llog_init(obd, NULL, tgt, NULL); if (rc) RETURN(rc); - llog_test_rand = ll_rand(); + llog_test_rand = cfs_rand(); rc = llog_run_tests(obd); if (rc) @@ -712,7 +760,7 @@ static void __exit llog_test_exit(void) class_unregister_type("llog_test"); } -MODULE_AUTHOR("Cluster File Systems, Inc. "); +MODULE_AUTHOR("Sun Microsystems, Inc. "); MODULE_DESCRIPTION("llog test module"); MODULE_LICENSE("GPL");