Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp741066yba; Sat, 4 May 2019 11:43:40 -0700 (PDT) X-Google-Smtp-Source: APXvYqz7v5+WcpcxqxowPNHTK1rxpt6RGKgMR6fiXeG+xfjO6yMEY0HTXDyHECdU0SMb1f2CgQIO X-Received: by 2002:aa7:8096:: with SMTP id v22mr21386211pff.94.1556995420024; Sat, 04 May 2019 11:43:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1556995420; cv=none; d=google.com; s=arc-20160816; b=ia/QShyHv0jPxO7Zbuv8sGhp3lTAin/zvyXrdFnYVGyHx7hA88vd/dlJcucVbxZSml xHLlK4V9VHo1OvYMw6IHD1lPaukLeVc/5NCaseQ/uv1ZDPdmxO7g1p0l/IDKJ7J42gHK YWamO4IN04O8/gKb/6HoGeV2OAZT5nPhjvAHRQwFeWTFWA7Q9o8Y0x6CGE+g/lL+W4+6 DXJYLw186o15rbtUo+GtArtGrDhsyNC6dm5U8OhO83er/k/uLuTiicBBriyNQ/DirZom MbMGS6Hl3CjP7+QQpVHRNTam6xCT4vTTjHfBU2sFtRX4vZg6lpwPztH/GUdBfJdFa/2E BT4Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=t1lcG8Ggb9dW/52mZyW7E7jyK+gtWmc0vHLu9grfrS4=; b=XUdt24kQx08CpTbuRbg+p9w4KRmcGk107cMoa2jct67zByFbvqaWehe4fW0P61pdnh 0tI+8hhVhZwC7f2TFH0A9BFNKwmz6yLNCcVp1Q5hanPz64r3L2i0twdJO+dP2KldDxHG frDIDTPqrA9VJlY27B2/BHNMHazCSZr5SpBbC7ApPn1GJ2ZLcTpPWV3UZzqWQaPzvh6b R7Bm64GixuW//gLd4wj3BZkBO665ERwXpp8nN14N/g1PaNe1OLksEkCxzU8+g7VEygmV 91gtAIarjbiAxFpVeXpxw3GkweN2l6Zu78yossyNtNYEpFtZuPxG5VFjuzGyfos6vU2G InZQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@lightnvm-io.20150623.gappssmtp.com header.s=20150623 header.b=q3kyI1v6; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e8si1257326pgs.308.2019.05.04.11.43.25; Sat, 04 May 2019 11:43:40 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@lightnvm-io.20150623.gappssmtp.com header.s=20150623 header.b=q3kyI1v6; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727949AbfEDSkj (ORCPT + 99 others); Sat, 4 May 2019 14:40:39 -0400 Received: from mail-lf1-f66.google.com ([209.85.167.66]:39400 "EHLO mail-lf1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727321AbfEDSid (ORCPT ); Sat, 4 May 2019 14:38:33 -0400 Received: by mail-lf1-f66.google.com with SMTP id z124so383820lfd.6 for ; Sat, 04 May 2019 11:38:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lightnvm-io.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=t1lcG8Ggb9dW/52mZyW7E7jyK+gtWmc0vHLu9grfrS4=; b=q3kyI1v6YZ08qjvL0Ba3sIUSXrJmIrajLiJNdL05tHU43pNHYLa1AZKfPXzZZpFCLa 1qS1c4tugr2EWLrVoKXJSAYYOrQarPUpvQbk0n+8iCMox7hwAzHxn3qmAK26CKyuhmgZ TTWMUDxIRTKSEtro/ds4NDxVPk8gl37+y7NrfI9KrDycEJV7ZM2cp8ydx0GBWkrOggE2 wOzzpw2fGh8xv4oXCTD+OU02MxwtB6sWleGg/DXYf2ppTkAku6pWsF6FCdQsKdZbkbo2 gl6VVDlP+u8G00rADug77Rq6n19PWK2c8apPeQKZ7hocjIz0MtBuqdXRUYp2ih8qltBV EMcg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=t1lcG8Ggb9dW/52mZyW7E7jyK+gtWmc0vHLu9grfrS4=; b=lkSCOQSqXVwev8v2j3Eyl657DrKIlmACNe78l5EJECbi0W5lecOfFqeYuwhpLKrNY2 OoKRY7Y8Sb3oH/1dYaTmljwgJJaQ+HXmHJi8mlnOVR9Nt7g+2mmRpfgT1WwSdC9s6w8Y +9b73EhtCVXb83tTUXA+gbLz5+35JGDpyZFh7ahMlX43fRh+OvBAtB8Y5noE5YYGBzUz xIR1jw+/rugj+p71phoEW1kOzCpSsiwx7CfsKSxnH4BOtQsOGOAyEgGGRW5IxhDX7W8l TLIFUShSME+lba7k3pMTXv3lX+p9ADqsMkHypMRyuhh4EhkaMW0ME58h3VN9ezarBjGu 5ZBA== X-Gm-Message-State: APjAAAWBbEjwYNX35qM4Ft420eLzls8xLyemf7mw/Sz342u0Qi3/sDJl zSB00OatMY7EeQ6OkB/efwol+w== X-Received: by 2002:a19:7b07:: with SMTP id w7mr447750lfc.82.1556995111393; Sat, 04 May 2019 11:38:31 -0700 (PDT) Received: from skyninja.webspeed.dk (2-111-91-225-cable.dk.customer.tdc.net. [2.111.91.225]) by smtp.gmail.com with ESMTPSA id q21sm1050260lfa.84.2019.05.04.11.38.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 04 May 2019 11:38:30 -0700 (PDT) From: =?UTF-8?q?Matias=20Bj=C3=B8rling?= To: axboe@fb.com Cc: linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, Igor Konopko , =?UTF-8?q?Matias=20Bj=C3=B8rling?= Subject: [GIT PULL 05/26] lightnvm: pblk: gracefully handle GC vmalloc fail Date: Sat, 4 May 2019 20:37:50 +0200 Message-Id: <20190504183811.18725-6-mb@lightnvm.io> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190504183811.18725-1-mb@lightnvm.io> References: <20190504183811.18725-1-mb@lightnvm.io> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Igor Konopko Currently when we fail on rq data allocation in gc, it skips moving active data and moves line straigt to its free state. Losing user data in the process. Move the data allocation to an earlier phase of GC, where we can still fail gracefully by moving line back to the closed state. Signed-off-by: Igor Konopko Reviewed-by: Javier González Reviewed-by: Hans Holmberg Signed-off-by: Matias Bjørling --- drivers/lightnvm/pblk-gc.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/drivers/lightnvm/pblk-gc.c b/drivers/lightnvm/pblk-gc.c index 65692e6d76e6..ea9f392a395e 100644 --- a/drivers/lightnvm/pblk-gc.c +++ b/drivers/lightnvm/pblk-gc.c @@ -84,8 +84,6 @@ static void pblk_gc_line_ws(struct work_struct *work) struct pblk_line_ws *gc_rq_ws = container_of(work, struct pblk_line_ws, ws); struct pblk *pblk = gc_rq_ws->pblk; - struct nvm_tgt_dev *dev = pblk->dev; - struct nvm_geo *geo = &dev->geo; struct pblk_gc *gc = &pblk->gc; struct pblk_line *line = gc_rq_ws->line; struct pblk_gc_rq *gc_rq = gc_rq_ws->priv; @@ -93,13 +91,6 @@ static void pblk_gc_line_ws(struct work_struct *work) up(&gc->gc_sem); - gc_rq->data = vmalloc(array_size(gc_rq->nr_secs, geo->csecs)); - if (!gc_rq->data) { - pblk_err(pblk, "could not GC line:%d (%d/%d)\n", - line->id, *line->vsc, gc_rq->nr_secs); - goto out; - } - /* Read from GC victim block */ ret = pblk_submit_read_gc(pblk, gc_rq); if (ret) { @@ -189,6 +180,8 @@ static void pblk_gc_line_prepare_ws(struct work_struct *work) struct pblk_line *line = line_ws->line; struct pblk_line_mgmt *l_mg = &pblk->l_mg; struct pblk_line_meta *lm = &pblk->lm; + struct nvm_tgt_dev *dev = pblk->dev; + struct nvm_geo *geo = &dev->geo; struct pblk_gc *gc = &pblk->gc; struct pblk_line_ws *gc_rq_ws; struct pblk_gc_rq *gc_rq; @@ -247,9 +240,13 @@ static void pblk_gc_line_prepare_ws(struct work_struct *work) gc_rq->nr_secs = nr_secs; gc_rq->line = line; + gc_rq->data = vmalloc(array_size(gc_rq->nr_secs, geo->csecs)); + if (!gc_rq->data) + goto fail_free_gc_rq; + gc_rq_ws = kmalloc(sizeof(struct pblk_line_ws), GFP_KERNEL); if (!gc_rq_ws) - goto fail_free_gc_rq; + goto fail_free_gc_data; gc_rq_ws->pblk = pblk; gc_rq_ws->line = line; @@ -281,6 +278,8 @@ static void pblk_gc_line_prepare_ws(struct work_struct *work) return; +fail_free_gc_data: + vfree(gc_rq->data); fail_free_gc_rq: kfree(gc_rq); fail_free_lba_list: -- 2.19.1