From patchwork Mon Mar 23 05:25:40 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tejun Heo X-Patchwork-Id: 6070591 Return-Path: X-Original-To: patchwork-linux-fsdevel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 14E4A9F2A9 for ; Mon, 23 Mar 2015 05:28:52 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 45A45201B9 for ; Mon, 23 Mar 2015 05:28:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 6B2782013A for ; Mon, 23 Mar 2015 05:28:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752496AbbCWF2f (ORCPT ); Mon, 23 Mar 2015 01:28:35 -0400 Received: from mail-qg0-f44.google.com ([209.85.192.44]:34237 "EHLO mail-qg0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752303AbbCWFZ6 (ORCPT ); Mon, 23 Mar 2015 01:25:58 -0400 Received: by qgep97 with SMTP id p97so5997035qge.1; Sun, 22 Mar 2015 22:25:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=XIE4FVe2H8S45swvNfExAqLvz37ujlD5XGkr2UOGOUA=; b=XZEvsMZ6VQceZwpUcqZw9RUUV7wG1ba4zO6yYXZKHgd1pTB1iYt4s8t5IRJEHLdI3h gbnwLHcr5pF/evdG1NGRn18zLosMVua29PUIU53OC5WzK+KsJ2p8P0Kq5+4vn+GL0U80 di/IAP0JxP+IzTsnWtL+sWQM8fOE8rwjlnKgJHxXGhh0+sIs1oL6J7FU2v5+ge2w4PES HaltFU3oQ5RPxb5T4VT2sdYAMYGU6elQbPvar7RNLZOutCbrWltFij3FGaQVJJOQKFLM H1mr1/osus994QZUqQxDZuCdD57II7/c9A+/LGWTYqTsSmku3Cd12kJyvDd+c3n2gpi0 Impw== X-Received: by 10.140.134.198 with SMTP id 189mr116272742qhg.7.1427088357539; Sun, 22 Mar 2015 22:25:57 -0700 (PDT) Received: from htj.duckdns.org.lan (207-38-238-8.c3-0.wsd-ubr1.qens-wsd.ny.cable.rcn.com. [207.38.238.8]) by mx.google.com with ESMTPSA id h6sm8551624qgh.32.2015.03.22.22.25.55 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 22 Mar 2015 22:25:56 -0700 (PDT) From: Tejun Heo To: axboe@kernel.dk Cc: linux-kernel@vger.kernel.org, jack@suse.cz, hch@infradead.org, hannes@cmpxchg.org, linux-fsdevel@vger.kernel.org, vgoyal@redhat.com, lizefan@huawei.com, cgroups@vger.kernel.org, linux-mm@kvack.org, mhocko@suse.cz, clm@fb.com, fengguang.wu@intel.com, david@fromorbit.com, gthelen@google.com, Tejun Heo Subject: [PATCH 4/8] truncate: swap the order of conditionals in cancel_dirty_page() Date: Mon, 23 Mar 2015 01:25:40 -0400 Message-Id: <1427088344-17542-5-git-send-email-tj@kernel.org> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1427088344-17542-1-git-send-email-tj@kernel.org> References: <1427088344-17542-1-git-send-email-tj@kernel.org> Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID,T_RP_MATCHES_RCVD,UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP cancel_dirty_page() currently performs TestClearPageDirty() and then tests whether the mapping exists and has cap_account_dirty. This patch swaps the order so that it performs the mapping tests first. If the mapping tests fail, the dirty is cleared with ClearPageDirty(). The order or the conditionals is swapped but the end result is the same. This will help inode foreign cgroup wb switching. Signed-off-by: Tejun Heo Cc: Jens Axboe Cc: Jan Kara Cc: Wu Fengguang Cc: Greg Thelen --- mm/truncate.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/mm/truncate.c b/mm/truncate.c index fe2d769..9d40cd4 100644 --- a/mm/truncate.c +++ b/mm/truncate.c @@ -108,13 +108,13 @@ void do_invalidatepage(struct page *page, unsigned int offset, */ void cancel_dirty_page(struct page *page, unsigned int account_size) { - struct mem_cgroup *memcg; + struct address_space *mapping = page->mapping; - memcg = mem_cgroup_begin_page_stat(page); - if (TestClearPageDirty(page)) { - struct address_space *mapping = page->mapping; + if (mapping && mapping_cap_account_dirty(mapping)) { + struct mem_cgroup *memcg; - if (mapping && mapping_cap_account_dirty(mapping)) { + memcg = mem_cgroup_begin_page_stat(page); + if (TestClearPageDirty(page)) { struct bdi_writeback *wb = inode_to_wb(mapping->host); mem_cgroup_dec_page_stat(memcg, MEM_CGROUP_STAT_DIRTY); @@ -123,8 +123,10 @@ void cancel_dirty_page(struct page *page, unsigned int account_size) if (account_size) task_io_account_cancelled_write(account_size); } + mem_cgroup_end_page_stat(memcg); + } else { + ClearPageDirty(page); } - mem_cgroup_end_page_stat(memcg); } EXPORT_SYMBOL(cancel_dirty_page);