X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=libcfs%2Flibcfs%2Ffail.c;h=13d31ab16fdf42b7e2b9f5f663ba16497324656d;hp=12addb20803f34b88e76cbc4ba0a28c9b6aad7a0;hb=743b85a32e24cff0c77dff739691043970a0901e;hpb=eb4f04e89fecbf6525f00288dbf26487f47103ba;ds=sidebyside diff --git a/libcfs/libcfs/fail.c b/libcfs/libcfs/fail.c index 12addb2..13d31ab 100644 --- a/libcfs/libcfs/fail.c +++ b/libcfs/libcfs/fail.c @@ -121,16 +121,23 @@ EXPORT_SYMBOL(__cfs_fail_check_set); int __cfs_fail_timeout_set(__u32 id, __u32 value, int ms, int set) { + ktime_t till = ktime_add_ms(ktime_get(), ms); int ret = 0; ret = __cfs_fail_check_set(id, value, set); if (ret && likely(ms > 0)) { - CERROR("cfs_fail_timeout id %x sleeping for %dms\n", - id, ms); - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(cfs_time_seconds(ms) / 1000); - set_current_state(TASK_RUNNING); - CERROR("cfs_fail_timeout id %x awake\n", id); + CERROR("cfs_fail_timeout id %x sleeping for %dms\n", id, ms); + while (ktime_before(ktime_get(), till)) { + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(msecs_to_jiffies(1000) / 10); + set_current_state(TASK_RUNNING); + if (!cfs_fail_loc) { + CERROR("cfs_fail_timeout interrupted\n"); + break; + } + } + if (cfs_fail_loc) + CERROR("cfs_fail_timeout id %x awake\n", id); } return ret; }