X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ffld%2Ffld_request.c;h=2e18b08ab5886a7b707fbd7a4ca7b7d14bcc89f9;hb=6eb1a3ae7c2104711559ca4359e98cb3ac699fc8;hp=7fd924684e20bd70e6c285224f54963c0b3afbfd;hpb=c43b429c653490b815d9039b19a8bcece380afc5;p=fs%2Flustre-release.git diff --git a/lustre/fld/fld_request.c b/lustre/fld/fld_request.c index 7fd9246..2e18b08 100644 --- a/lustre/fld/fld_request.c +++ b/lustre/fld/fld_request.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. @@ -26,8 +24,10 @@ * GPL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved + * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. + * + * Copyright (c) 2011, Whamcloud, Inc. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -40,9 +40,6 @@ * Author: Yury Umanets */ -#ifndef EXPORT_SYMTAB -# define EXPORT_SYMTAB -#endif #define DEBUG_SUBSYSTEM S_FLD #ifdef __KERNEL__ @@ -74,9 +71,9 @@ static int fld_req_avail(struct client_obd *cli, struct mdc_cache_waiter *mcw) { int rc; ENTRY; - spin_lock(&cli->cl_loi_list_lock); - rc = list_empty(&mcw->mcw_entry); - spin_unlock(&cli->cl_loi_list_lock); + client_obd_list_lock(&cli->cl_loi_list_lock); + rc = cfs_list_empty(&mcw->mcw_entry); + client_obd_list_unlock(&cli->cl_loi_list_lock); RETURN(rc); }; @@ -85,38 +82,38 @@ static void fld_enter_request(struct client_obd *cli) struct mdc_cache_waiter mcw; struct l_wait_info lwi = { 0 }; - spin_lock(&cli->cl_loi_list_lock); + client_obd_list_lock(&cli->cl_loi_list_lock); if (cli->cl_r_in_flight >= cli->cl_max_rpcs_in_flight) { - list_add_tail(&mcw.mcw_entry, &cli->cl_cache_waiters); + cfs_list_add_tail(&mcw.mcw_entry, &cli->cl_cache_waiters); cfs_waitq_init(&mcw.mcw_waitq); - spin_unlock(&cli->cl_loi_list_lock); + client_obd_list_unlock(&cli->cl_loi_list_lock); l_wait_event(mcw.mcw_waitq, fld_req_avail(cli, &mcw), &lwi); } else { cli->cl_r_in_flight++; - spin_unlock(&cli->cl_loi_list_lock); + client_obd_list_unlock(&cli->cl_loi_list_lock); } } static void fld_exit_request(struct client_obd *cli) { - struct list_head *l, *tmp; + cfs_list_t *l, *tmp; struct mdc_cache_waiter *mcw; - spin_lock(&cli->cl_loi_list_lock); + client_obd_list_lock(&cli->cl_loi_list_lock); cli->cl_r_in_flight--; - list_for_each_safe(l, tmp, &cli->cl_cache_waiters) { + cfs_list_for_each_safe(l, tmp, &cli->cl_cache_waiters) { if (cli->cl_r_in_flight >= cli->cl_max_rpcs_in_flight) { /* No free request slots anymore */ break; } - mcw = list_entry(l, struct mdc_cache_waiter, mcw_entry); - list_del_init(&mcw->mcw_entry); + mcw = cfs_list_entry(l, struct mdc_cache_waiter, mcw_entry); + cfs_list_del_init(&mcw->mcw_entry); cli->cl_r_in_flight++; cfs_waitq_signal(&mcw->mcw_waitq); } - spin_unlock(&cli->cl_loi_list_lock); + client_obd_list_unlock(&cli->cl_loi_list_lock); } static int fld_rrb_hash(struct lu_client_fld *fld, @@ -135,7 +132,7 @@ fld_rrb_scan(struct lu_client_fld *fld, seqno_t seq) hash = fld_rrb_hash(fld, seq); - list_for_each_entry(target, &fld->lcf_targets, ft_chain) { + cfs_list_for_each_entry(target, &fld->lcf_targets, ft_chain) { if (target->ft_idx == hash) RETURN(target); } @@ -144,7 +141,7 @@ fld_rrb_scan(struct lu_client_fld *fld, seqno_t seq) "Targets (%d):\n", fld->lcf_name, hash, seq, fld->lcf_count); - list_for_each_entry(target, &fld->lcf_targets, ft_chain) { + cfs_list_for_each_entry(target, &fld->lcf_targets, ft_chain) { const char *srv_name = target->ft_srv != NULL ? target->ft_srv->lsf_name : ""; const char *exp_name = target->ft_exp != NULL ? @@ -184,9 +181,9 @@ fld_client_get_target(struct lu_client_fld *fld, LASSERT(fld->lcf_hash != NULL); - spin_lock(&fld->lcf_lock); + cfs_spin_lock(&fld->lcf_lock); target = fld->lcf_hash->fh_scan_func(fld, seq); - spin_unlock(&fld->lcf_lock); + cfs_spin_unlock(&fld->lcf_lock); if (target != NULL) { CDEBUG(D_INFO, "%s: Found target (idx "LPU64 @@ -226,10 +223,10 @@ int fld_client_add_target(struct lu_client_fld *fld, if (target == NULL) RETURN(-ENOMEM); - spin_lock(&fld->lcf_lock); - list_for_each_entry(tmp, &fld->lcf_targets, ft_chain) { + cfs_spin_lock(&fld->lcf_lock); + cfs_list_for_each_entry(tmp, &fld->lcf_targets, ft_chain) { if (tmp->ft_idx == tar->ft_idx) { - spin_unlock(&fld->lcf_lock); + cfs_spin_unlock(&fld->lcf_lock); OBD_FREE_PTR(target); CERROR("Target %s exists in FLD and known as %s:#"LPU64"\n", name, fld_target_name(tmp), tmp->ft_idx); @@ -243,11 +240,11 @@ int fld_client_add_target(struct lu_client_fld *fld, target->ft_srv = tar->ft_srv; target->ft_idx = tar->ft_idx; - list_add_tail(&target->ft_chain, - &fld->lcf_targets); + cfs_list_add_tail(&target->ft_chain, + &fld->lcf_targets); fld->lcf_count++; - spin_unlock(&fld->lcf_lock); + cfs_spin_unlock(&fld->lcf_lock); RETURN(0); } @@ -260,13 +257,13 @@ int fld_client_del_target(struct lu_client_fld *fld, struct lu_fld_target *target, *tmp; ENTRY; - spin_lock(&fld->lcf_lock); - list_for_each_entry_safe(target, tmp, - &fld->lcf_targets, ft_chain) { + cfs_spin_lock(&fld->lcf_lock); + cfs_list_for_each_entry_safe(target, tmp, + &fld->lcf_targets, ft_chain) { if (target->ft_idx == idx) { fld->lcf_count--; - list_del(&target->ft_chain); - spin_unlock(&fld->lcf_lock); + cfs_list_del(&target->ft_chain); + cfs_spin_unlock(&fld->lcf_lock); if (target->ft_exp != NULL) class_export_put(target->ft_exp); @@ -275,13 +272,11 @@ int fld_client_del_target(struct lu_client_fld *fld, RETURN(0); } } - spin_unlock(&fld->lcf_lock); + cfs_spin_unlock(&fld->lcf_lock); RETURN(-ENOENT); } EXPORT_SYMBOL(fld_client_del_target); -static void fld_client_proc_fini(struct lu_client_fld *fld); - #ifdef LPROCFS static int fld_client_proc_init(struct lu_client_fld *fld) { @@ -314,7 +309,7 @@ out_cleanup: return rc; } -static void fld_client_proc_fini(struct lu_client_fld *fld) +void fld_client_proc_fini(struct lu_client_fld *fld) { ENTRY; if (fld->lcf_proc_dir) { @@ -330,12 +325,14 @@ static int fld_client_proc_init(struct lu_client_fld *fld) return 0; } -static void fld_client_proc_fini(struct lu_client_fld *fld) +void fld_client_proc_fini(struct lu_client_fld *fld) { return; } #endif +EXPORT_SYMBOL(fld_client_proc_fini); + static inline int hash_is_sane(int hash) { return (hash >= 0 && hash < ARRAY_SIZE(fld_hash)); @@ -360,7 +357,7 @@ int fld_client_init(struct lu_client_fld *fld, } fld->lcf_count = 0; - spin_lock_init(&fld->lcf_lock); + cfs_spin_lock_init(&fld->lcf_lock); fld->lcf_hash = &fld_hash[hash]; fld->lcf_flags = LUSTRE_FLD_INIT; CFS_INIT_LIST_HEAD(&fld->lcf_targets); @@ -398,18 +395,16 @@ void fld_client_fini(struct lu_client_fld *fld) struct lu_fld_target *target, *tmp; ENTRY; - fld_client_proc_fini(fld); - - spin_lock(&fld->lcf_lock); - list_for_each_entry_safe(target, tmp, - &fld->lcf_targets, ft_chain) { + cfs_spin_lock(&fld->lcf_lock); + cfs_list_for_each_entry_safe(target, tmp, + &fld->lcf_targets, ft_chain) { fld->lcf_count--; - list_del(&target->ft_chain); + cfs_list_del(&target->ft_chain); if (target->ft_exp != NULL) class_export_put(target->ft_exp); OBD_FREE_PTR(target); } - spin_unlock(&fld->lcf_lock); + cfs_spin_unlock(&fld->lcf_lock); if (fld->lcf_cache != NULL) { if (!IS_ERR(fld->lcf_cache)) @@ -467,9 +462,8 @@ out_req: return rc; } -int fld_client_lookup(struct lu_client_fld *fld, - seqno_t seq, mdsno_t *mds, - const struct lu_env *env) +int fld_client_lookup(struct lu_client_fld *fld, seqno_t seq, mdsno_t *mds, + __u32 flags, const struct lu_env *env) { struct lu_seq_range res; struct lu_fld_target *target; @@ -480,7 +474,7 @@ int fld_client_lookup(struct lu_client_fld *fld, rc = fld_cache_lookup(fld->lcf_cache, seq, &res); if (rc == 0) { - *mds = res.lsr_mdt; + *mds = res.lsr_index; RETURN(0); } @@ -493,6 +487,7 @@ int fld_client_lookup(struct lu_client_fld *fld, fld_target_name(target), target->ft_idx); res.lsr_start = seq; + res.lsr_flags = flags; #ifdef __KERNEL__ if (target->ft_srv != NULL) { LASSERT(env != NULL); @@ -507,7 +502,7 @@ int fld_client_lookup(struct lu_client_fld *fld, #endif if (rc == 0) { - *mds = res.lsr_mdt; + *mds = res.lsr_index; fld_cache_insert(fld->lcf_cache, &res); }