[net/9p]: Introduce basic flow-control for VirtIO transport.
authorVenkateswararao Jujjuri (JV) <jvrao@linux.vnet.ibm.com>
Fri, 18 Mar 2011 22:49:48 +0000 (15:49 -0700)
committerEric Van Hensbergen <ericvh@gmail.com>
Tue, 22 Mar 2011 21:32:50 +0000 (16:32 -0500)
commit68da9ba4eeadae86ad42e52b80822fbd56971267
treec832a4b1ff3e1bf97601183d11dfe7149a0da41c
parentaaf0ef1d2bce05cfd06cf29c96a6973df4d0a6a8
[net/9p]: Introduce basic flow-control for VirtIO transport.

Recent zerocopy work in the 9P VirtIO transport maps and pins
user buffers into kernel memory for the server to work on them.
Since the user process can initiate this kind of pinning with a simple
read/write call, thousands of IO threads initiated by the user process can
hog the system resources and could result into denial of service.

This patch introduces flow control to avoid that extreme scenario.

The ceiling limit to avoid denial of service attacks is set to relatively
high (nr_free_pagecache_pages()/4) so that it won't interfere with
regular usage, but can step in extreme cases to limit the total system
hang. Since we don't have a global structure to accommodate this variable,
I choose the virtio_chan as the home for this.

Signed-off-by: Venkateswararao Jujjuri <jvrao@linux.vnet.ibm.com>
Reviewed-by: Badari Pulavarty <pbadari@us.ibm.com>
Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
net/9p/trans_virtio.c