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:
parent
f7bc6ac842
commit
ccf9967338
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user