X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ffld%2Ffld_handler.c;h=9f3f1efe91ee29f85d095dacfac189707918a13e;hb=9a9d09e8f7fbf1d03a8a02dd14b549ad2cd4be88;hp=489bd2ca071d6288aeeaf5c3b3be78cec85fee3d;hpb=06a67987e06f7fa9c0bfde549d54e2bed0a78ade;p=fs%2Flustre-release.git diff --git a/lustre/fld/fld_handler.c b/lustre/fld/fld_handler.c index 489bd2c..9f3f1ef 100644 --- a/lustre/fld/fld_handler.c +++ b/lustre/fld/fld_handler.c @@ -1,6 +1,4 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * GPL HEADER START * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -28,6 +26,8 @@ /* * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2011, 2012, Whamcloud, Inc. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -42,9 +42,6 @@ * Author: Pravin Shelar */ -#ifndef EXPORT_SYMTAB -# define EXPORT_SYMTAB -#endif #define DEBUG_SUBSYSTEM S_FLD #ifdef __KERNEL__ @@ -111,6 +108,30 @@ static void __exit fld_mod_exit(void) } } +int fld_declare_server_create(struct lu_server_fld *fld, + const struct lu_env *env, + struct thandle *th) +{ + struct dt_object *dt_obj = fld->lsf_obj; + int rc; + + ENTRY; + + /* for ldiskfs OSD it's enough to declare operation with any ops + * with DMU we'll probably need to specify exact key/value */ + rc = dt_obj->do_index_ops->dio_declare_delete(env, dt_obj, NULL, th); + if (rc) + GOTO(out, rc); + rc = dt_obj->do_index_ops->dio_declare_delete(env, dt_obj, NULL, th); + if (rc) + GOTO(out, rc); + rc = dt_obj->do_index_ops->dio_declare_insert(env, dt_obj, + NULL, NULL, th); +out: + RETURN(rc); +} +EXPORT_SYMBOL(fld_declare_server_create); + /** * Insert FLD index entry and update FLD cache. * @@ -199,7 +220,7 @@ int fld_server_create(struct lu_server_fld *fld, */ LASSERTF(erange->lsr_start > new->lsr_start || erange->lsr_end < new->lsr_start || - (erange->lsr_end == new->lsr_end && + (erange->lsr_end == new->lsr_start && range_compare_loc(new, erange) != 0), "left "DRANGE", new "DRANGE"\n", PRANGE(erange), PRANGE(new)); @@ -245,7 +266,6 @@ out: RETURN(rc); } - EXPORT_SYMBOL(fld_server_create); /** @@ -342,15 +362,14 @@ static int fld_server_handle(struct lu_server_fld *fld, static int fld_req_handle(struct ptlrpc_request *req, struct fld_thread_info *info) { - struct lu_site *site; + struct obd_export *exp = req->rq_export; + struct lu_site *site = exp->exp_obd->obd_lu_dev->ld_site; struct lu_seq_range *in; struct lu_seq_range *out; int rc; __u32 *opc; ENTRY; - site = req->rq_export->exp_obd->obd_lu_dev->ld_site; - rc = req_capsule_server_pack(info->fti_pill); if (rc) RETURN(err_serious(rc)); @@ -365,6 +384,13 @@ static int fld_req_handle(struct ptlrpc_request *req, RETURN(err_serious(-EPROTO)); *out = *in; + /* For old 2.0 client, the 'lsr_flags' is uninitialized. + * Set it as 'LU_SEQ_RANGE_MDT' by default. + * Old 2.0 liblustre client cannot talk with new 2.1 server. */ + if (!(exp->exp_connect_flags & OBD_CONNECT_64BITHASH) && + !exp->exp_libclient) + out->lsr_flags = LU_SEQ_RANGE_MDT; + rc = fld_server_handle(lu_site2md(site)->ms_server_fld, req->rq_svc_thread->t_env, *opc, out, info); @@ -466,7 +492,14 @@ static int fld_server_proc_init(struct lu_server_fld *fld) RETURN(rc); } - RETURN(rc); + rc = lprocfs_seq_create(fld->lsf_proc_dir, "fldb", 0444, + &fld_proc_seq_fops, fld); + if (rc) { + lprocfs_remove(&fld->lsf_proc_dir); + fld->lsf_proc_dir = NULL; + } + + RETURN(rc); } static void fld_server_proc_fini(struct lu_server_fld *fld)