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
MFC after:	1 week
This commit is contained in:
Konstantin Belousov 2011-02-11 10:46:15 +00:00
parent b60688be0f
commit ca67168159

View File

@ -527,9 +527,15 @@ mappedread(vnode_t *vp, int nbytes, uio_t *uio)
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;