From patchwork Wed Nov 25 11:37:00 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Matias Bjorling X-Patchwork-Id: 7698201 X-Patchwork-Delegate: axboe@kernel.dk Return-Path: X-Original-To: patchwork-linux-block@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 68BE79F1D3 for ; Wed, 25 Nov 2015 11:37:27 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 806BC208AD for ; Wed, 25 Nov 2015 11:37:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8F55820877 for ; Wed, 25 Nov 2015 11:37:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752464AbbKYLhE (ORCPT ); Wed, 25 Nov 2015 06:37:04 -0500 Received: from mail-wm0-f47.google.com ([74.125.82.47]:33065 "EHLO mail-wm0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752286AbbKYLhC (ORCPT ); Wed, 25 Nov 2015 06:37:02 -0500 Received: by wmec201 with SMTP id c201so251962006wme.0 for ; Wed, 25 Nov 2015 03:37:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lightnvm-io.20150623.gappssmtp.com; s=20150623; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type:content-transfer-encoding; bh=eRWSEuPhKzRczieih7anhd14b56tdxjTESILIlUuwMw=; b=Vmh/8fAq8Qkqr11//G4SSx1l7W6QXVy8iM4qYHtUjLRDqGca+6Fe/RKijrrnOhsK6+ mqdoDq6FLXX9ZoOmSNWWR1wLbY3RxKCn4TPtnlCUOLjqIqfOjEzWsN12X2khxxTaHZVf QtsUDrvir8tfzi0HfU5HfJbuqG/kJO+z5ApamVL+XVJmlJjY6C4DQIjqyuYO+dfUXYFu 4PpejeIRszmw15uW5gm0LV7dAnjlJxSOLHbZA1vozWTEubE1EtoLrAi+aCg9K2jAdC0E zcPeNlddFW7diR9cIwa8eIDiR1kz54qMIEQVUmAtCAgx+TYSBOGUOuB3W8A89Iix6QXW ivtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to :cc:subject:references:in-reply-to:content-type :content-transfer-encoding; bh=eRWSEuPhKzRczieih7anhd14b56tdxjTESILIlUuwMw=; b=MF4qwVOa/VuolwtDBImBiaD4FuJUk5E6w7IWhyCE2gfQa2GhoMrD5cH4nVAZYVCkRI XU88LvUsrI0In+QrXBMA7V59/5G/Kpuzixkb9pDGXC/e0l6V/jNaKYSzQsMGM/MVYzga Flm+RzkdtkJd4h0/04YiAaNXafzJHjfIYnL//13gQZuVDxjooots1PWwD3KbgtJ38G07 kZ3UvyXMwh+tsar0+Zif/JyZ5C33pR1Me+fURLfoOxzGa6TJW7WjtEqGCylFVMOMGKyS doWWp1/SNKfV5X1xBZT8Xik3TqW59Hh3+K/uDKvmJtn5moMJTjUXhHIfWL5MNbKn/C4i e2bQ== X-Gm-Message-State: ALoCoQl9YjUFtL1JMEGxsiDk/mYUeASMSTP+hoML0a2fqd4PCjAIpDblQ6vaidXpnm+BAdpNR1tP X-Received: by 10.28.184.13 with SMTP id i13mr3679297wmf.31.1448451421273; Wed, 25 Nov 2015 03:37:01 -0800 (PST) Received: from [192.168.1.131] (6164198-cl69.boa.fiberby.dk. [193.106.164.198]) by smtp.googlemail.com with ESMTPSA id w203sm3056980wmg.15.2015.11.25.03.37.00 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 25 Nov 2015 03:37:00 -0800 (PST) Message-ID: <56559D5C.6090004@lightnvm.io> Date: Wed, 25 Nov 2015 12:37:00 +0100 From: =?UTF-8?B?TWF0aWFzIEJqw7hybGluZw==?= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Wenwei Tao CC: linux-kernel@vger.kernel.org, linux-block@vger.kernel.org Subject: Re: [PATCH] lightnvm: missing nvm_lock acquire References: <1448378697-2532-1-git-send-email-ww.tao0320@gmail.com> <5654AE2D.2080802@lightnvm.io> In-Reply-To: Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Spam-Status: No, score=-7.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, 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 On 11/25/2015 09:57 AM, Wenwei Tao wrote: > Hi Matias > I think list_for_each_entry_safe(pos, n, head, member) cannot avoid > race condition > the item point by ‘n’ can be deleted and freed in the same time we > operate on 'pos' > so lock is still necessary. > I've made the patch like this, ok? To avoid race conditions, traverse dev, media manager, and target lists and also register, unregister entries to/from them, should be always under the nvm_lock control. Signed-off-by: Wenwei Tao Signed-off-by: Matias Bjørling --- drivers/lightnvm/core.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) } @@ -388,13 +390,14 @@ static int nvm_create_target(struct nvm_dev *dev, } } + down_write(&nvm_lock); tt = nvm_find_target_type(create->tgttype); if (!tt) { pr_err("nvm: target type %s not found\n", create->tgttype); + up_write(&nvm_lock); return -EINVAL; } - down_write(&nvm_lock); list_for_each_entry(t, &dev->online_targets, list) { if (!strcmp(create->tgtname, t->disk->disk_name)) { pr_err("nvm: target name already exists.\n"); diff --git a/drivers/lightnvm/core.c b/drivers/lightnvm/core.c index ea6dba5..9f901f6 100644 --- a/drivers/lightnvm/core.c +++ b/drivers/lightnvm/core.c @@ -127,9 +127,11 @@ static struct nvm_dev *nvm_find_nvm_dev(const char *name) { struct nvm_dev *dev; + down_write(&nvm_lock); list_for_each_entry(dev, &nvm_devices, devices) if (!strcmp(name, dev->name)) return dev; + up_write(&nvm_lock); return NULL;