svn commit: r218550 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs

Andriy Gapon avg at FreeBSD.org
Fri Feb 11 14:36:16 UTC 2011


On 11/02/2011 05:46, Konstantin Belousov wrote:
> Author: kib
> Date: Fri Feb 11 10:46:15 2011
> New Revision: 218550
> URL: http://svn.freebsd.org/changeset/base/218550
>
> Log:
>    For UIO_NOCOPY case of reading request on zfs vnode, which has vm object
>    attached, activate the page after the successful read, and free the page
>    if read was unsuccessfull.
>
>    Freshly allocated page is not on any queue yet, and not activating (or
>    deactivating) the page leaves it on no queue, excluding the page from
>    pagedaemon scans and making the memory disappeared until the vnode
>    reclaimed.
>
>    Reviewed by:	avg

And
Pointyhat to:	avg
as well.

>    MFC after:	1 week
>
> Modified:
>    head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
>
> Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
> ==============================================================================
> --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c	Fri Feb 11 10:06:49 2011	(r218549)
> +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c	Fri Feb 11 10:46:15 2011	(r218550)
> @@ -527,9 +527,15 @@ again:
>   				zfs_unmap_page(sf);
>   			}
>   			VM_OBJECT_LOCK(obj);
> -			if (error == 0)
> -				m->valid = VM_PAGE_BITS_ALL;
>   			vm_page_io_finish(m);
> +			vm_page_lock(m);
> +			if (error == 0) {
> +				m->valid = VM_PAGE_BITS_ALL;
> +				vm_page_activate(m);
> +			} else
> +				vm_page_free(m);
> +			vm_page_unlock(m);
> +
>   			if (error == 0) {
>   				uio->uio_resid -= bytes;
>   				uio->uio_offset += bytes;


-- 
Andriy Gapon


More information about the svn-src-all mailing list