Thread (4 messages) 4 messages, 3 authors, 2013-09-17

Re: [PATCH] vhost/scsi: use vmalloc for order-10 allocation

From: "Michael S. Tsirkin" <mst@redhat.com>
Date: 2013-09-17 19:49:51
Also in: kvm, lkml, netdev

On Tue, Sep 17, 2013 at 10:14:37PM +0400, Sergei Shtylyov wrote:
Hello.

On 09/17/2013 11:21 AM, Michael S. Tsirkin wrote:
quoted
As vhost scsi device struct is large, if the device is
created on a busy system, kzalloc() might fail, so this patch does a
fallback to vzalloc().
quoted
As vmalloc() adds overhead on data-path, add __GFP_REPEAT
to kzalloc() flags to do this fallback only when really needed.
quoted
Reported-by: Dan Aloni <redacted>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
quoted
I put this on my vhost fixes branch, intend to merge for 3.12.
Dan, could you please confirm this works for you?
quoted
 drivers/vhost/scsi.c | 41 +++++++++++++++++++++++++++--------------
 1 file changed, 27 insertions(+), 14 deletions(-)
quoted
diff --git a/drivers/vhost/scsi.c b/drivers/vhost/scsi.c
index 4b79a1f..2c30bb0 100644
--- a/drivers/vhost/scsi.c
+++ b/drivers/vhost/scsi.c
@@ -1373,21 +1373,30 @@ static int vhost_scsi_set_features(struct vhost_scsi *vs, u64 features)
 	return 0;
 }

+static void vhost_scsi_free(struct vhost_scsi *vs)
+{
+        if (is_vmalloc_addr(vs))
+                vfree(vs);
+        else
+                kfree(vs);
   Indent with the tabs ISO spaces, please.
quoted
+}
+
 static int vhost_scsi_open(struct inode *inode, struct file *f)
 {
 	struct vhost_scsi *vs;
 	struct vhost_virtqueue **vqs;
-	int r, i;
+	int r = -ENOMEM, i;

-	vs = kzalloc(sizeof(*vs), GFP_KERNEL);
-	if (!vs)
-		return -ENOMEM;
+        vs = kzalloc(sizeof(*vs), GFP_KERNEL | __GFP_NOWARN | __GFP_REPEAT);
   Indent here with a tab, please.
quoted
+	if (!vs) {
+		vs = vzalloc(sizeof(*vs));
+		if (!vs)
+			goto err_vs;
+	}
WBR, Sergei
Thanks, I'll fix this up.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help