Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 1 Oct 2020 22:04:58 +0200
From:      Michael Tuexen <tuexen@fh-muenster.de>
To:        Bryan Drewery <bdrewery@FreeBSD.org>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r366340 - head/sys/kern
Message-ID:  <F9919EA9-E747-422D-AEBB-65839EE28E74@fh-muenster.de>
In-Reply-To: <202010011917.091JH3jX031245@repo.freebsd.org>
References:  <202010011917.091JH3jX031245@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

[-- Attachment #1 --]
> On 1. Oct 2020, at 21:17, Bryan Drewery <bdrewery@FreeBSD.org> wrote:
> 
> Author: bdrewery
> Date: Thu Oct  1 19:17:03 2020
> New Revision: 366340
> URL: https://svnweb.freebsd.org/changeset/base/366340
> 
> Log:
>  Use unlocked page lookup for inmem() to avoid object lock contention
> 
>  Reviewed By:	kib, markj
>  Sponsored by:	Dell EMC Isilon
>  Submitted by:	mlaier
>  Differential Revision:	https://reviews.freebsd.org/D26597
> 
> Modified:
>  head/sys/kern/vfs_bio.c
> 
> Modified: head/sys/kern/vfs_bio.c
> ==============================================================================
> --- head/sys/kern/vfs_bio.c	Thu Oct  1 19:06:07 2020	(r366339)
> +++ head/sys/kern/vfs_bio.c	Thu Oct  1 19:17:03 2020	(r366340)
> @@ -154,7 +154,7 @@ caddr_t __read_mostly unmapped_buf;
> /* Used below and for softdep flushing threads in ufs/ffs/ffs_softdep.c */
> struct proc *bufdaemonproc;
> 
> -static int inmem(struct vnode *vp, daddr_t blkno);
> +static bool inmem(struct vnode *vp, daddr_t blkno);
> static void vm_hold_free_pages(struct buf *bp, int newbsize);
> static void vm_hold_load_pages(struct buf *bp, vm_offset_t from,
> 		vm_offset_t to);
> @@ -3586,20 +3586,21 @@ incore(struct bufobj *bo, daddr_t blkno)
>  * it also hunts around in the VM system for the data.
>  */
> 
> -static int
> +static bool
> inmem(struct vnode * vp, daddr_t blkno)
> {
> 	vm_object_t obj;
> 	vm_offset_t toff, tinc, size;
> -	vm_page_t m;
> +	vm_page_t m, n;
> 	vm_ooffset_t off;
> +	int valid;
> 
> 	ASSERT_VOP_LOCKED(vp, "inmem");
> 
> 	if (incore(&vp->v_bufobj, blkno))
> -		return 1;
> +		return (1);
> 	if (vp->v_mount == NULL)
> -		return 0;
> +		return (0);
> 	obj = vp->v_object;
> 	if (obj == NULL)
> 		return (0);
> @@ -3609,24 +3610,30 @@ inmem(struct vnode * vp, daddr_t blkno)
> 		size = vp->v_mount->mnt_stat.f_iosize;
> 	off = (vm_ooffset_t)blkno * (vm_ooffset_t)vp->v_mount->mnt_stat.f_iosize;
> 
> -	VM_OBJECT_RLOCK(obj);
> 	for (toff = 0; toff < vp->v_mount->mnt_stat.f_iosize; toff += tinc) {
> -		m = vm_page_lookup(obj, OFF_TO_IDX(off + toff));
> -		if (!m)
> -			goto notinmem;
> +		m = vm_page_lookup_unlocked(obj, OFF_TO_IDX(off + toff));
> +recheck:
> +		if (m == NULL)
> +			return (0);
> +		/*
> +		 * Consider page validity only if page mapping didn't change
> +		 * during the check.
> +		 */
> +		valid = vm_page_is_valid(m,
> +		    (vm_offset_t)((toff + off) & PAGE_MASK), tinc);
> +		n = vm_page_lookup_unlocked(obj, OFF_TO_IDX(off + toff));
Where is vm_page_lookup_unlocked() defined? For me, this breaks kernel compilation...

Best regards
Michael
> +		if (m != n) {
> +			m = n;
> +			goto recheck;
> +		}
> +		if (!valid)
> +			return (0);
> +
> 		tinc = size;
> 		if (tinc > PAGE_SIZE - ((toff + off) & PAGE_MASK))
> 			tinc = PAGE_SIZE - ((toff + off) & PAGE_MASK);
> -		if (vm_page_is_valid(m,
> -		    (vm_offset_t) ((toff + off) & PAGE_MASK), tinc) == 0)
> -			goto notinmem;
> 	}
> -	VM_OBJECT_RUNLOCK(obj);
> -	return 1;
> -
> -notinmem:
> -	VM_OBJECT_RUNLOCK(obj);
> -	return (0);
> +	return (1);
> }
> 
> /*


[-- Attachment #2 --]
0	*H
010
	`He0	*H
00	%ف0
	*H
010	UDE1+0)U
"T-Systems Enterprise Services GmbH10UT-Systems Trust Center1%0#UT-TeleSec GlobalRoot Class 20
160222133822Z
310222235959Z010	UDE1E0CU
<Verein zur Foerderung eines Deutschen Forschungsnetzes e. V.10UDFN-PKI1-0+U$DFN-Verein Certification Authority 20"0
	*H
0
`fAsMg9Z`GNWKVlUvFEc>pԫT#7(	]Ę7 fxJ2)y T_Jx4twMYZ/l<5e
2mZjKb84YE6Ixjm[k<q;gz6N)=Q\4
u9i%=+;U*^3	1FkYt0p0U0U2&JJK0U#0Y 6y"kaҸ,˂J0U003U ,0*0
+!,0
+!,0g0LUE0C0A?=;http://pki0336.telesec.de/rl/TeleSec_GlobalRoot_Class_2.crl0+z0x0,+0 http://ocsp0336.telesec.de/ocspr0H+0<http://pki0336.telesec.de/crt/TeleSec_GlobalRoot_Class_2.cer0
	*H
>eV-;qOں)!F.8y8tv]bL3j2,LG`Utk,ykMPf0"rM>[ϙR9.D~i;u;"lGG4}=wMOY>GJXoB.M<I&6,"͋xU;DRiТSW{$Jer900c,=0
	*H
010	UDE1E0CU
<Verein zur Foerderung eines Deutschen Forschungsnetzes e. V.10UDFN-PKI1-0+U$DFN-Verein Certification Authority 20
160524113840Z
310222235959Z010	UDE1E0CU
<Verein zur Foerderung eines Deutschen Forschungsnetzes e. V.10UDFN-PKI1%0#UDFN-Verein Global Issuing CA0"0
	*H
0
;yGi9٢0r)_KhLk{-n:WQ6pmc.@уLf=di囤rh9QyӮ/]cqK9zBi@p翞MGH_e*I-?T/:W~xJA}S_ȳ*0$?MR6$eǖs$hYv~
x<K7S:8Gmd=<ZEJʀ|LL00U00U0)U "0 0
+!,0
+!,0Uk:S୲2	;t0U#02&JJK0U00@><:http://cdp1.pca.dfn.de/global-root-g2-ca/pub/crl/cacrl.crl0@><:http://cdp2.pca.dfn.de/global-root-g2-ca/pub/crl/cacrl.crl0+003+0'http://ocsp.pca.dfn.de/OCSP-Server/OCSP0J+0>http://cdp1.pca.dfn.de/global-root-g2-ca/pub/cacert/cacert.crt0J+0>http://cdp2.pca.dfn.de/global-root-g2-ca/pub/cacert/cacert.crt0
	*H
xENU	j>xh5?k8w,>̨͠3$b6LxnPn`OR1CFubnfQB1gPI9˟ʆHK+f8W-L_>\)9l{F8ܰ?q3Hc%%<z{Wn8︠/[Kl=w3Sv&%Ao/|~`]AaI)ب-uJU4"00Ƞ!16BR0
	*H
010	UDE1E0CU
<Verein zur Foerderung eines Deutschen Forschungsnetzes e. V.10UDFN-PKI1%0#UDFN-Verein Global Issuing CA0
190604142910Z
220603142910Z0|10	UDE1 0U
Fachhochschule Muenster1200U)Fachbereich Elektrotechnik und Informatik10UMichael Tuexen0"0
	*H
0
̯ʐpK,s>G#=)#5" @W
:qI6DNi&A@ڑOqm8{ET'C+ti?8%FU!eե#HK?
U<o'0!Ssmd'Ur؉wHZ;09Le.6P7`xyL(5:C+aKgWN0J0>U 7050
+!,0+!,0+!,0	U00U0U%0++0UATy׬"Q0U#0k:S୲2	;t0 U0tuexen@fh-muenster.de0U00?=;9http://cdp1.pca.dfn.de/dfn-ca-global-g2/pub/crl/cacrl.crl0?=;9http://cdp2.pca.dfn.de/dfn-ca-global-g2/pub/crl/cacrl.crl0+003+0'http://ocsp.pca.dfn.de/OCSP-Server/OCSP0I+0=http://cdp1.pca.dfn.de/dfn-ca-global-g2/pub/cacert/cacert.crt0I+0=http://cdp2.pca.dfn.de/dfn-ca-global-g2/pub/cacert/cacert.crt0
	*H
7VYgUEyAȝ&jdZm`'3n
/{b͠1M݇ݨJv^|b:ɐR<DW_x$iqi7yoֹ•Mqc
s&|)rm씎hK4{Ăl}w<)hhUA#][ZiX\ЗŁ@\NVdv/*@}\C"
VeՀt)$ۉ%)ڧ100010	UDE1E0CU
<Verein zur Foerderung eines Deutschen Forschungsnetzes e. V.10UDFN-PKI1%0#UDFN-Verein Global Issuing CA!16BR0
	`He0	*H
	1	*H
0	*H
	1
201001200458Z0/	*H
	1" x扨J+wu櫚0	+710010	UDE1E0CU
<Verein zur Foerderung eines Deutschen Forschungsnetzes e. V.10UDFN-PKI1%0#UDFN-Verein Global Issuing CA!16BR0*H
	1010	UDE1E0CU
<Verein zur Foerderung eines Deutschen Forschungsnetzes e. V.10UDFN-PKI1%0#UDFN-Verein Global Issuing CA!16BR0
	*H
Kړ"𕺢Affc;~E^;A}cA'zRd“Snq$W'Y9=#_#i*ԥ?`o5|FhlZܦtVMsvȣݘ4!lyOw!	^
-0 D]րy
o󵔱7MK\JɺڭWwʽЭ$	{bZ5~>dǞօ^ KL-7

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?F9919EA9-E747-422D-AEBB-65839EE28E74>