X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Flvfs%2Flvfs_lib.c;h=9660b9099ea55d62d6412f3d32366eb560f72f6b;hb=3bfe9e76c7f2ea74af97ef60d3b293f6068b0fdc;hp=6c6c6e006068c44e01313b55add9eaa022aee88b;hpb=6e3ec5812ebd1b5ecf7cae584f429b013ffe7431;p=fs%2Flustre-release.git diff --git a/lustre/lvfs/lvfs_lib.c b/lustre/lvfs/lvfs_lib.c index 6c6c6e0..9660b90 100644 --- a/lustre/lvfs/lvfs_lib.c +++ b/lustre/lvfs/lvfs_lib.c @@ -26,7 +26,7 @@ * 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. */ /* @@ -41,22 +41,19 @@ */ #ifdef __KERNEL__ #include -#include #else #include #endif #include #include -unsigned int obd_fail_val = 0; -unsigned long obd_fail_loc = 0; unsigned int obd_alloc_fail_rate = 0; int obd_alloc_fail(const void *ptr, const char *name, const char *type, size_t size, const char *file, int line) { if (ptr == NULL || - (ll_rand() & OBD_ALLOC_FAIL_MASK) < obd_alloc_fail_rate) { + (cfs_rand() & OBD_ALLOC_FAIL_MASK) < obd_alloc_fail_rate) { CERROR("%s%salloc of %s ("LPU64" bytes) failed at %s:%d\n", ptr ? "force " :"", type, name, (__u64)size, file, line); @@ -73,91 +70,6 @@ int obd_alloc_fail(const void *ptr, const char *name, const char *type, } EXPORT_SYMBOL(obd_alloc_fail); -int __obd_fail_check_set(__u32 id, __u32 value, int set) -{ - static cfs_atomic_t obd_fail_count = CFS_ATOMIC_INIT(0); - - LASSERT(!(id & OBD_FAIL_ONCE)); - - if ((obd_fail_loc & (OBD_FAILED | OBD_FAIL_ONCE)) == - (OBD_FAILED | OBD_FAIL_ONCE)) { - cfs_atomic_set(&obd_fail_count, 0); /* paranoia */ - return 0; - } - - /* Fail 1/obd_fail_val times */ - if (obd_fail_loc & OBD_FAIL_RAND) { - if (obd_fail_val < 2 || ll_rand() % obd_fail_val > 0) - return 0; - } - - /* Skip the first obd_fail_val, then fail */ - if (obd_fail_loc & OBD_FAIL_SKIP) { - if (cfs_atomic_inc_return(&obd_fail_count) <= obd_fail_val) - return 0; - } - - /* Fail obd_fail_val times, overridden by FAIL_ONCE */ - if (obd_fail_loc & OBD_FAIL_SOME && - (!(obd_fail_loc & OBD_FAIL_ONCE) || obd_fail_val <= 1)) { - int count = cfs_atomic_inc_return(&obd_fail_count); - - if (count >= obd_fail_val) { - cfs_set_bit(OBD_FAIL_ONCE_BIT, &obd_fail_loc); - cfs_atomic_set(&obd_fail_count, 0); - /* we are lost race to increase obd_fail_count */ - if (count > obd_fail_val) - return 0; - } - } - - if ((set == OBD_FAIL_LOC_ORSET || set == OBD_FAIL_LOC_RESET) && - (value & OBD_FAIL_ONCE)) - cfs_set_bit(OBD_FAIL_ONCE_BIT, &obd_fail_loc); - - /* Lost race to set OBD_FAILED_BIT. */ - if (cfs_test_and_set_bit(OBD_FAILED_BIT, &obd_fail_loc)) { - /* If OBD_FAIL_ONCE is valid, only one process can fail, - * otherwise multi-process can fail at the same time. */ - if (obd_fail_loc & OBD_FAIL_ONCE) - return 0; - } - - switch (set) { - case OBD_FAIL_LOC_NOSET: - break; - case OBD_FAIL_LOC_ORSET: - obd_fail_loc |= value & ~(OBD_FAILED | OBD_FAIL_ONCE); - break; - case OBD_FAIL_LOC_RESET: - obd_fail_loc = value; - break; - default: - LASSERTF(0, "called with bad set %u\n", set); - break; - } - - return 1; -} -EXPORT_SYMBOL(__obd_fail_check_set); - -int __obd_fail_timeout_set(__u32 id, __u32 value, int ms, int set) -{ - int ret = 0; - - ret = __obd_fail_check_set(id, value, set); - if (ret) { - CERROR("obd_fail_timeout id %x sleeping for %dms\n", - id, ms); - cfs_schedule_timeout_and_set_state(CFS_TASK_UNINT, - cfs_time_seconds(ms) / 1000); - cfs_set_current_state(CFS_TASK_RUNNING); - CERROR("obd_fail_timeout id %x awake\n", id); - } - return ret; -} -EXPORT_SYMBOL(__obd_fail_timeout_set); - #ifdef LPROCFS void lprocfs_counter_add(struct lprocfs_stats *stats, int idx, long amount) @@ -173,7 +85,8 @@ void lprocfs_counter_add(struct lprocfs_stats *stats, int idx, smp_id = lprocfs_stats_lock(stats, LPROCFS_GET_SMP_ID); percpu_cntr = &(stats->ls_percpu[smp_id]->lp_cntr[idx]); - cfs_atomic_inc(&percpu_cntr->lc_cntl.la_entry); + if (!(stats->ls_flags & LPROCFS_STATS_FLAG_NOPERCPU)) + cfs_atomic_inc(&percpu_cntr->lc_cntl.la_entry); percpu_cntr->lc_count++; if (percpu_cntr->lc_config & LPROCFS_CNTR_AVGMINMAX) { @@ -188,8 +101,9 @@ void lprocfs_counter_add(struct lprocfs_stats *stats, int idx, if (amount > percpu_cntr->lc_max) percpu_cntr->lc_max = amount; } - cfs_atomic_inc(&percpu_cntr->lc_cntl.la_exit); - lprocfs_stats_unlock(stats); + if (!(stats->ls_flags & LPROCFS_STATS_FLAG_NOPERCPU)) + cfs_atomic_inc(&percpu_cntr->lc_cntl.la_exit); + lprocfs_stats_unlock(stats, LPROCFS_GET_SMP_ID); } EXPORT_SYMBOL(lprocfs_counter_add); @@ -207,7 +121,8 @@ void lprocfs_counter_sub(struct lprocfs_stats *stats, int idx, smp_id = lprocfs_stats_lock(stats, LPROCFS_GET_SMP_ID); percpu_cntr = &(stats->ls_percpu[smp_id]->lp_cntr[idx]); - cfs_atomic_inc(&percpu_cntr->lc_cntl.la_entry); + if (!(stats->ls_flags & LPROCFS_STATS_FLAG_NOPERCPU)) + cfs_atomic_inc(&percpu_cntr->lc_cntl.la_entry); if (percpu_cntr->lc_config & LPROCFS_CNTR_AVGMINMAX) { /* * currently lprocfs_count_add() can only be called in thread @@ -222,12 +137,11 @@ void lprocfs_counter_sub(struct lprocfs_stats *stats, int idx, else percpu_cntr->lc_sum -= amount; } - cfs_atomic_inc(&percpu_cntr->lc_cntl.la_exit); - lprocfs_stats_unlock(stats); + if (!(stats->ls_flags & LPROCFS_STATS_FLAG_NOPERCPU)) + cfs_atomic_inc(&percpu_cntr->lc_cntl.la_exit); + lprocfs_stats_unlock(stats, LPROCFS_GET_SMP_ID); } EXPORT_SYMBOL(lprocfs_counter_sub); #endif /* LPROCFS */ -EXPORT_SYMBOL(obd_fail_loc); EXPORT_SYMBOL(obd_alloc_fail_rate); -EXPORT_SYMBOL(obd_fail_val);