From patchwork Wed Jun 20 22:54:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Heiner Litz X-Patchwork-Id: 10478817 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id E928960230 for ; Wed, 20 Jun 2018 22:56:32 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D9F212903F for ; Wed, 20 Jun 2018 22:56:32 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id CDF5E2904D; Wed, 20 Jun 2018 22:56:32 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7F41E2912C for ; Wed, 20 Jun 2018 22:55:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754136AbeFTWzI (ORCPT ); Wed, 20 Jun 2018 18:55:08 -0400 Received: from mail-pg0-f68.google.com ([74.125.83.68]:38779 "EHLO mail-pg0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752838AbeFTWzI (ORCPT ); Wed, 20 Jun 2018 18:55:08 -0400 Received: by mail-pg0-f68.google.com with SMTP id c9-v6so475445pgf.5 for ; Wed, 20 Jun 2018 15:55:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ucsc.edu; s=ucsc-google; h=from:to:cc:subject:date:message-id; bh=XM23QbrqdI56HQLyaKWTBwCbaPMQcGokaSpCUQwqA1E=; b=QxM+wxynctrTcKhKhg8HbkPtE47E81pqzpym6FgnFxQgiTI1aLdwa029T5vqYW50bb yA7nSD5BCnWVQDJLn1Qk2bCUjVgVkRhrPav8A8OTHSTZ+k86AkW/6uam9QEVV+7hgvP0 yIHymzWZ8n2WxgKNhLuj5ntIgUzVfPAVXwuXg= 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; bh=XM23QbrqdI56HQLyaKWTBwCbaPMQcGokaSpCUQwqA1E=; b=gAWOvO8PSUh+fl8wUFPgqW841+VX1AcHbOfU4x3DLQIpJfRyRlMhRaa/mebx202kEA Lw10ysmQuOlQhbpzYs7E/iXKL8D6Tp8v6LLosR6qPxCmUxuAkflKpB4olKrYwzLxZ2cJ A0bkUnQXxzQwITCq+dVpjJgECUfX4OGOfmCOuCf0ZmhaqWRZ6fg49Qbv/Or6vTMDx5fW j9Ef8u2x9SZiDcxEdbsnP80nBzNxR/kBRSx/6p4iP/jIM3t9Wt5UU3AZUQtH1XsAv2I5 HGjxcZqRlpGl6gKjutGA/WfU1EPn4ycEMqeerGRuFjGnkh9iweUGCNQGm6jFzLEWQ6Tb 2wAg== X-Gm-Message-State: APt69E2mK4jM5IH++XakoppoyI8L/rlbBXfC/nUdQiVM981d9zYwmvDl WkcZXLjCcaJ0fg3YiYPmO1mDvMe4 X-Google-Smtp-Source: ADUXVKL8+/47+N+TpNu1/48U+Ya5+pl1nrdyekNqwGpud8O4jeQCaBK5zdG6V9qw/N1o+nHIL0e2mw== X-Received: by 2002:a63:9a01:: with SMTP id o1-v6mr20240685pge.439.1529535307089; Wed, 20 Jun 2018 15:55:07 -0700 (PDT) Received: from maverick-18.stanford.edu (DN2lk42hq.stanford.edu. [171.66.10.58]) by smtp.gmail.com with ESMTPSA id a10-v6sm7569166pfg.107.2018.06.20.15.55.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 20 Jun 2018 15:55:05 -0700 (PDT) From: Heiner Litz To: linux-block@vger.kernel.org Cc: javier@cnexlabs.com, mb@lightnvm.io, marcin.dziegielewski@intel.com, igor.j.konopko@intel.com, Heiner Litz Subject: [PATCH] lightnvm: pblk: Add read memory barrier when reading from rb Date: Wed, 20 Jun 2018 15:54:58 -0700 Message-Id: <1529535298-15465-1-git-send-email-hlitz@ucsc.edu> X-Mailer: git-send-email 2.7.4 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP READ_ONCE does not imply a read memory barrier in the presence of control dependencies between two separate memory locations (flags and data). On x86 TSO, reading from the data page might be reordered before the flags read. See chapter CONTROL DEPENDENCIES in https://www.kernel.org/doc/Documentation/memory-barriers.txt Signed-off-by: Heiner Litz Reviewed-by: Javier González --- drivers/lightnvm/pblk-rb.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/lightnvm/pblk-rb.c b/drivers/lightnvm/pblk-rb.c index a81a97e..5f09983 100644 --- a/drivers/lightnvm/pblk-rb.c +++ b/drivers/lightnvm/pblk-rb.c @@ -545,6 +545,9 @@ unsigned int pblk_rb_read_to_bio(struct pblk_rb *rb, struct nvm_rq *rqd, goto try; } + /* Observe control dependency between flags and data read */ + smp_rmb(); + page = virt_to_page(entry->data); if (!page) { pr_err("pblk: could not allocate write bio page\n");