From patchwork Tue Dec 29 08:27:02 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wenwei Tao X-Patchwork-Id: 7929151 Return-Path: X-Original-To: patchwork-linux-block@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 99EE5BEEE5 for ; Tue, 29 Dec 2015 08:27:22 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id C4F8A201F2 for ; Tue, 29 Dec 2015 08:27:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E82B1201CD for ; Tue, 29 Dec 2015 08:27:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753096AbbL2I1K (ORCPT ); Tue, 29 Dec 2015 03:27:10 -0500 Received: from mail-pa0-f66.google.com ([209.85.220.66]:34985 "EHLO mail-pa0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752744AbbL2I1J (ORCPT ); Tue, 29 Dec 2015 03:27:09 -0500 Received: by mail-pa0-f66.google.com with SMTP id gi1so14928208pac.2; Tue, 29 Dec 2015 00:27:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=hAzERoHZAez9QAzxrm4A0lnhmdYTeAY3tuJh0prZGvc=; b=yXuiwmTFHMoWkdTffcXUerWHkkuL+teeQuMoeJTu2zYFqoQD1Q0fog0jG0WcZFs8L3 h9HliVS5zWXBMjkz015jM3zTdsyLeg5dVNkV8MXwDAEb4ElEtqdaPVJOsOPCOrFiGkXI /Q33YIL5wTyT/Qjgm+N2Qp74QtCZpZVqg2I3yW4MxVUQG1sqCVNT6vlUwSBM5j5FFAZj 3U2ku86lMaxJwJbJAdywqrpVWctWQ9TO08P3yhptNFpsbA/4fqduDCQ3PRzDNDG+PVs4 J0UHGATCyNLj2xnMSyLmGUP6coWjhf7yy5Smj/zCTzOR1xq1IkZQ7WB7Oudh5Hj7V/T3 OXLg== X-Received: by 10.66.234.200 with SMTP id ug8mr7014391pac.129.1451377628759; Tue, 29 Dec 2015 00:27:08 -0800 (PST) Received: from localhost.localdomain.com ([111.204.49.2]) by smtp.gmail.com with ESMTPSA id e67sm81360532pfj.53.2015.12.29.00.27.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 29 Dec 2015 00:27:08 -0800 (PST) From: Wenwei Tao To: mb@lightnvm.io Cc: linux-kernel@vger.kernel.org, linux-block@vger.kernel.org Subject: [PATCH] lightnvm: put block back to gc list on its reclaim fail Date: Tue, 29 Dec 2015 16:27:02 +0800 Message-Id: <1451377622-5175-1-git-send-email-ww.tao0320@gmail.com> X-Mailer: git-send-email 1.8.3.1 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, 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 We delete a block from the gc list before reclaim it, so put it back to the list on its reclaim fail, otherwize this block will not get reclaimed and be programable in the future. Signed-off-by: Wenwei Tao --- drivers/lightnvm/rrpc.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/drivers/lightnvm/rrpc.c b/drivers/lightnvm/rrpc.c index d40c140..67b14d4 100644 --- a/drivers/lightnvm/rrpc.c +++ b/drivers/lightnvm/rrpc.c @@ -379,16 +379,26 @@ static void rrpc_block_gc(struct work_struct *work) struct rrpc *rrpc = gcb->rrpc; struct rrpc_block *rblk = gcb->rblk; struct nvm_dev *dev = rrpc->dev; + struct nvm_lun *lun = rblk->parent->lun; + struct rrpc_lun *rlun = &rrpc->luns[lun->id - rrpc->lun_offset]; + mempool_free(gcb, rrpc->gcb_pool); pr_debug("nvm: block '%lu' being reclaimed\n", rblk->parent->id); if (rrpc_move_valid_pages(rrpc, rblk)) - goto done; + goto put_back; + + if (nvm_erase_blk(dev, rblk->parent)) + goto put_back; - nvm_erase_blk(dev, rblk->parent); rrpc_put_blk(rrpc, rblk); -done: - mempool_free(gcb, rrpc->gcb_pool); + + return; + +put_back: + spin_lock(&rlun->lock); + list_add_tail(&rblk->prio, &rlun->prio_list); + spin_unlock(&rlun->lock); } /* the block with highest number of invalid pages, will be in the beginning