From: Haomai Wang Date: Thu, 19 Mar 2015 06:56:23 +0000 (+0800) Subject: Thread.cc: Make set_affinity private and correct behavior X-Git-Tag: v9.0.0~137^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b0c30f6743c00ac98a890899339b22ef3d62d269;p=ceph.git Thread.cc: Make set_affinity private and correct behavior Signed-off-by: Haomai Wang --- diff --git a/src/common/Thread.cc b/src/common/Thread.cc index 188d94a789b..07e12499be6 100644 --- a/src/common/Thread.cc +++ b/src/common/Thread.cc @@ -31,6 +31,23 @@ #include #endif +static int _set_affinity(int id) +{ +#ifdef HAVE_SCHED + if (id >= 0 && id < CPU_SETSIZE) { + cpu_set_t cpuset; + CPU_ZERO(&cpuset); + + CPU_SET(id, &cpuset); + + if (sched_setaffinity(0, sizeof(cpuset), &cpuset) < 0) + return -errno; + /* guaranteed to take effect immediately */ + sched_yield(); + } +#endif + return 0; +} Thread::Thread() : thread_id(0), @@ -63,7 +80,7 @@ void *Thread::entry_wrapper() IOPRIO_PRIO_VALUE(ioprio_class, ioprio_priority)); } if (pid && cpuid >= 0) - set_affinity(cpuid); + _set_affinity(cpuid); return entry(); } @@ -168,19 +185,8 @@ int Thread::set_ioprio(int cls, int prio) int Thread::set_affinity(int id) { -#ifdef HAVE_SCHED - if (pid && id >= 0 && id < CPU_SETSIZE) { - cpu_set_t cpuset; - CPU_ZERO(&cpuset); - - CPU_SET(id, &cpuset); - - if (sched_setaffinity(0, sizeof(cpuset), &cpuset) < 0) - return -errno; - /* guaranteed to take effect immediately */ - sched_yield(); - } -#endif cpuid = id; + if (pid && ceph_gettid() == pid) + _set_affinity(id); return 0; }