From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752703AbbJTMgV (ORCPT ); Tue, 20 Oct 2015 08:36:21 -0400 Received: from sci-ig2.spreadtrum.com ([222.66.158.135]:21323 "EHLO SHSQR01.spreadtrum.com" rhost-flags-OK-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1751665AbbJTMgR convert rfc822-to-8bit (ORCPT ); Tue, 20 Oct 2015 08:36:17 -0400 From: =?iso-2022-jp?B?SG9uZ2ppZSBGYW5nICgbJEJKfTk/Wz8bKEIp?= To: "ebiederm@xmission.com" , "gregkh@linuxfoundation.org" CC: "linux-kernel@vger.kernel.org" Subject: [PATCH 4.3-rc6] proc: fix oom_adj value read from /proc//oom_adj Thread-Topic: [PATCH 4.3-rc6] proc: fix oom_adj value read from /proc//oom_adj Thread-Index: AQHRCyn1f6PzUgKG7kWlnCJNeIR4Ug== Date: Tue, 20 Oct 2015 12:34:36 +0000 Message-ID: <65a10261038346b1a778443fd15f0980@SHMBX01.spreadtrum.com> Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.0.1.200] Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 8BIT MIME-Version: 1.0 X-MAIL: SHSQR01.spreadtrum.com t9KCYaYi028456 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The oom_adj's value reading through /proc//oom_adj is different with the value written into /proc//oom_adj. Fix this by adding a adjustment factor. Signed-off-by: Hongjie Fang --- diff --git a/fs/proc/base.c b/fs/proc/base.c index b25eee4..1ea0589 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c @@ -1043,6 +1043,7 @@ static ssize_t oom_adj_write(struct file *file, const char __user *buf, int oom_adj; unsigned long flags; int err; + int adjust; memset(buffer, 0, sizeof(buffer)); if (count > sizeof(buffer) - 1) @@ -1084,8 +1085,10 @@ static ssize_t oom_adj_write(struct file *file, const char __user *buf, */ if (oom_adj == OOM_ADJUST_MAX) oom_adj = OOM_SCORE_ADJ_MAX; - else - oom_adj = (oom_adj * OOM_SCORE_ADJ_MAX) / -OOM_DISABLE; + else{ + adjust = oom_adj > 0 ? (-OOM_DISABLE-1) : -(-OOM_DISABLE-1); + oom_adj = (oom_adj * OOM_SCORE_ADJ_MAX + adjust) / -OOM_DISABLE; + } if (oom_adj < task->signal->oom_score_adj && !capable(CAP_SYS_RESOURCE)) {