From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.8 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A574BC43461 for ; Fri, 24 Jul 2020 07:34:09 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 52733206F0 for ; Fri, 24 Jul 2020 07:34:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=infradead.org header.i=@infradead.org header.b="vAXAnDTh" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 52733206F0 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=lst.de Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 3A5ED8D0028; Fri, 24 Jul 2020 03:33:58 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 357B78D0027; Fri, 24 Jul 2020 03:33:58 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1AB598D0028; Fri, 24 Jul 2020 03:33:58 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0006.hostedemail.com [216.40.44.6]) by kanga.kvack.org (Postfix) with ESMTP id EFAD78D0027 for ; Fri, 24 Jul 2020 03:33:57 -0400 (EDT) Received: from smtpin05.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id B5E018248047 for ; Fri, 24 Jul 2020 07:33:57 +0000 (UTC) X-FDA: 77072155314.05.milk53_0512b5b26f45 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin05.hostedemail.com (Postfix) with ESMTP id 811BF18033E48 for ; Fri, 24 Jul 2020 07:33:57 +0000 (UTC) X-HE-Tag: milk53_0512b5b26f45 X-Filterd-Recvd-Size: 13215 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf09.hostedemail.com (Postfix) with ESMTP for ; Fri, 24 Jul 2020 07:33:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=PUvPGMWnRdKo1i7fPR0B32QodnstGhqM7aWSC48rmWA=; b=vAXAnDThmBqiL4hyyuTGJrqR16 g6Il95NI98TyeGhBBvlIjnqDjdDI0jcOuBxTGFuy7/uoUqSt10Tt+zo28uPwV+uTfQfsftJ0c6ruS PJhk5lAtV7D0FKhnj/lMwanQdpMHx0p8IR1O3rZawloBPRJyfWSG/fu20UNcfTlOdUQFlVHHpE/eZ sLzEE0NtelSKXoFoArP2r4TP5cfJdO3HeOUAkea6vXmfGutU/wZqRMgJnlp4/4FltoPJLfZMhj9J2 vEvf4/PuVNLOchowYv9Rt5Ac/YgJZaRoe0yTQIKmQD6oZBNXIOA9KqHK00Q1QEuiITqoxk25mbvUt cdPrIuug==; Received: from [2001:4bb8:18c:2acc:8dfe:be3c:592c:efc5] (helo=localhost) by casper.infradead.org with esmtpsa (Exim 4.92.3 #3 (Red Hat Linux)) id 1jysDD-0006Gv-K6; Fri, 24 Jul 2020 07:33:48 +0000 From: Christoph Hellwig To: Jens Axboe Cc: Song Liu , Hans de Goede , Richard Weinberger , Minchan Kim , linux-mtd@lists.infradead.org, dm-devel@redhat.com, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, drbd-dev@lists.linbit.com, linux-raid@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, cgroups@vger.kernel.org Subject: [PATCH 14/14] bdi: replace BDI_CAP_NO_{WRITEBACK,ACCT_DIRTY} with a single flag Date: Fri, 24 Jul 2020 09:33:13 +0200 Message-Id: <20200724073313.138789-15-hch@lst.de> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200724073313.138789-1-hch@lst.de> References: <20200724073313.138789-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by casper.infradead.org. See http://www.infradead.org/rpr.html X-Rspamd-Queue-Id: 811BF18033E48 X-Spamd-Result: default: False [0.00 / 100.00] X-Rspamd-Server: rspam02 Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Replace the two negative flags that are always used together with a single positive flag that indicates the writeback capability instead of two related non-capabilities. Also remove the pointless wrappers to just check the flag. Signed-off-by: Christoph Hellwig --- fs/9p/vfs_file.c | 2 +- fs/fs-writeback.c | 7 +++--- include/linux/backing-dev.h | 48 ++++++++----------------------------- mm/backing-dev.c | 6 ++--- mm/filemap.c | 4 ++-- mm/memcontrol.c | 2 +- mm/memory-failure.c | 2 +- mm/migrate.c | 2 +- mm/mmap.c | 2 +- mm/page-writeback.c | 12 +++++----- 10 files changed, 29 insertions(+), 58 deletions(-) diff --git a/fs/9p/vfs_file.c b/fs/9p/vfs_file.c index 92cd1d80218d70..5479d894a10696 100644 --- a/fs/9p/vfs_file.c +++ b/fs/9p/vfs_file.c @@ -625,7 +625,7 @@ static void v9fs_mmap_vm_close(struct vm_area_struct = *vma) =20 inode =3D file_inode(vma->vm_file); =20 - if (!mapping_cap_writeback_dirty(inode->i_mapping)) + if (!mapping_can_writeback(inode->i_mapping)) wbc.nr_to_write =3D 0; =20 might_sleep(); diff --git a/fs/fs-writeback.c b/fs/fs-writeback.c index a605c3dddabc76..e62e48fecff4f9 100644 --- a/fs/fs-writeback.c +++ b/fs/fs-writeback.c @@ -2318,7 +2318,7 @@ void __mark_inode_dirty(struct inode *inode, int fl= ags) =20 wb =3D locked_inode_to_wb_and_lock_list(inode); =20 - WARN(bdi_cap_writeback_dirty(wb->bdi) && + WARN((wb->bdi->capabilities & BDI_CAP_WRITEBACK) && !test_bit(WB_registered, &wb->state), "bdi-%s not registered\n", bdi_dev_name(wb->bdi)); =20 @@ -2343,7 +2343,8 @@ void __mark_inode_dirty(struct inode *inode, int fl= ags) * to make sure background write-back happens * later. */ - if (bdi_cap_writeback_dirty(wb->bdi) && wakeup_bdi) + if (wakeup_bdi && + (wb->bdi->capabilities & BDI_CAP_WRITEBACK)) wb_wakeup_delayed(wb); return; } @@ -2578,7 +2579,7 @@ int write_inode_now(struct inode *inode, int sync) .range_end =3D LLONG_MAX, }; =20 - if (!mapping_cap_writeback_dirty(inode->i_mapping)) + if (!mapping_can_writeback(inode->i_mapping)) wbc.nr_to_write =3D 0; =20 might_sleep(); diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h index b217344a2c63be..44df4fcef65c1e 100644 --- a/include/linux/backing-dev.h +++ b/include/linux/backing-dev.h @@ -110,27 +110,14 @@ int bdi_set_max_ratio(struct backing_dev_info *bdi,= unsigned int max_ratio); /* * Flags in backing_dev_info::capability * - * The first three flags control whether dirty pages will contribute to = the - * VM's accounting and whether writepages() should be called for dirty p= ages - * (something that would not, for example, be appropriate for ramfs) - * - * WARNING: these flags are closely related and should not normally be - * used separately. The BDI_CAP_NO_ACCT_AND_WRITEBACK combines these - * three flags into a single convenience macro. - * - * BDI_CAP_NO_ACCT_DIRTY: Dirty pages shouldn't contribute to accountin= g - * BDI_CAP_NO_WRITEBACK: Don't write pages back - * BDI_CAP_WRITEBACK_ACCT: Automatically account writeback pages - * BDI_CAP_STRICTLIMIT: Keep number of dirty pages below bdi threshol= d. + * BDI_CAP_WRITEBACK: Supports dirty page writeback, and dirty pages + * should contribute to accounting + * BDI_CAP_WRITEBACK_ACCT: Automatically account writeback pages + * BDI_CAP_STRICTLIMIT: Keep number of dirty pages below bdi threshold */ -#define BDI_CAP_NO_ACCT_DIRTY 0x00000001 -#define BDI_CAP_NO_WRITEBACK 0x00000002 -#define BDI_CAP_WRITEBACK_ACCT 0x00000004 -#define BDI_CAP_STRICTLIMIT 0x00000010 -#define BDI_CAP_CGROUP_WRITEBACK 0x00000020 - -#define BDI_CAP_NO_ACCT_AND_WRITEBACK \ - (BDI_CAP_NO_WRITEBACK | BDI_CAP_NO_ACCT_DIRTY) +#define BDI_CAP_WRITEBACK (1 << 0) +#define BDI_CAP_WRITEBACK_ACCT (1 << 1) +#define BDI_CAP_STRICTLIMIT (1 << 2) =20 extern struct backing_dev_info noop_backing_dev_info; =20 @@ -169,24 +156,9 @@ static inline int wb_congested(struct bdi_writeback = *wb, int cong_bits) long congestion_wait(int sync, long timeout); long wait_iff_congested(int sync, long timeout); =20 -static inline bool bdi_cap_writeback_dirty(struct backing_dev_info *bdi) -{ - return !(bdi->capabilities & BDI_CAP_NO_WRITEBACK); -} - -static inline bool bdi_cap_account_dirty(struct backing_dev_info *bdi) -{ - return !(bdi->capabilities & BDI_CAP_NO_ACCT_DIRTY); -} - -static inline bool mapping_cap_writeback_dirty(struct address_space *map= ping) -{ - return bdi_cap_writeback_dirty(inode_to_bdi(mapping->host)); -} - -static inline bool mapping_cap_account_dirty(struct address_space *mappi= ng) +static inline bool mapping_can_writeback(struct address_space *mapping) { - return bdi_cap_account_dirty(inode_to_bdi(mapping->host)); + return inode_to_bdi(mapping->host)->capabilities & BDI_CAP_WRITEBACK; } =20 static inline int bdi_sched_wait(void *word) @@ -223,7 +195,7 @@ static inline bool inode_cgwb_enabled(struct inode *i= node) =20 return cgroup_subsys_on_dfl(memory_cgrp_subsys) && cgroup_subsys_on_dfl(io_cgrp_subsys) && - bdi_cap_account_dirty(bdi) && + (bdi->capabilities & BDI_CAP_WRITEBACK) && (inode->i_sb->s_iflags & SB_I_CGROUPWB); } =20 diff --git a/mm/backing-dev.c b/mm/backing-dev.c index 5f5958e1d39060..01bd0a4f16096a 100644 --- a/mm/backing-dev.c +++ b/mm/backing-dev.c @@ -14,9 +14,7 @@ #include #include =20 -struct backing_dev_info noop_backing_dev_info =3D { - .capabilities =3D BDI_CAP_NO_ACCT_AND_WRITEBACK, -}; +struct backing_dev_info noop_backing_dev_info; EXPORT_SYMBOL_GPL(noop_backing_dev_info); =20 static struct class *bdi_class; @@ -744,7 +742,7 @@ struct backing_dev_info *bdi_alloc(int node_id) kfree(bdi); return NULL; } - bdi->capabilities =3D BDI_CAP_WRITEBACK_ACCT; + bdi->capabilities =3D BDI_CAP_WRITEBACK | BDI_CAP_WRITEBACK_ACCT; bdi->ra_pages =3D VM_READAHEAD_PAGES; return bdi; } diff --git a/mm/filemap.c b/mm/filemap.c index 385759c4ce4be6..89ebadcfecf8e5 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -413,7 +413,7 @@ int __filemap_fdatawrite_range(struct address_space *= mapping, loff_t start, .range_end =3D end, }; =20 - if (!mapping_cap_writeback_dirty(mapping) || + if (!mapping_can_writeback(mapping) || !mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)) return 0; =20 @@ -1634,7 +1634,7 @@ struct page *pagecache_get_page(struct address_spac= e *mapping, pgoff_t index, no_page: if (!page && (fgp_flags & FGP_CREAT)) { int err; - if ((fgp_flags & FGP_WRITE) && mapping_cap_account_dirty(mapping)) + if ((fgp_flags & FGP_WRITE) && mapping_can_writeback(mapping)) gfp_mask |=3D __GFP_WRITE; if (fgp_flags & FGP_NOFS) gfp_mask &=3D ~__GFP_FS; diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 19622328e4b5ac..cb2f1840481f57 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -5419,7 +5419,7 @@ static int mem_cgroup_move_account(struct page *pag= e, if (PageDirty(page)) { struct address_space *mapping =3D page_mapping(page); =20 - if (mapping_cap_account_dirty(mapping)) { + if (mapping_can_writeback(mapping)) { __mod_lruvec_state(from_vec, NR_FILE_DIRTY, -nr_pages); __mod_lruvec_state(to_vec, NR_FILE_DIRTY, diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 47b8ccb1fb9b85..012e0d315b1f90 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -1006,7 +1006,7 @@ static bool hwpoison_user_mappings(struct page *p, = unsigned long pfn, */ mapping =3D page_mapping(hpage); if (!(flags & MF_MUST_KILL) && !PageDirty(hpage) && mapping && - mapping_cap_writeback_dirty(mapping)) { + mapping_can_writeback(mapping)) { if (page_mkclean(hpage)) { SetPageDirty(hpage); } else { diff --git a/mm/migrate.c b/mm/migrate.c index 40cd7016ae6fc6..7e2cafa06428f3 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -503,7 +503,7 @@ int migrate_page_move_mapping(struct address_space *m= apping, __dec_lruvec_state(old_lruvec, NR_SHMEM); __inc_lruvec_state(new_lruvec, NR_SHMEM); } - if (dirty && mapping_cap_account_dirty(mapping)) { + if (dirty && mapping_can_writeback(mapping)) { __dec_node_state(oldzone->zone_pgdat, NR_FILE_DIRTY); __dec_zone_state(oldzone, NR_ZONE_WRITE_PENDING); __inc_node_state(newzone->zone_pgdat, NR_FILE_DIRTY); diff --git a/mm/mmap.c b/mm/mmap.c index 59a4682ebf3fae..3efb7ae6447fd9 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -1665,7 +1665,7 @@ int vma_wants_writenotify(struct vm_area_struct *vm= a, pgprot_t vm_page_prot) =20 /* Can the mapping track the dirty pages? */ return vma->vm_file && vma->vm_file->f_mapping && - mapping_cap_account_dirty(vma->vm_file->f_mapping); + mapping_can_writeback(vma->vm_file->f_mapping); } =20 /* diff --git a/mm/page-writeback.c b/mm/page-writeback.c index 44c4a588f48df5..ad288f1b3052fe 100644 --- a/mm/page-writeback.c +++ b/mm/page-writeback.c @@ -1882,7 +1882,7 @@ void balance_dirty_pages_ratelimited(struct address= _space *mapping) int ratelimit; int *p; =20 - if (!bdi_cap_account_dirty(bdi)) + if (!(bdi->capabilities & BDI_CAP_WRITEBACK)) return; =20 if (inode_cgwb_enabled(inode)) @@ -2425,7 +2425,7 @@ void account_page_dirtied(struct page *page, struct= address_space *mapping) =20 trace_writeback_dirty_page(page, mapping); =20 - if (mapping_cap_account_dirty(mapping)) { + if (mapping_can_writeback(mapping)) { struct bdi_writeback *wb; =20 inode_attach_wb(inode, page); @@ -2452,7 +2452,7 @@ void account_page_dirtied(struct page *page, struct= address_space *mapping) void account_page_cleaned(struct page *page, struct address_space *mappi= ng, struct bdi_writeback *wb) { - if (mapping_cap_account_dirty(mapping)) { + if (mapping_can_writeback(mapping)) { dec_lruvec_page_state(page, NR_FILE_DIRTY); dec_zone_page_state(page, NR_ZONE_WRITE_PENDING); dec_wb_stat(wb, WB_RECLAIMABLE); @@ -2515,7 +2515,7 @@ void account_page_redirty(struct page *page) { struct address_space *mapping =3D page->mapping; =20 - if (mapping && mapping_cap_account_dirty(mapping)) { + if (mapping && mapping_can_writeback(mapping)) { struct inode *inode =3D mapping->host; struct bdi_writeback *wb; struct wb_lock_cookie cookie =3D {}; @@ -2627,7 +2627,7 @@ void __cancel_dirty_page(struct page *page) { struct address_space *mapping =3D page_mapping(page); =20 - if (mapping_cap_account_dirty(mapping)) { + if (mapping_can_writeback(mapping)) { struct inode *inode =3D mapping->host; struct bdi_writeback *wb; struct wb_lock_cookie cookie =3D {}; @@ -2667,7 +2667,7 @@ int clear_page_dirty_for_io(struct page *page) =20 VM_BUG_ON_PAGE(!PageLocked(page), page); =20 - if (mapping && mapping_cap_account_dirty(mapping)) { + if (mapping && mapping_can_writeback(mapping)) { struct inode *inode =3D mapping->host; struct bdi_writeback *wb; struct wb_lock_cookie cookie =3D {}; --=20 2.27.0