From patchwork Fri Jan 15 16:04:29 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Bonzini X-Patchwork-Id: 8042921 Return-Path: X-Original-To: patchwork-qemu-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id A76A79FE73 for ; Fri, 15 Jan 2016 16:08:37 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id F0F452040F for ; Fri, 15 Jan 2016 16:08:36 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 4ACD12044C for ; Fri, 15 Jan 2016 16:08:36 +0000 (UTC) Received: from localhost ([::1]:47807 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aK6vT-0006A6-Dy for patchwork-qemu-devel@patchwork.kernel.org; Fri, 15 Jan 2016 11:08:35 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59156) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aK6ru-0007sC-PW for qemu-devel@nongnu.org; Fri, 15 Jan 2016 11:04:55 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aK6rt-0003LF-LF for qemu-devel@nongnu.org; Fri, 15 Jan 2016 11:04:54 -0500 Received: from mail-wm0-x22c.google.com ([2a00:1450:400c:c09::22c]:34252) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aK6rt-0003L3-ES; Fri, 15 Jan 2016 11:04:53 -0500 Received: by mail-wm0-x22c.google.com with SMTP id u188so28959976wmu.1; Fri, 15 Jan 2016 08:04:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=/oI41zF7XtcCfy2rY5Ur1WHFGyxrZJ2x5F7rYXlQ4pw=; b=RlJoNgVAisVMSyE3KIGPqLeIdtqb5fq1Mzh3PPfH/F0tu46XeOQASX0JpbGhz382PK i5a8Peb5jQAMTjvnmAJe9sTzIhIFja2WYkWqmO9N4kMmcyRIxt/AljT2P+ws9QE21Sdj Xxm2ljFxuNC+TEcbLgb9SROA19aMVSG8LZQztG9DbQoCc4TdnxQuiT37wnEyhwCH/o2J BKrsiRg8e5QdwULKfJv9SE2OCHD16c3hc4BzRMVb5GBQv8HPK/vgEA7w0zOT7/itt+XH eWibuXTZyh8o+FsyMyiUhRJgYo4EQdYetM7Vke/5HqJan2D/Kc/NYP0184S/5pQOqCiP oWqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=/oI41zF7XtcCfy2rY5Ur1WHFGyxrZJ2x5F7rYXlQ4pw=; b=NZA0tLUO6rptwDA2wvq2TTzBupA8FKWcfwtHNku++/Jp4ewoUO7+mQ3TGd2+ctAPEb EFQSeMLi7JtmeiZhU11NH80RJgOb10JhRQ4lfUQfej2TxKBGzjgGTX5UHJTvhWVUdT5E W42w5i68D2ydBBWouHrS3xulsZmkJijgkfPz50oK5zQu/+CEkp5l+4HBvsPZbExhspOj FtFgR1gSMn5iKE/2qt6WWmwvi/c5OM1a7ukV3HRZvXcmw5gxXDUw1NMgUqC+ifUeGMll rxBWNO8ybGJLtCwcbLKn7I3EcO+ZrpZyupttq1FDe7mnapBYqIXspPyMbOlxfgJpVEFw szoA== X-Gm-Message-State: ALoCoQnWYUVLQoCDp4RV5zS808bpEPc6SBAwr9CgLySi4u9/gL0hFyvHJOyMlmMg3ZFAtBpsmGn4skoOhNUJPLBALY0ixyolzw== X-Received: by 10.194.57.100 with SMTP id h4mr12559993wjq.21.1452873892848; Fri, 15 Jan 2016 08:04:52 -0800 (PST) Received: from 640k.lan (94-39-195-126.adsl-ull.clienti.tiscali.it. [94.39.195.126]) by smtp.gmail.com with ESMTPSA id c15sm3103036wmd.19.2016.01.15.08.04.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Jan 2016 08:04:51 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Fri, 15 Jan 2016 17:04:29 +0100 Message-Id: <1452873871-138914-15-git-send-email-pbonzini@redhat.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1452873871-138914-1-git-send-email-pbonzini@redhat.com> References: <1452873871-138914-1-git-send-email-pbonzini@redhat.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2a00:1450:400c:c09::22c Cc: qemu-block@nongnu.org Subject: [Qemu-devel] [PULL 13/15] nbd-server: do not exit on failed memory allocation X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The amount of memory allocated in nbd_co_receive_request is driven by the NBD client (possibly a virtual machine). Parallel I/O can cause the server to allocate a large amount of memory; check for failures and return ENOMEM in that case. Cc: qemu-block@nongnu.org Reviewed-by: Max Reitz Signed-off-by: Paolo Bonzini --- block/block-backend.c | 5 +++++ include/sysemu/block-backend.h | 1 + nbd/server.c | 6 +++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/block/block-backend.c b/block/block-backend.c index f41d326..e813759 100644 --- a/block/block-backend.c +++ b/block/block-backend.c @@ -1033,6 +1033,11 @@ void blk_set_guest_block_size(BlockBackend *blk, int align) blk->guest_block_size = align; } +void *blk_try_blockalign(BlockBackend *blk, size_t size) +{ + return qemu_try_blockalign(blk ? blk->bs : NULL, size); +} + void *blk_blockalign(BlockBackend *blk, size_t size) { return qemu_blockalign(blk ? blk->bs : NULL, size); diff --git a/include/sysemu/block-backend.h b/include/sysemu/block-backend.h index dc24476..1568554 100644 --- a/include/sysemu/block-backend.h +++ b/include/sysemu/block-backend.h @@ -148,6 +148,7 @@ int blk_get_flags(BlockBackend *blk); int blk_get_max_transfer_length(BlockBackend *blk); int blk_get_max_iov(BlockBackend *blk); void blk_set_guest_block_size(BlockBackend *blk, int align); +void *blk_try_blockalign(BlockBackend *blk, size_t size); void *blk_blockalign(BlockBackend *blk, size_t size); bool blk_op_is_blocked(BlockBackend *blk, BlockOpType op, Error **errp); void blk_op_unblock(BlockBackend *blk, BlockOpType op, Error *reason); diff --git a/nbd/server.c b/nbd/server.c index c41af0d..eead339 100644 --- a/nbd/server.c +++ b/nbd/server.c @@ -836,7 +836,11 @@ static ssize_t nbd_co_receive_request(NBDRequest *req, struct nbd_request *reque goto out; } - req->data = blk_blockalign(client->exp->blk, request->len); + req->data = blk_try_blockalign(client->exp->blk, request->len); + if (req->data == NULL) { + rc = -ENOMEM; + goto out; + } } if (command == NBD_CMD_WRITE) { TRACE("Reading %u byte(s)", request->len);