From owner-dev-commits-src-main@freebsd.org Fri May 7 14:08:21 2021 Return-Path: Delivered-To: dev-commits-src-main@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 71F1662F1A8; Fri, 7 May 2021 14:08:21 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4FcC392FQTz4fHT; Fri, 7 May 2021 14:08:21 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 30E9D496D; Fri, 7 May 2021 14:08:21 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 147E8LYE020202; Fri, 7 May 2021 14:08:21 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 147E8LdR020201; Fri, 7 May 2021 14:08:21 GMT (envelope-from git) Date: Fri, 7 May 2021 14:08:21 GMT Message-Id: <202105071408.147E8LdR020201@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: c23c555bc15c - main - Add pgo_mightbedirty method MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: c23c555bc15ce1523b95fb8da99ae77c0bb0977e Auto-Submitted: auto-generated X-BeenThere: dev-commits-src-main@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commit messages for the main branch of the src repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 07 May 2021 14:08:21 -0000 The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=c23c555bc15ce1523b95fb8da99ae77c0bb0977e commit c23c555bc15ce1523b95fb8da99ae77c0bb0977e Author: Konstantin Belousov AuthorDate: 2021-05-01 00:43:08 +0000 Commit: Konstantin Belousov CommitDate: 2021-05-07 14:08:03 +0000 Add pgo_mightbedirty method Used to implement vm_object_mightbedirty() Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D30070 --- sys/vm/swap_pager.c | 10 ++++++++++ sys/vm/vm_object.c | 6 ++++++ sys/vm/vm_object.h | 17 ++--------------- sys/vm/vm_pager.c | 10 ++++++++++ sys/vm/vm_pager.h | 2 ++ sys/vm/vnode_pager.c | 1 + 6 files changed, 31 insertions(+), 15 deletions(-) diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c index 3f2a647b269d..11e494d1ad05 100644 --- a/sys/vm/swap_pager.c +++ b/sys/vm/swap_pager.c @@ -434,6 +434,7 @@ static void swap_pager_update_writecount(vm_object_t object, static void swap_pager_release_writecount(vm_object_t object, vm_offset_t start, vm_offset_t end); static void swap_pager_set_writeable_dirty(vm_object_t object); +static bool swap_pager_mightbedirty(vm_object_t object); struct pagerops swappagerops = { .pgo_init = swap_pager_init, /* early system initialization of pager */ @@ -447,6 +448,7 @@ struct pagerops swappagerops = { .pgo_update_writecount = swap_pager_update_writecount, .pgo_release_writecount = swap_pager_release_writecount, .pgo_set_writeable_dirty = swap_pager_set_writeable_dirty, + .pgo_mightbedirty = swap_pager_mightbedirty, }; /* @@ -3132,3 +3134,11 @@ swap_pager_set_writeable_dirty(vm_object_t object) if ((object->flags & OBJ_TMPFS_NODE) != 0) vm_object_set_writeable_dirty_(object); } + +static bool +swap_pager_mightbedirty(vm_object_t object) +{ + if ((object->flags & OBJ_TMPFS_NODE) != 0) + return (vm_object_mightbedirty_(object)); + return (false); +} diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index 46b43e8cee14..b601bff33ff4 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -2337,6 +2337,12 @@ vm_object_set_writeable_dirty_(vm_object_t object) atomic_add_int(&object->generation, 1); } +bool +vm_object_mightbedirty_(vm_object_t object) +{ + return (object->generation != object->cleangeneration); +} + /* * vm_object_unwire: * diff --git a/sys/vm/vm_object.h b/sys/vm/vm_object.h index 93380d904526..c7bbec0e7a86 100644 --- a/sys/vm/vm_object.h +++ b/sys/vm/vm_object.h @@ -330,21 +330,6 @@ vm_object_reserv(vm_object_t object) return (false); } -static __inline bool -vm_object_mightbedirty(vm_object_t object) -{ - - if (object->type != OBJT_VNODE) { - if ((object->flags & OBJ_TMPFS_NODE) == 0) - return (false); -#ifdef KASSERT - KASSERT(object->type == OBJT_SWAP, - ("TMPFS_NODE obj %p is not swap", object)); -#endif - } - return (object->generation != object->cleangeneration); -} - void vm_object_clear_flag(vm_object_t object, u_short bits); void vm_object_pip_add(vm_object_t object, short i); void vm_object_pip_wakeup(vm_object_t object); @@ -379,6 +364,8 @@ void vm_object_destroy (vm_object_t); void vm_object_terminate (vm_object_t); void vm_object_set_writeable_dirty (vm_object_t); void vm_object_set_writeable_dirty_(vm_object_t object); +bool vm_object_mightbedirty(vm_object_t object); +bool vm_object_mightbedirty_(vm_object_t object); void vm_object_init (void); int vm_object_kvme_type(vm_object_t object, struct vnode **vpp); void vm_object_madvise(vm_object_t, vm_pindex_t, vm_pindex_t, int); diff --git a/sys/vm/vm_pager.c b/sys/vm/vm_pager.c index 258c06fd3947..b113ce569e14 100644 --- a/sys/vm/vm_pager.c +++ b/sys/vm/vm_pager.c @@ -508,3 +508,13 @@ vm_object_set_writeable_dirty(vm_object_t object) method(object); } +bool +vm_object_mightbedirty(vm_object_t object) +{ + pgo_mightbedirty_t *method; + + method = pagertab[object->type]->pgo_mightbedirty; + if (method == NULL) + return (false); + return (method(object)); +} diff --git a/sys/vm/vm_pager.h b/sys/vm/vm_pager.h index e17e29ea961f..014a67c2e055 100644 --- a/sys/vm/vm_pager.h +++ b/sys/vm/vm_pager.h @@ -63,6 +63,7 @@ typedef int pgo_populate_t(vm_object_t, vm_pindex_t, int, vm_prot_t, typedef void pgo_pageunswapped_t(vm_page_t); typedef void pgo_writecount_t(vm_object_t, vm_offset_t, vm_offset_t); typedef void pgo_set_writeable_dirty_t(vm_object_t); +typedef bool pgo_mightbedirty_t(vm_object_t); struct pagerops { pgo_init_t *pgo_init; /* Initialize pager. */ @@ -77,6 +78,7 @@ struct pagerops { pgo_writecount_t *pgo_update_writecount; pgo_writecount_t *pgo_release_writecount; pgo_set_writeable_dirty_t *pgo_set_writeable_dirty; + pgo_mightbedirty_t *pgo_mightbedirty; }; extern struct pagerops defaultpagerops; diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c index bb0ec26ea35e..0ab018eda6ee 100644 --- a/sys/vm/vnode_pager.c +++ b/sys/vm/vnode_pager.c @@ -116,6 +116,7 @@ struct pagerops vnodepagerops = { .pgo_update_writecount = vnode_pager_update_writecount, .pgo_release_writecount = vnode_pager_release_writecount, .pgo_set_writeable_dirty = vm_object_set_writeable_dirty_, + .pgo_mightbedirty = vm_object_mightbedirty_, }; static struct domainset *vnode_domainset = NULL;