Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp4490948ybg; Mon, 21 Oct 2019 09:47:13 -0700 (PDT) X-Google-Smtp-Source: APXvYqwZwcErjxb1zuPa06hjlSWK/FMWWIsBpHgw+6cqtjbbYwqxqo3gpaeDo0Rsb2z/1xWcVL7m X-Received: by 2002:a50:8a90:: with SMTP id j16mr26525531edj.283.1571676433354; Mon, 21 Oct 2019 09:47:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1571676433; cv=none; d=google.com; s=arc-20160816; b=C+cunYrrsQEYWEUswpQ3mpYhIDhMypG0tFiBHsoojt0KMezDVhqUSkJQk4a/5NXpul 6ZAKgiKJXhRNvZ4qgCLjSaiYbwbkZiMrx0Q3oq2jKSYIQA4UA/msvT3QzMyInVBPHqV0 qqUWAaxSL10XT9XYItRCeoaw+RHE42nZPnec92F7OOQogDp+olNY9PAAFRit1DItavom 8MZ3k82cFWisKNSHEkmcVsDrdBmlihpWELFJBsdun1Xbgdv3cAwEN8KPEgAdtsE5ctsw s7r5uO7jbxDo6wy2r5B7r/MZkRLxgnLU2v5lKTlKtjypgvhz6XRrWBwhcisoQHFd8H0s DPpQ== 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 :user-agent:message-id:date:cc:to:from:subject; bh=s0Xghe8xFC4NVZL12trUT/tOvtZepxEaHLFTjNq5EZs=; b=mJQXBCuLfvpacxiZs0cX9BE+8/M0eWQSKnI257vlobBA1NNrwg5A2OpG1PrKZcGEwc VLmB0b9Blq4xhwZmUfwluWb9FikLEAjF/qfhFz5SBcSX5aJPrOVEiBzWBwbmK+htCNV4 JBxAprPl9d6d0IYfiYWC42muMtV+/2hrwxzyQJxuiwWmlVrZ+dDBz8tG26ZnMXOLG1wK ib6C6fglFIE1JcnJVc6F+uhtFK/mDd3NyQS1c0f6JwxnvseAyxj0W6DjCbgquVKFX4pN 08sgnUwYLkzkgRzs3QhMnhi1JUm7+cIL0TcoockygwFZz1jjzViFTSUaTTB2cUb32/co ByGw== ARC-Authentication-Results: i=1; mx.google.com; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x18si2414625ejo.78.2019.10.21.09.46.50; Mon, 21 Oct 2019 09:47:13 -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; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729945AbfJUQnj (ORCPT + 99 others); Mon, 21 Oct 2019 12:43:39 -0400 Received: from mga01.intel.com ([192.55.52.88]:59354 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727582AbfJUQnj (ORCPT ); Mon, 21 Oct 2019 12:43:39 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 21 Oct 2019 09:43:38 -0700 X-IronPort-AV: E=Sophos;i="5.67,324,1566889200"; d="scan'208";a="187595740" Received: from dwillia2-desk3.jf.intel.com (HELO dwillia2-desk3.amr.corp.intel.com) ([10.54.39.16]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 21 Oct 2019 09:43:38 -0700 Subject: [PATCH v2] fs/dax: Fix pmd vs pte conflict detection From: Dan Williams To: linux-fsdevel@vger.kernel.org Cc: Jeff Smits , Doug Nelson , stable@vger.kernel.org, Jan Kara , Jeff Moyer , "Matthew Wilcox \(Oracle\)" , linux-nvdimm@lists.01.org, linux-kernel@vger.kernel.org Date: Mon, 21 Oct 2019 09:29:20 -0700 Message-ID: <157167532455.3945484.11971474077040503994.stgit@dwillia2-desk3.amr.corp.intel.com> User-Agent: StGit/0.18-2-gc94f MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Users reported a v5.3 performance regression and inability to establish huge page mappings. A revised version of the ndctl "dax.sh" huge page unit test identifies commit 23c84eb78375 "dax: Fix missed wakeup with PMD faults" as the source. Update get_unlocked_entry() to check for NULL entries before checking the entry order, otherwise NULL is misinterpreted as a present pte conflict. The 'order' check needs to happen before the locked check as an unlocked entry at the wrong order must fallback to lookup the correct order. Reported-by: Jeff Smits Reported-by: Doug Nelson Cc: Fixes: 23c84eb78375 ("dax: Fix missed wakeup with PMD faults") Reviewed-by: Jan Kara Cc: Jeff Moyer Cc: Matthew Wilcox (Oracle) Signed-off-by: Dan Williams --- Changes in v2: - Update the changelog to reflect the user visible effects of the bug (Jeff) fs/dax.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fs/dax.c b/fs/dax.c index 6bf81f931de3..2cc43cd914eb 100644 --- a/fs/dax.c +++ b/fs/dax.c @@ -220,10 +220,11 @@ static void *get_unlocked_entry(struct xa_state *xas, unsigned int order) for (;;) { entry = xas_find_conflict(xas); + if (!entry || WARN_ON_ONCE(!xa_is_value(entry))) + return entry; if (dax_entry_order(entry) < order) return XA_RETRY_ENTRY; - if (!entry || WARN_ON_ONCE(!xa_is_value(entry)) || - !dax_is_locked(entry)) + if (!dax_is_locked(entry)) return entry; wq = dax_entry_waitqueue(xas, entry, &ewait.key);