From patchwork Fri Jun 12 22:02:23 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tejun Heo X-Patchwork-Id: 6601111 Return-Path: X-Original-To: patchwork-linux-fsdevel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id A20A8C0020 for ; Fri, 12 Jun 2015 22:02:50 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id D3D0A205ED for ; Fri, 12 Jun 2015 22:02:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id DA4D220661 for ; Fri, 12 Jun 2015 22:02:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755183AbbFLWCd (ORCPT ); Fri, 12 Jun 2015 18:02:33 -0400 Received: from mail-ob0-f195.google.com ([209.85.214.195]:36321 "EHLO mail-ob0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752868AbbFLWCa (ORCPT ); Fri, 12 Jun 2015 18:02:30 -0400 Received: by obcwm4 with SMTP id wm4so7360373obc.3; Fri, 12 Jun 2015 15:02:29 -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=BQcVDlPU9nXAlYRA8jRLTIMzaqKP8m+t9gGihd77xgc=; b=IeB9O5JUDJ/D1ny0QgeHSG4Pv5gtPSDOlsUtr+3uHUxh/GEQO0VrC7J9rPiLQ7+0Gk ftx5n8sJbdz62QFbnzjkt2ADFYiqTtnNYcTQII+zTbURhNFLcn0C7SWkDTUzLDdQevBm U3h6iPsudaD8vEkfaqI8sWFot9grgPms8kCg2aadcPzwt88JTBLucA2g/Q/RO8Rr9umk kmDtP8oBq4PnHByJ7btQ/8mbTn2mGxENIxYCKw9RlVTNvhf9K5ItSj3VX6YbHcgxnTYi cguB8LuqhDCCAElhwDtZtQ7RckvmB8KuobkGja+4QpQRz0YvSw9ip2OYzwSVbpgIc1Su soWg== X-Received: by 10.60.34.104 with SMTP id y8mr13949304oei.77.1434146549522; Fri, 12 Jun 2015 15:02:29 -0700 (PDT) Received: from mtj.duckdns.org.duckdns.org (mobile-166-173-057-025.mycingular.net. [166.173.57.25]) by mx.google.com with ESMTPSA id f5sm3418068oes.2.2015.06.12.15.02.28 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 12 Jun 2015 15:02:29 -0700 (PDT) From: Tejun Heo To: axboe@kernel.dk Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, lizefan@huawei.com, cgroups@vger.kernel.org, tytso@mit.edu, adilger.kernel@dilger.ca, linux-ext4@vger.kernel.org, Tejun Heo Subject: [PATCH 2/2] ext4: implement cgroup writeback support Date: Fri, 12 Jun 2015 17:02:23 -0500 Message-Id: <1434146543-26358-3-git-send-email-tj@kernel.org> X-Mailer: git-send-email 2.4.2 In-Reply-To: <1434146543-26358-1-git-send-email-tj@kernel.org> References: <1434146543-26358-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 For ordered and writeback data modes, all data IOs go through ext4_io_submit. This patch adds cgroup writeback support by invoking wbc_init_bio() from io_submit_init_bio() and wbc_account_io() in io_submit_add_bh(). Journal data which is written by jbd2 worker is left alone by this patch and will always be written out from the root cgroup. ext4_fill_super() is updated to set MS_CGROUPWB when data mode is either ordered or writeback. In journaled data mode, most IOs become synchronous through the journal and enabling cgroup writeback support doesn't make much sense or difference. Journaled data mode is left alone. Lightly tested with sequential data write workload. Behaves as expected. Signed-off-by: Tejun Heo Cc: "Theodore Ts'o" Cc: Andreas Dilger Cc: linux-ext4@vger.kernel.org --- fs/ext4/page-io.c | 2 ++ fs/ext4/super.c | 2 ++ 2 files changed, 4 insertions(+) diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c index 3f80cb2..c56ba7b 100644 --- a/fs/ext4/page-io.c +++ b/fs/ext4/page-io.c @@ -383,6 +383,7 @@ static int io_submit_init_bio(struct ext4_io_submit *io, bio = bio_alloc(GFP_NOIO, min(nvecs, BIO_MAX_PAGES)); if (!bio) return -ENOMEM; + wbc_init_bio(io->io_wbc, bio); bio->bi_iter.bi_sector = bh->b_blocknr * (bh->b_size >> 9); bio->bi_bdev = bh->b_bdev; bio->bi_end_io = ext4_end_bio; @@ -411,6 +412,7 @@ static int io_submit_add_bh(struct ext4_io_submit *io, ret = bio_add_page(io->io_bio, page, bh->b_size, bh_offset(bh)); if (ret != bh->b_size) goto submit_and_retry; + wbc_account_io(io->io_wbc, page, bh->b_size); io->io_next_block++; return 0; } diff --git a/fs/ext4/super.c b/fs/ext4/super.c index 56b8bb7..a9a3de3 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -3623,6 +3623,8 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent) } if (test_opt(sb, DELALLOC)) clear_opt(sb, DELALLOC); + } else { + sb->s_flags |= MS_CGROUPWB; } sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |